编写第一笔比特币交易 #2

如何编程构建 bitcoin 交易

第一部分介绍了交易构建的基础知识,如从目标地址创建输出和收集所需的输入价值。最复杂的部分是构建输入签名的消息。现在我们已经有了一个,我们将生成一个签名,最终生成交易输入的脚本。最后一步是将所有内容打包在一起。

输入脚本

作为 ex-tx-build.c 的结果,为我们的输入构建了可签名的消息。在 ex-tx-sign.c 中,我们将重复使用该消息作为起点。

生成签名

与其签署消息本身,我们将签署其 hash256 摘要:

62 44 98 0f a0 75 2e 5b
46 43 ed b3 53 fd a5 23
8a 9a 3d 44 49 16 76 78
8e fd d2 5d d6 48 55 ba

使用我们的 ECDSA 私钥

16 26 07 83 e4 0b 16 73
16 73 62 2a c8 a5 b0 45
fc 3e a4 af 70 f7 27 f3
f9 e9 2b dd 3a 1d dc 42

这是我得到的一个 DER 签名(你的将会有所不同):

30 44 02 20 11 1a 48 2a
ba 6a fb a1 2a 6f 27 de
76 7d d4 d0 64 17 de f6
65 bd 10 0b c6 8c 42 84
5c 75 2a 8f 02 20 5e 86
f5 e0 54 b2 c6 ca c5 d6
63 66 4e 35 77 9f b0 34
38 7c 07 84 8b c7 72 44
42 ca cf 65 93 24 

标志和汇编

SIGHASH标志(现在是 8 位)再次附加到签名上,与压缩的 ECDSA 公钥一起:

02
82 00 6e 93 98 a6 98 6e
da 61 fe 91 67 4c 3a 10
8c 39 94 75 bf 1e 73 8f
19 df c2 db 11 db 1d 28

最终,我们能够构建我们的 P2PKH 输入脚本:

47 30 44 02 20 11 1a 48
2a ba 6a fb a1 2a 6f 27
de 76 7d d4 d0 64 17 de
f6 65 bd 10 0b c6 8c 42
84 5c 75 2a 8f 02 20 5e
86 f5 e0 54 b2 c6 ca c5
d6 63 66 4e 35 77 9f b0
34 38 7c 07 84 8b c7 72
44 42 ca cf 65 93 24 01

21 02 82 00 6e 93 98 a6
98 6e da 61 fe 91 67 4c
3a 10 8c 39 94 75 bf 1e
73 8f 19 df c2 db 11 db
1d 28

是的,签名过程可能是我们工作中最令人讨厌和容易出错的部分。

打包交易

我们已经准备好从我们的输入和输出中打包交易。让我们看看 ex-tx-pack.c

输入和输出

就像我为输出所做的那样,我还在 tx.h 中编写了一个用于创建 P2PKH 输入的 C 宏。该宏接受 UTXO 输出点、签名、公钥和SIGHASH标志:


void bbp_txin_create_p2pkh(bbp_txin_t *txin, const bbp_outpoint_t *outpoint,
        const char *sig, const char *pub, b...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
Davide De Rosa
Davide De Rosa
江湖只有他的大名,没有他的介绍。