首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BitCoin -如何构建原始事务?

BitCoin -如何构建原始事务?
EN

Stack Overflow用户
提问于 2016-07-01 19:22:31
回答 1查看 5.4K关注 0票数 5

根据其他问题中的列表,要构建一个原始事务,我需要:

  1. listunspent -您获得了所有未用事务的列表
  2. 你决定你想要花什么
  3. 使用createrawtransaction创建输入/输出,从正在播放的事务列表中获取txid和vout,以及构成“货币供应”的事务列表。
  4. 使用signrawtransaction对创建的事务进行签名
  5. 使用sendrawtransaction发送已签名的事务

但有一个大问题- listunspent显示未用的金额,实际上已经使用,因此,我将有足够的资金误差在未来或负余额.

例如:

创建地址15d8uY8uubNFnn3DXaoGN123ZCRkm3HJK9。

寄去0.01BTC。

稍后由此地址寄出0.00400000,费用为0.00010714:

代码语言:javascript
复制
    [
      {
        "account": "login_67",
        "address": "15d8uY8uubNFnn3DXaoGN123ZCRkm3HJK9",
------> "category": "receive",
        "amount": 0.01000000,
        "label": "login_67",
        "vout": 0,
        "confirmations": 628,
        "blockhash": "0000000000000000006bf20ac85a50d3e014a636b51231c78c6b27fe0a8e9223",
        "blockindex": 2,
        "blocktime": 1463753010,
        "txid": "f37679b68c8ee3cd362b5bb15b2d8007af4eab173eee2d6269a132b9491a55ad",
        "walletconflicts": [
        ],
        "time": 1463752690,
        "timereceived": 1463752690,
        "bip125-replaceable": "no"
      },
      {
        "account": "login_67",
        "address": "1BeqRNunznfwuFHnufXLFRhaCDm1mrvMS6",
------> "category": "send",
        "amount": -0.00400000,
        "vout": 1,
        "fee": -0.00010714,
        "confirmations": 609,
        "blockhash": "000000000000000000699cd44c4aed1eeb9c66181f6260bfe41473e66e1ece06",
        "blockindex": 1614,
        "blocktime": 1463767099,
        "txid": "9a39b070d8f21ddf9bd16e641c4b252c2da701336fd36b707ca072fd1ca11d58",
        "walletconflicts": [
        ],
        "time": 1463766747,
        "timereceived": 1463766747,
        "bip125-replaceable": "no",
        "abandoned": false
      }
    ]

Getbalance显示0.00589286的正确余额

清单未用显示了关于可用资金的错误信息:

代码语言:javascript
复制
[
  {
    "txid": "f37679b68c8ee3cd362b5bb15b2d8007af4eab173eee2d6269a132b9491a55ad",
    "vout": 0,
    "address": "15d8uY8uubNFnn3DXaoGN123ZCRkm3HJK9",
    "account": "login_67",
    "scriptPubKey": "76a91432b613c311d4c9c72f3ed1ba5e2c1d96645bd2da88ac",
    "amount": 0.01000000,
    "confirmations": 628,
    "spendable": true
  }
]

就像没有任何发送交易一样。

那么,我如何从TXs收集所有未用的资金呢?

谢谢你的回答。

EN

回答 1

Stack Overflow用户

发布于 2016-07-21 02:32:17

场景:

迈克尔从巴勃罗得到0.05000000英镑,从库拉当又获得0.01000000英镑。迈克尔还想把0.02500000 BTC送到贝尔滕格。迈克尔收到的每一笔钱都有相应的T和其他细节。让我们使用listunspent命令检查它,然后使用createrawtransaction创建一个原始事务,然后使用signrawtransaction签名,然后使用sendrawtransaction发送原始事务。

Given:

  • 迈克尔的比特币地址: mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe
  • Berteng的比特币地址: mxh3H416KCRoBDiweSESew5YJyAk1nxLrN
  • 发送至伯顿: 0.02500000 mBTC

步骤1)

listunspent

格式:

