34

设想:

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

欲了解更多信息,请参阅此网站掌握比特币

4

3 回答 3

4

另一种更简单的方法,带有一些额外的fundrawtransaction. 文档告诉我们输入和输出所有必填字段。但不要忘记空列表也是对象:

步骤1)

$ bitcoin-cli createrawtransaction '[]' \
    '{"mxh3H416KCRoBDiweSESew5YJyAk1nxLrN": 0.025}'

第2步)

$ bitcoin-cli fundrawtransaction <hex_createrawtransaction> \
    '{"changeAddress": "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe"}'

第二步后,您可以查看您的钱包产生的费用。feeRate并使用命令选项更改它fundrawtransaction。这一切都可以在签署并将您的交易发送到网络之前完成。

于 2017-10-08T23:24:18.413 回答
4

regtest环境下发送rawtransaction的Multisig实现)

1)创建原始交易

句法:

bitcoin-cli -regtest createrawtransaction '[{"txid":"","vout":}]' '{"receive_address":amount}'

例子:

 > bitcoin-cli -regtest createrawtransaction
    > '[{"txid":"eee0de90e9878c039f87c9eedbdf5b9a5da157b19e5354a51ff3b2f84c8a901b","vout":0},]'
    > '{"2MxieCJNTKiiBj6U3SjghQaatZYbM7Qn6GW":30}'

2)签署原始交易

句法

<hexstring> [{"txid":txid,"vout":n,"scriptPubKey":hex},...] [<privatekey1>,...]
bitcoin-cli -regtest signrawtransaction "0200000001a1c33ebb12d94f96effc70c9dd4488faf32dc15269d6a41d115ac956033cadbb0100000000ffffffff0100e1f505000000001976a9145768a869521bb01af8bdd787e6e1e65ec3d9870e88ac00000000" '''
        [
          {
            "txid":"bbad3c0356c95a111da4d66952c12df3fa8844ddc970fcef964fd912bb3ec3a1",
            "vout":1,
            "scriptPubKey":"a91401a8f0509da2396f58d3f9948a76331964524c9687",
            "redeemScript": "5221022d6f957dd76773432d2493edb5601b2d0791286e31c83483ab299672c3d44fc921022dd9c36eece99cc308986a8334c3a0bf24d7ef8b842dacebf56f2477b0f6daab21030544c9613bf27c9773e6fcd79c7786a297188a2647d346da0c3305e22d3e28da53ae"
          }
        ] 
    ''' '''
    [
    "cUdhE3NvePyjqksgJTc5BQfXGDJckPgEKfoRT72x2BRoG2uMS81H"
    ]
    '''

o/p 将是一个十六进制,我存储为

有符号的_raw_txn=

3)发送原始交易

bitcoin-cli -regtest sendrawtransaction $signed_raw_txn
于 2018-01-19T09:26:54.090 回答
1

我没有 50 个代表点可以对 user3931836 发表评论,但是关于“它是如何产生费用的?它的优先级是什么?网络拥塞会影响费用吗?”

  1. 费用是从总 UTXO 输入量中减去总输出量后剩下的任何金额:

费用 = (UTXO 的总和) - (发送的总和)

即没有明确指定费用金额;矿工只是保留输出中未指定的任何内容,即剩余数量。所以你应该减少你的“零钱”输出,以确保有足够的钱来支付费用。

  1. 费用既不是高优先级也不是低优先级。通过您选择将更高的费用金额留给矿工(矿工贪婪并选择支付更多的交易 - 付款人自己选择),交易本身成为高优先级(对矿工)。
  2. 费用取决于您在交易中发送的数据量。矿工查看您的交易中的字节数,然后是您为交易支付的费用,然后计算费用/字节来确定交易的优先级。

请记住,如果您的交易使用 50 个 UTXO,那么它有很多字节,所以他们会期望大笔付款。但是,如果您的交易仅使用 1 个 UTXO,那么它使用的字节数会少很多,因此您可以支付更少的费用。确保优化您的 UTXO 选择以减少交易中的字节数 - 然后您可以提供较少的费用而不会影响其队列“优先级”。目前矿工预计每字节大约 40 satoshis,但请查看在线工具以查看不同数量的估计处理时间。如果您少付钱(每字节),那么他们会将您留在内存池中的时间更长(在他们的上下文中作为较低的“优先级”)。

于 2021-04-13T04:49:29.157 回答