从比特币完成历史性的减半后,比特币的连续暴跌似乎再次刷新韭菜们的认知,而作为在当前数字货币交易场景中承担风险对冲与资产保值的稳定币USDT来说,交易量和价格近日扶摇直上,相对应的基于存储和管理数字资产的USDT钱包炙手可热。随着交易量的持续增加,交易场景的繁华,一些新建起来的交易所对钱包开发以及钱包对接的需求进一步扩大。 今天就USDT钱包开发之如何使用钱包节点进行转账开发的程序进行拆解分析。
如果你的地址不是在节点上创建的,那么你需要导入地址,才能查找UTXO。如果是在节点上创建的地址,转账发生在节点上的,直接获取UTXO就行。
如果你的地址不是在节点上创建的,那么你需要导入地址,才能查找UTXO。如果是在节点上创建的地址,转账发生在节点上的,直接获取UTXO就行。
导入地址
./omnicore-cli importaddress 1C6UYrmbtvdi8dHZNnZD3YoVwit2mccSgw
列出UTXO
需要导入地址才能获取UTXO的前提条件是,上面的地址已经扫描完所有的块并导入。
./omnicore-cli “listunspent” 0 999999 ‘[“1C6UYrmbtvdi8dHZNnZD3YoVwit2mccSgw”]’
下面是查询的结果
[
{
“txid”: “4f5b2b5ac6f7402f2edd8d4dafbdcca71758076d13f9b58dccd02ad76ac0f2ce”,
“vout”: 0,
“address”: “1C6UYrmbtvdi8dHZNnZD3YoVwit2mccSgw”,
“account”: “”,
“scriptPubKey”: “76a91479b275dd5f136c241f3c28549b4c338177d5cb2188ac”,
“amount”: 0.01411554,
“confirmations”: 105,
“spendable”: false,
“solvable”: false
}
]
确定要转出的USDT的数量
./omnicore-cli omni_createpayload_simplesend 31 5.0
上面代码中31表示USDT在Omni上的代币ID为31,和以太坊的ERC20代币Token类似,2.0代表的是要转出2个USDT。
执行结果如下:
000000000000001f000000001dcd6500
创建交易
这个和比特币是一样的,代码如下:
./omnicore-cli “createrawtransaction” ‘[{“txid”:”4f5b2b5ac6f7402f2edd8d4dafbdcca71758076d13f9b58dccd02ad76ac0f2ce”,”vout”:0}]’ ‘{}’
执行结果如下:
0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff0000000000
在交易上绑定代币数据
./omnicore-cli omni_createrawtx_opreturn 0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff0000000000 000000000000001f000000001dcd6500
执行结果如下:
0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff010000000000000000166a146f6d6e69000000000000001f000000001dcd650000000000
添加接收币的地址
./omnicore-cli omni_createrawtx_reference 0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff010000000000000000166a146f6d6e69000000000000001f000000001dcd650000000000 1DefiYRCAD4wVS7rXwFkqhEn6R88EkSUnh
执行结果
0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff020000000000000000166a146f6d6e69000000000000001f000000001dcd650022020000000000001976a9148ac137fb413490ec6f69792552c5f5ddf2ecd4cf88ac00000000
设置找零和矿工费
指令:(事务HASH,交易信息,找零地址,手续费)
./omnicore-cli omni_createrawtx_change 0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff020000000000000000166a146f6d6e69000000000000001f000000001dcd650022020000000000001976a9148ac137fb413490ec6f69792552c5f5ddf2ecd4cf88ac00000000 ‘[{“txid”:”4f5b2b5ac6f7402f2edd8d4dafbdcca71758076d13f9b58dccd02ad76ac0f2ce”,”vout”:0,”scriptPubKey”:”76a91479b275dd5f136c241f3c28549b4c338177d5cb2188ac”,”value”:0.01411554}]’ “1C6UYrmbtvdi8dHZNnZD3YoVwit2mccSgw” 0.0002
执行结果:
0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff03a0391500000000001976a91479b275dd5f136c241f3c28549b4c338177d5cb2188ac0000000000000000166a146f6d6e69000000000000001f000000001dcd650022020000000000001976a9148ac137fb413490ec6f69792552c5f5ddf2ecd4cf88ac00000000
对交易进行签名
签名指令:
./omnicore-cli signrawtransaction 0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff03a0391500000000001976a91479b275dd5f136c241f3c28549b4c338177d5cb2188ac0000000000000000166a146f6d6e69000000000000001f000000001dcd650022020000000000001976a9148ac137fb413490ec6f69792552c5f5ddf2ecd4cf88ac00000000
执行结果:
{
“hex”: “0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff03a0391500000000001976a91479b275dd5f136c241f3c28549b4c338177d5cb2188ac0000000000000000166a146f6d6e69000000000000001f000000001dcd650022020000000000001976a9148ac137fb413490ec6f69792552c5f5ddf2ecd4cf88ac00000000”,
“complete”: false,
“errors”: [
{
“txid”: “4f5b2b5ac6f7402f2edd8d4dafbdcca71758076d13f9b58dccd02ad76ac0f2ce”,
“vout”: 0,
“scriptSig”: “”,
“sequence”: 4294967295,
“error”: “Operation not valid with the current stack size”
}
]
}
出现上面这种错误的原因,是因为你的地址不是在节点上生成的,而是通过导入地址的方式导入的,这种情况下,你需要在签名的时候加上私钥。
如下:
./omnicore-cli signrawtransaction 0100000001cef2c06ad72ad0cc8db5f9136d075817a7ccbdaf4d8ddd2e2f40f7c65a2b5b4f0000000000ffffffff03a0391500000000001976a91479b275dd5f136c241f3c28549b4c338177d5cb2188ac0000000000000000166a146f6d6e69000000000000001f000000001dcd650022020000000000001976a9148ac137fb413490ec6f69792552c5f5ddf2ecd4cf88ac00000000 ‘[]’ ‘[“私钥”]’
执行结果如下:
{
“hex”: “签名串”,
“complete”: true
}
发送交易到区块链网络
指令如下:
./omnicore-cli sendrawtransaction 签名串
返回结果:
2ae377b5d928132910ffa4419d52913c34d90baec3ed53fc621a07a9bcfb2bcf
综上所述,本文对USDT钱包开发之如何使用钱包节点进行转账开发的程序了一步步拆解,分别从导入地址、列出UTXO、确定要转出的USDT的数量、创建交易、在交易上绑定代币数据、添加接收币的地址、设置找零和矿工费、对交易进行签名、发送交易到区块链网络等九个方面进行了技术代码分享。
由于当前数字货币交易场景中支持交易的数字币种成千上万,仅仅支持usdt数字资产存储和管理的钱包无法支撑交易所平台的进一步发展,支持全token的企业级区块链数字钱包管理系统像优盾钱包被市场广泛接受。