代码语言:javascript
复制
$ bitcoin-cli listunspent [misconf=1] [max_number_confirmation=99999999] '''["<wallet_address>"]'''

让我们检查一下Michael的未用清单,用他的地址。

执行:

代码语言:javascript
复制
$ bitcoin-cli listunspent 1 99999999 '''["mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe"]'''

结果:

代码语言:javascript
复制
[{
    "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
}]

我们在这里看到的是将50和10 mBTC分配给mkrz…的结果。。为了花费这个输出,我们将创建一个新的事务。

步骤2)

createrawtransaction

我们需要从listunspent的结果中选择一些数量足够的块。由于我们只需要发送0.02500000 mBTC,所以我认为第一个块的数量足以进行事务处理。

格式:

代码语言:javascript
复制
$ bitcoin-cli createrawtransaction
    '[{
        "txid" : "<txid_of_selected_block>",
        "vout" : <vout>
    }]'
    '{"<recipient_address>": <amount_to_send>, "<sender_address>": <amount_change>}'

为了支付费用,我们将减少0.5毫比特的变化输出,如下所示。

执行:

代码语言:javascript
复制
$ bitcoin-cli createrawtransaction
    '[{
        "txid" : "12b8e7ede4992f4d30f93idj3085746951d945e39f40becebd7c290af8c2e7ad",
        "vout" : 0
    }]'
    '{"mxh3H416KCRoBDiweSESew5YJyAk1nxLrN": 0.025, "mkrzDhhZtzQm8zgckSs4fMNrvtNJ66zaFe": 0.0245}'

结果

代码语言:javascript
复制
0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c0000000000ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000

createrawtransaction命令生成一个原始十六进制字符串,该字符串编码我们提供的事务详细信息。如果您想解码十六进制,只需使用decoderawtransaction命令即可。

步骤3)

signrawtransaction

使用存储在钱包中或在调用中提供的私钥以序列化事务格式对事务进行签名。

格式:

代码语言:javascript
复制
$ bitcoin-cli signrawtransaction <hex_createrawtransaction>

执行:

代码语言:javascript
复制
$ bitcoin-cli signrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c0000000000ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000

结果:

代码语言:javascript
复制
{
   "hex" : "0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c000000006a47304402203e8a16522da80cef66bacfbc0c800c6d52c4a26d1d86a54e0a1b76d661f020c9022010397f00149f2a8fb2bc5bca52f2d7a7f87e3897a273ef54b277e4af52051a06012103c9700559f690c4a9182faa8bed88ad8a0c563777ac1d3f00fd44ea6c71dc5127ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000",
   "complete" : true
}

现在,signrawtransaction命令返回另一个十六进制编码的原始事务。

步骤4)

sendrawtransaction

RPC验证事务并将其广播到对等网络。

格式:

代码语言:javascript
复制
$ bitcoin-cli sendrawtransaction <hex_signrawtransaction>

执行:

代码语言:javascript
复制
$ bitcoin-cli sendrawtransaction 0100000001e34ac1e2baac09c366fce1c2245536bda8f7db0f6685862aecf53ebd69f9a89c000000006a47304402203e8a16522da80cef66bacfbc0c800c6d52c4a26d1d86a54e0a1b76d661f020c9022010397f00149f2a8fb2bc5bca52f2d7a7f87e3897a273ef54b277e4af52051a06012103c9700559f690c4a9182faa8bed88ad8a0c563777ac1d3f00fd44ea6c71dc5127ffffffff02a0252600000000001976a914d90d36e98f62968d2bc9bbd68107564a156a9bcf88ac50622500000000001976a91407bdb518fa2e6089fd810235cf1100c9c13d1fd288ac00000000

结果:

代码语言:javascript
复制
ae74538baa914f3799081ba78429d5d84f36a0127438e9f721dff584ac17b346

命令sendrawtransaction在网络上提交事务时返回事务哈希(TXID)。要检查事务哈希,可以转到Testnet网络的blockchain.infotestnet.blockchain.info

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38152663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档