设想:
Michael 从 Pablo 收到 0.05000000 BTC,从 Kuradang 收到另外 0.01000000 BTC。Michael 还想向 Berteng 发送 0.02500000 BTC。Michael 收到的每一笔金额都有相应的 txid 和其他详细信息。让我们使用命令检查一下,
listunspent
然后使用创建原始交易,然后使用createrawtransaction
签名并使用signrawtransaction
发送原始交易sendrawtransaction
。
鉴于:
- 迈克尔的比特币地址:mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe
- Berteng 的比特币地址:mxh3H416KCRoBDiweSESew5YJyAk1nxLrN
- 发送给 Berteng:0.02500000 mBTC
步骤1)
listunspent
格式:
$ bitcoin-cli listunspent [misconf=1] [max_number_confirmation=99999999] '["<wallet_address>", ...]'
让我们用他的地址检查迈克尔的未使用清单。
执行:
$ bitcoin-cli listunspent 1 99999999 '["mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe"]'
结果:
[{
"txid": "12b8e7ede4992f4d30f93idj3085746951d945e39f40becebd7c290af8c2e7ad",
"vout": 1,
"address": "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe",
"account": "micz",
"scriptPubKey": "76a9143aa28e1740a6a5a2190975b6e7f1ad67aaec9a3988ac",
"amount": 0.05000000,
"confirmations": 94,
"spendable": true
}, {
"txid": "8443bc63b65d569ff9ekwm37sy3b67b9c7c6f8f386c3cdf372b260961b64ec9fc",
"vout": 1,
"address": "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe",
"account": "micz",
"scriptPubKey": "76a9143aa28e1740a6a5a2190975b6e7f1ad67aaec9a3988ac",
"amount": 0.01000000,
"confirmations": 93,
"spendable": true
}]
我们在这里看到的是为我们的地址 mkrz 分配了 50 和 10 mBTC 的结果……。为了花费这个输出,我们将创建一个新的交易。
第2步)
createrawtransaction
我们需要从 的结果中选择一些数量足够的块
listunspent
。由于我们只需要发送 0.02500000 mBTC,我认为第一个区块的数量足以进行交易。
格式:
$ bitcoin-cli createrawtransaction
'[{
"txid" : "<txid_of_selected_block>",
"vout" : <vout>
}]'
'{"<recipient_address>": <amount_to_send>, "<sender_address>": <amount_change>}'
为了支付费用,我们将减少 0.5 毫比特的找零输出,如下所示。
执行:
$ bitcoin-cli createrawtransaction
'[{
"txid" : "12b8e7ede4992f4d30f93idj3085746951d945e39f40becebd7c290af8c2e7ad",
"vout" : 0
}]'
'{"mxh3H416KCRoBDiweSESew5YJyAk1nxLrN": 0.025, "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe": 0.0245}'
结果
0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c0000000000ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000
createrawtransaction 命令生成一个原始的十六进制字符串,该字符串对我们提供的交易细节进行编码。如果要解码十六进制,只需使用 decoderawtransaction 命令。
步骤 3)
signrawtransaction
使用存储在钱包中或在调用中提供的私钥以序列化交易格式对交易进行签名。
格式:
$ bitcoin-cli signrawtransaction <hex_createrawtransaction>
执行:
$ bitcoin-cli signrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c0000000000ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000
结果:
{
"hex" : "0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c000000006a47304402203e8a16522da80cef66bacfbc0c800c6d52c4a26d1d86a54e0a1b76d661f020c9022010397f00149f2a8fb2bc5bca52f2d7a7f87e3897a273ef54b277e4af52051a06012103c9700559f690c4a9182faa8bed88ad8a0c563777ac1d3f00fd44ea6c71dc5127ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000",
"complete" : true
}
现在 signrawtransaction 命令返回另一个十六进制编码的原始交易。
第4步)
sendrawtransaction
RPC 验证交易并将其广播到对等网络。
格式:
$ bitcoin-cli sendrawtransaction <hex_signrawtransaction>
执行:
$ bitcoin-cli sendrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c000000006a47304402203e8a16522da80cef66bacfbc0c800c6d52c4a26d1d86a54e0a1b76d661f020c9022010397f00149f2a8fb2bc5bca52f2d7a7f87e3897a273ef54b277e4af52051a06012103c9700559f690c4a9182faa8bed88ad8a0c563777ac1d3f00fd44ea6c71dc5127ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000
结果:
ae74538baa914f3799081ba78429d5d84f36a0127438e9f721dff584ac17b346
命令 sendrawtransaction 在网络上提交交易时返回交易哈希 (txid)。要检查交易哈希,您可以访问tbtc.blockr.io
欲了解更多信息,请参阅此网站掌握比特币