cover

区块链钱包对接.NET开发包

汇智网 / hubwiz.com

简化PHP以太坊应用开发,避免部署自己的以太坊节点。

CoinGate实现了与以太坊、比特币和usdt的对接网关,并为二次开发提供了一致的API接口。

CoinGate运行于.net 4.5.2,当前版本1.0.0,文件清单如下:

代码文件说明
CoinGate/Gateway.cs钱包对接网关
CoinGate/CoinAdapter.cs币种适配器父类
CoinGate/FaceValue.cs币种面值处理父类
CoinGate/BitcoinAdapter.cs比特币适配器
CoinGate/BitcoinFaceValue.cs比特币面值处理
CoinGate/EthereumAdapter.cs以太坊适配器
CoinGate/EthereumFaceValue.cs以太坊面值处理
CoinGate/OmniAdapter.csOmni适配器(usdt)
CoinGate/OmniFaceValue.csOmni面值处理
CoinGateDemo/Program.cs库使用示例代码

1、网关:Gateway

Gateway是一个工厂类,使用其静态方法GetAdapter()获取一个针对特定数字币的适配器, 例如下面的代码获取一个采用默认配置参数的以太坊适配器实例:

CoinAdapter adapter = Gateway.GetAdapter("eth");

可以传入额外的配置对象来定制适配器的行为。例如修改默认的节点RPC地址:

NameValueCollection config = new NamveValueCollection 
{
  {"RPC_URL", "http://192.168.1.78:8545"}
};
CoinAdapter adapter = Gateway.GetAdapter("eth",config);

2、币种适配器:CoinAdapter

CoinAdapter是一个包含如下方法声明的接口:

  • string NewAddress() :创建一个新地址
  • string GetBalance(string address):获取指定地址的余额
  • string Transfer(string from, string to, string asset):一对一转账
  • BigInteger GetConfidence(string txid):获取交易置信度

因此,使用上面获得的adapter实例,可以创建一个新地址,例如:

string address = adapter.NewAddress();
Console.WriteLine("address => {0}", address);

或者获取指定地址的余额,例如:

string balance = adapter.GetBalance("0x1b7f44dac2b9e668d7f22372c8b40c9f9d611e7a");
Console.WriteLine("balance => {0}", balance);

或者执行一对一转账,例如:

string txid = adapter.Transfer("0x1b7f44dac2b9e668d7f22372c8b40c9f9d611e7a",
                               "0x25087c725a889420db219746296bd9dc2f18c497","1000 wei");

Transfer()方法的前两个参数分别为转出地址和转入地址,第三个参数为资金描述信息,例如1000 wei 表示要转移的资金数量为1000,单位为wei,以太币的最小单位。

Transfer()方法返回提交给区块链节点的转账交易ID,并不表示该交易被确认。因此交易发起方应当 在提交转账交易后定期检查交易置信度,例如:

BigInteger cf = adapter.GetConfidence(txid);
Console.WriteLine("confidence => {0}", cf);

在目前的实现中,置信度对应于交易的确认数,因此未确认的交易,其置信度为0;当交易上链 时,其置信度为1;包含交易的区块之后出现越多的区块,交易的置信度就越高。

CoinAdapter目前有三个实现,分别用于对接以太坊、比特币和USDT:

  • EthereumAdapter
  • BitcoinAdapter
  • OmniAdapter

虽然以上CoinAdapter实现的接口方法一致,但其对配置参数、地址、资金描述信息等数据 的要求各有不同。下面分别说明。

2.1 以太坊

EthereumAdapter实现与以太坊节点旳对接。其配置参数说明如下:

  • RPC_URL: 节点RPC接口的URL,默认值:http://localhost:8545
  • ACCOUNT_PASS: 节点账户的固定密码

例如,使用默认节点RPC接口URL,但设置一个复杂点的节点账户密码:

NameValueCollection config = new NameValueCollection
{
  { "ACCOUNT_PASS", "2WEKaVNO"}
};

EthereumAdapter的Transfer()方法可接受的资金描述信息,目前支持单位:wei、eth, 当使用wei作为计量单位时,数值必需为不包含小数点的全数字,例如:23100000 wei; 当使用eth作为计量单位时,数值可以包含小数部分,例如:0.02 eth

EthereumAdapter的GetBalance()方法返回的字符串为指定账户余额数值,计量单位:wei。

