探索和解码交易
在“从在线商店购买”中,Alice从Bob的商店购买了商品。她的交易已记录在区块链上。让我们使用 API 通过传递交易ID(txid)作为参数来检索和检查该交易:
$ bitcoin-cli getrawtransaction 466200308696215bbc949d5141a49a41\ 38ecdfdfaa2a8029c1f9bcecd1f96177
01000000000101eb3ae38f27191aa5f3850dc9cad00492b88b72404f9da13569 8679268041c54a0100000000ffffffff02204e0000000000002251203b41daba 4c9ace578369740f15e5ec880c28279ee7f51b07dca69c7061e07068f8240100 000000001600147752c165ea7be772b2c0acb7f4d6047ae6f4768e0141cf5efe 2d8ef13ed0af21d4f4cb82422d6252d70324f6f4576b727b7d918e521c00b51b e739df2f899c49dc267c0ad280aca6dab0d2fa2b42a45182fc83e817130100000000
交易ID(txid)并不具有权威性。在区块链中找不到txid并不意味着该交易未被处理。这被称为“交易可塑性”,因为在交易确认之前,交易可以被修改,从而改变其txid。一旦交易被包含在一个区块中,其txid就不能更改,除非发生了区块链重组,其中该区块从最佳区块链中被移除。在交易获得几个确认之后,区块链重组变得十分罕见。
命令getrawtransaction以十六进制表示返回一个序列化的交易。为了解码它,我们使用decoderawtransaction命令,并将十六进制数据作为参数传递。您可以复制getrawtransaction返回的十六进制数据,并将其粘贴为decoderawtransaction的参数:
$ bitcoin-cli decoderawtransaction 01000000000101eb3ae38f27191aa5f3850dc9cad0 0492b88b72404f9da135698679268041c54a0100000000ffffffff02204e00000000000022512 03b41daba4c9ace578369740f15e5ec880c28279ee7f51b07dca69c7061e07068f82401000000 00001600147752c165ea7be772b2c0acb7f4d6047ae6f4768e0141cf5efe2d8ef13ed0af21d4f 4cb82422d6252d70324f6f4576b727b7d918e521c00b51be739df2f899c49dc267c0ad280aca6 dab0d2fa2b42a45182fc83e817130100000000
交易解码显示了此交易的所有组件,包括交易输入和输出。在这种情况下,我们看到该交易使用了一个输入,并生成了两个输出。这笔交易的输入是来自先前确认的交易的输出(显示为输入txid)。这两个输出对应于付款给Bob和找零返回给Alice。
我们可以通过使用相同的命令(例如getrawtransaction)检查在此交易中引用其txid的先前交易来进一步探索区块链。从一笔交易跳转到另一笔交易,我们可以跟踪一系列交易,从而了解硬币是如何从一个所有者传递到下一个所有者的。
Last updated