如果用代码构建一个比特币交易
比特币区块链技术的核心业务无疑是构建 交易。我将向你展示编写你自己的 P2PKH 交易所需的步骤,这是一种你在区块链中最常见的标准交易。
为了构建交易,仅有一个 ECDSA 密钥对是不够的。我们需要密钥对的区块链历史,或者更确切地说,发送价值到与我们的密钥对关联的地址的交易。然后,我们将使用 ECDSA 私钥为这些交易输出生成签名,使它们成为我们交易的输入。
给定:
我们希望通过我们的密钥对 K 将 S 聪发送到地址 A 。以下是总体步骤:
让我们从 ex-tx-build.c 开始。
在 ECDSA 密钥对历史的最开始,派生的 P2PKH 地址没有与之关联的交易输出,因此在区块链上没有比特币价值。当有人后来发布一笔交易将比特币发送到我们的地址时,该密钥对突然变得有价值。考虑我们现在著名的测试网地址:
mqMi3XYqsPvBWtrJTk8euPWDVmFTZ5jHuK
及其区块链历史 。在所有交易中, 三个输出在撰写本文时仍未花费:
总计 0.951 BTC 输出值(= 95100000 聪)。具体来说,这些是发送资金到我们地址的输出:
如果你现在将这些词语转换为数据结构:
<f34e1c37e736...a2f3, 0><65216856608d...20c6, 0><6b580bada66e...3934, 1>你就拥有了我们的密钥对/钱包的 UTXO outpoints (输出点) 。除了构成钱包的余额外,UTXO 集合的重要性在于它包含了我们可以重用来构建我们自己交易的输出点。在交易输入中花费一个 UTXO 后,它将从集合中移除,因为 UTXO 总是被完全花费。
值得一提的是,扫描 UTXO 需要大量的网络代码,因此从网络浏览器构建钱包历史是一个快速的替代方案。不过,这会让你付出一些隐私代价,因为你通常不希望与不受信任的服务共享你的地址。
你现在应该知道如何构建一个 P2PKH 交易输出。假设我们想发送 0.251 BTC(25100000 聪,小端序):
e0 fe 7e 01 00 00 00 00
到这个地址:
mhmhRnN58ki9zbRJ63mpNGQXoYvdMXZsXt
它解码为以下 hash160 摘要:
18 ba 14 b3 68 22 95 cb
05 23 0e 31 fe cb 00 08
92 40 66 08
这是我们交易的第一个输出:
/* value (0.251 BTC) */
e0 fe 7e 01 00 00 00 00
/* script length */
19
/* P2PKH scri... 如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!