EthereumAdapter的方法调用参数与返回结果,涉及到地址的,均表示以太坊地址,即包含0x 前缀的20字节16进制字符串,大小写不敏感,例如:

0x1b7f44dac2b9e668d7f22372c8b40c9f9d611e7a

2.2 比特币

BitcoinAdapter实现与比特币节点旳对接,其配置参数说明如下:

  • RPC_URL:节点RPC接口的URL,默认值:http://localhost:8332
  • RPC_USER:节点RPC接口的用户名,默认值:user
  • RPC_PASS:节点RPC接口的密码,默认值:pass
  • MIN_CONFIRMATIONS:交易最小确认数,默认值:1
  • MAX_CONFIRMATIONS:交易最大确认数,默认值:9999999
  • RELAY_FEE:中继费,默认值:10000,计量单位为satoshi
  • NETWORK:节点所接入的网络,默认值:Main,可选:Main / TestNet / RegTest

例如,使用本地的私有bitcoind节点:

NameValueCollection config = new NameValueCollection
{
  {"RPC_URL","http://localhost:18443"},
  {"NETWORK","RegTest"}
};
CoinAdapter = Gateway.GetAdapter("btc",config);

BitcoinAdapter的Transfer()方法可接受的资金描述信息,目前支持单位:sat、btc, 当使用sat作为参数时,数值中不能包含小数点,例如:2000000 sat; 当使用btc作为参数时,数值中可以包含小数点,例如:0.02 btc

BitcoinAdapter的GetBalance()方法返回的字符串为指定账户余额数值,单位:sat。

BitcoinAdapter的方法调用参数与返回结果,涉及到地址的,均表示比特币地址,即 Base58编码的哈希值,例如:

17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem

比特币存在多个网络,并且有多种地址形式,同一个私钥也可能有多种不同的地址。可以 参考官方的比特币地址前缀 进一步了解。

需要指出的是,在BitcoinAdapter的方法调用时传入的地址参数,应当与创建 适配器实例时设定的网络相一致。例如上例中的地址是一个主网地址,因此需要 创建一个主网的BitcoinAdapter实例才可以使用该地址。

2.3 USDT

USDT是OmniLayer层的一个代币,因此我们使用OmniAdapter实现与USDT的对接, 其配置参数及默认值如下:

  • RPC_URL:节点RPC接口的URL,默认值:http://localhost:8332
  • RPC_USER:节点RPC接口的用户名,默认值:user
  • RPC_PASS:节点RPC接口的密码,默认值:pass
  • NETWORK:节点所接入的网络,默认值:Main,可选:Main / TestNet / RegTest
  • PROPERTY_ID:代币资产ID,默认值:31,即USDT

例如,使用本地私有链上的代币17892进行测试,可以如下配置:

NameValueCollection config = new NameValueCollection
{
  {"RPC_URL", "http://localhost:18332"},
  {"NETWORK", "RegTest"},
  {"PROPERTY_ID", "17892"}
};
CoinAdapter adapter = Gateway.GetAdapter("omni",config);

OmniAdapter的Transfer()方法可接受的资金描述信息,目前仅支持单位:usdt, 数值部分可以包含小数点,例如:100.00 usdt

OmniAdapter的GetBalance()方法返回的字符串为指定账户代币余额数值。

由于OmniLayer是在比特币协议上叠加的一层,因此OmniAdapter也使用比特币地址。 同时需要注意的一点是,由于转账的交易费采用比特币支付,因此USDT转账交易的发起账户 除了有足够的usdt余额,还需要有一定的比特币余额来支付手续费。

CoinGateDemo

在运行CoinGateDemo演示之前,请根据自己的运行环境修改演示代码,例如: 节点URL、交易发起账号、转账金额等,并确保交易发起账号有足够的余额。

修改代码后生成执行程序,然后打开一个控制台,即可进行测试。

测试以太坊对接:

> CoinGateDemo.exe eth

测试比特币对接:

> CoinGateDemo.exe btc

测试USDT对接:

> CoinGateDemo.exe omni

由于USDT宿主在比特币之上,因此交易发起账号还需要有一定的比特币余额用于 支付交易手续费。

声 明

本站所提供软件包仅用于学习和研究,请依法合规使用。

本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。

¥7500.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.0.0 2019-2-1
下载最新版
QQ咨询
2860991437
9+