如何使用 C++ 编程加密货币交易 API(在 Windows 上使用 Crimeacoin)






4.76/5 (5投票s)
本文逐步解释了如何开始使用比特币、莱特币、克里米亚币等加密货币 API 进行编程。工作示例已针对克里米亚币编写。
引言
互联网上有一项新的创新发明。它被称为加密货币!尽管电视对第一种加密货币比特币带来了很多负面报道,但我仍然认为这种数字货币是未来。我们听到的关于比特币的矛盾在未来很容易成为积极的特征。让我解释一下我的意思。
我与信用卡网络合作了很多。例如,我的一项工作是为使用信用卡进行在线支付的商家工作,以及 PayPal。此外,我曾为世界上最大的信用卡发行商之一工作。因此,当我说在互联网上处理信用卡交易并不像看起来那么好时,我想我了解一些情况。
信用卡交易存在大量欺诈行为。特别是在互联网上……尤其是销售不需要运送到实际地址的商品时。作为客户,如果有人在互联网上窃取您的信用卡信息并用它在商店付款,政府法律会为您提供保障。政府命令信用卡发行商在这种情况下将钱退还给客户。即使信用卡没有被盗并且交易发生了,客户也很容易要求商家退款。即使商家拒绝,客户也很容易打电话给银行并发起退款。有人可能会认为所有金钱损失都属于信用卡发行商。我一次又一次地在 CNN 等主要新闻频道上听到这种观点,报道 Target 信用卡数据泄露事件。他们错了——接下来接受被盗信用卡的商家承担所有损失!发生的情况是,信用卡盗窃的受害者在欺诈性交易发生几天、几周或几个月后致电信用卡发行商或银行。此人发起退款。然后,信用卡发行商从商家那里收回钱,并等待,收取额外的退款处理费,通常每个未结案件为 10 到 20 美元。
那么在著名的 Target 数据泄露事件中,谁受苦了?Target?也许品牌声誉受损了一点。客户?他们所有的被盗资金都退回来了!信用卡发行商?绝对没有,他们从在 Target 安全漏洞后处理所有被盗信用卡的商家那里拿走了钱!信用卡发行商甚至通过向商家收取退款费赚了很多钱。
加密货币消除了这些退款问题!像比特币这样的交易对象不提供有关客户钱包的信息。使用加密货币发起在线交易时,您唯一需要担心的是接收地址和金额!卖方提供特定的付款地址,买方将钱发送到该地址。这消除了商家可能出现的欺诈性交易的麻烦,因此这些交易变得不那么匿名。买方不会将其敏感的个人账单信息传递给卖方。此外,卖方无需担心未来的退款费用。这只是一个主要的积极因素,它已经将这场经济革命带入我们现代的物质世界。
第二个最重要的原因是为什么加密货币将击败信用卡支付:几乎没有交易费用。信用卡发行商为商家创建了大量表格,其中包含所有这些累积的费用。如果商家想接受信用卡,他或她会向信用卡发行商支付百分之五到百分之十的钱。这反映在所售商品的价格中。(你以为你的信用卡的奖励积分是从哪里来的……)
你现在同意我的看法吗,加密货币是自信用卡以来最伟大的发明之一?
CrimeaCoin 是一种新的加密货币。
我选择这种加密货币是因为它刚进入市场。它源于莱特币的源代码。此外,莱特币诞生于比特币。如果你想知道,CrimeaCoin 是基于“scrypt”算法的。
这些因素对我们的例子很重要。
1. 你不需要花任何钱来测试代码。当一种币还很年轻时,在早期阶段很容易挖到它们。CrimeaCoin.org 有一份非常详细的挖矿指南:http://www.crimeacoin.org/crimeacoin-mining-explained.aspx。我挖了 10 分钟,收到了大约 200 个币。谁知道呢,也许这些币将来会值很多真金白银。
有一个适用于 Windows 的可运行的已编译 CrimeaCoin 服务/守护进程应用程序,可以作为服务器上的计划任务运行。此应用程序将通过套接字连接监听 RPC 调用。它的名称是 crimeacoind.exe。
Using the Code
环境设置
您需要设置并运行 CrimeaCoin 守护程序。下载链接可从开发者页面获取。
尝试从命令行启动它。它会给你一个配置文件缺失的警告。
确保您在以下位置拥有 crimeacoin.conf 文件:C:\Users\yourusername\AppData\Roaming\crimeacoin。它是 CrimeaCoin 守护程序和钱包 GUI 应用程序的配置文件。如果您愿意,也可以安装 GUI 钱包。
此位置还包含 debug.log 文件,并且 CrimeaCoin 区块将根据需要下载到此处。这些是您必须在 conf 文件中包含的几行基本内容。
server=1
rpcuser=yourcrimeacoinusername
rpcpassword=verylongpasswordthatcanbeguessed
rpctimeout=60
rpcallowip=127.0.0.1
rpcport=29332
服务器设置意味着守护程序将在您的 Windows 机器上运行自己的 RPC 服务器。Rpcuser
和 rpcpassword
是 CrimeaCoin 钱包 API 操作所必需的。请想出一些复杂的密码。Rpcallowip
应该只包含调用守护程序的机器的 IP。否则,最坏的情况是一些黑客可能会窃取您的 CrimeaCoins。Rpcport
告诉守护程序监听此端口上的传入连接。如果需要,请更改它。
现在您可以从命令行启动 crimeacoind.exe。
当 exe 文件运行时,启动第二个命令行并输入“crimeacoind.exe getinfo
”。按回车键。您应该看到类似以下内容:
c:\Program Files\CrimeaCoin>crimeacoind.exe getinfo
{
"version" : 90000,
"protocolversion" : 70002,
"walletversion" : 60000,
"balance" : 135.06597672,
"blocks" : 1285,
"timeoffset" : 0,
"connections" : 3,
"proxy" : "",
"difficulty" : 0.17470968,
"testnet" : false,
"keypoololdest" : 1394941152,
"keypoolsize" : 112,
"paytxfee" : 0.00000000,
"mininput" : 0.00001000,
"errors" : ""
}
这意味着守护程序已启动并正在运行。您甚至可以阅读 debug.log 以检查它是否正在连接到 CrimeaCoin 网络。
现在是时候进行一些 C# 编程了。
对 CrimeaCoin 钱包的 RPC 调用
我已将这个简单的控制台应用程序附加到本文中。您可以下载它。您需要做的第一件事是根据您的 CrimeaCoin 守护程序设置更改 .NET 应用程序配置文件中的以下值。
<appSettings>
<add key="CrimeacoinDaemonUrl" value="https://.:29332"/>
<add key="CrimeacoinRpcUsername" value="yourcrimeacoinusername"/>
<add key="CrimeacoinRpcPassword" value="verylongpasswordthatcanbeguessed"/>
<add key="CrimeacoinRpcRequestTimeoutInSeconds" value="60"/>
</appSettings>
一旦这些被修改,您就可以开始向 CrimeaCoin 钱包发出 RPC 请求。在我的情况下,它在本地运行。调用通过 http 请求进行。连接到 CrimeaCoin 钱包需要授权。为此,我在代码中设置了用户名和密码。
//Setting up authorization info
String authInfo = ConfigurationManager.AppSettings["CrimeacoinRpcUsername"] +
":" + ConfigurationManager.AppSettings["CrimeacoinRpcPassword"];
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
webRequest.Headers["Authorization"] = "Basic " + authInfo;
为每笔交易或每个买家创建一个新的收款地址
虚拟货币交易的性质不允许其他人查明发送方是谁,这通常是一件好事。因此,我们需要为每个客户甚至每笔交易创建一个新地址。如果您将一本书卖给 John Doe,您必须给他一个独特的 CrimeaCoin 地址用于汇款。一旦您在钱包中看到入账的硬币,您就会知道使用了哪个收款地址来传输资金。
所以,有一个 RPC 调用来生成新地址“getnewaddress
”。我的函数非常简单。
public GetNewAddressResponse getNewAddress()
{ CrimeacoinRpcRequest newAddressRequest = new CrimeacoinRpcRequest(1, "getnewaddress", null);
HttpWebRequest webRequest = MakeHttpRequest(newAddressRequest);
string jsonResponse = GetJsonResponse(webRequest);
JavaScriptSerializer jsSer = new JavaScriptSerializer();
return (GetNewAddressResponse)jsSer.Deserialize<GetNewAddressResponse>(jsonResponse);
}
等待付款确认
一旦您将唯一的接收地址交给客户,您就必须等待传入的交易。这部分有点棘手。由于虚拟货币点对点的性质,可能会出现一些双重花费的问题。双重花费使 Mt Gox 交易所巨头倒闭,我相信您听说过。幸运的是,有一种简单的技术可以确保您的在线商店不会被一些聪明的黑客滥用。
所有 CrimeaCoin 交易都逐块哈希。过去的每一笔交易都是当前区块和未来区块的一部分。此外,CrimeaCoin 区块的计算速度足够快。在我撰写本文时,每两到五分钟就会产生一个区块。如果您看到包含客户交易的区块,请等待另一个或多个区块。每个额外的区块都会降低双重花费的可能性。如果您等待五个确认区块,则交易有 99.99% 的概率是可靠的。
作为一种选择,您可以在交易的第一个区块之后,在您的在线商店系统中将订单标记为已授权。然后,在五个或更多区块确认后,您可以将订单更改为结算状态。
让我们看看如何扫描新的传入交易并检查确认号。我的钱包里收到了几枚硬币,我正在阅读这些信息。
我们将使用 CrimeaCoin
API 调用 “listtransactions
”。可选参数为 [account] [count=10] [from=0]
。描述如下:
返回最多 [count]
条最近的交易,跳过账户 [account]
的前 [from]
条交易。如果未提供 [account]
,则返回所有账户的最近交易。
我将检查最近的 10 笔交易。
public ListTransactionsResponse listTransactions()
{ CrimeacoinRpcRequest newAddressRequest =
new CrimeacoinRpcRequest(2, "listtransactions", null);
HttpWebRequest webRequest = MakeHttpRequest(newAddressRequest);
string jsonResponse = GetJsonResponse(webRequest);
JavaScriptSerializer jsSer = new JavaScriptSerializer();
return (ListTransactionsResponse)jsSer.Deserialize<ListTransactionsResponse>(jsonResponse);
}
我的输出显示如下:
Transaction address :
CarDXKkcv8Cw3Mi9V5h6dVCxh9GTwV6zEf
Transaction Amount :
0.61206407
Confirmation count : 4
Transaction address :
CarDXKkcv8Cw3Mi9V5h6dVCxh9GTwV6zEf
Transaction Amount :
1.81192974
Confirmation count : 2
Transaction address :
CarDXKkcv8Cw3Mi9V5h6dVCxh9GTwV6zEf
Transaction Amount :
2.23472546
Confirmation count : 0
您可能通过此 API 调用更好地检查资金。
- 方法:
Getreceivedbyaddress
- 参数:
<crimeacoinaddress> [minconf=1]
- 描述:返回
<crimeacoinaddress>
在至少具有[minconf]
确认的交易中收到的总金额。尽管有些人可能认为这很明显,但此值仅考虑 *接收* 交易。它不检查 *从* 此地址进行的付款。换句话说,这不是“getaddressbalance
”。仅适用于本地钱包中的地址,外部地址将始终显示0
。
关注点
我了解到,编程虚拟货币 API 将电子商务带到了新的进化水平。在互联网上买卖商品时,使用 CrimeaCoins 比使用信用卡更容易。直接的加密币传输机制可以通过消除过时的信用卡交易商家费用来节省大量资金。
买家在进行加密货币交易时,无需将敏感的账单信息信任给在线商家。
历史
- 2014 年 3 月 25 日 - 提交原始版本