比特币开发系列 - 比特币网络 #2

理解比特币的网络及地址生成

终于,我们准备好将 ECDSA 密钥带入真实的区块链世界。本文将描述我们用来发送和接收比特币的区块链对象,即密钥和地址。最终,你将能够生成最基本的比特币钱包。

私钥

到目前为止,你已经阅读了大量的加密代码来生成 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

我们的下一个目标是将此私钥转换为 WIF。

钱包导入格式(WIF)

Wallet Import Format(WIF)是 Base58Check 编码的第一个示例。给定以下表格:

    版本
主网 80
测试网3(Testnet3) ef

我们按照以下方式生成私钥的 WIF 表示:

  1. 为主网添加80或为 测试网3添加 ef
  2. 如果密钥将对应到压缩的公钥,则附加 01
  3. 编码为 Base58Check。

查看我们示例密钥编码为 WIF:

/* 1(测试网3版本) */

ef
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

/* 2(是,对于压缩的公钥) */

ef
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
01

/* 3.1(步骤 2 的 hash256) */

35 06 7f 25 1e 07 d0 2b
59 ca f4 cc 77 36 20 7d
73 0d 21 88 f9 62 8f 47
a9 2a 1a 92 7d 33 7b 2a 

/* 3.2(4 字节校验和) */

35 06 7f 25

/* 3.3(将校验和附加到步骤 2) */

ef
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
01
35 06 7f 25

/* 3.4(编码为 Base58) */

cNKkmrwHuShs2mvkVEKfXULxXhxRo3yy1cK6sq62uBp2Pc8Lsa76

查看 ex-wif.c 以查看代码中的转换。

最终输出是 测试网3网络的有效 WIF 密钥。相反,通过解码 Base58 并取版本字节之后的 32 字节,可以从 WIF 中解析出 ECDSA 密钥。请注意步骤 2,我们必须事先知道是否打算使用压缩的公钥,因为转换形式会影响我们将从私钥生成的地址(请阅读下一段)。

WIF 私钥包括:

  • 1 字节版本。
  • 32 字节 ECDSA 私钥。
  • 可选的01
  • 4 字节校验和。

因此,最多占用 38 字节。

地址

如果你曾经发送或接收比特币,你至少应该认识交易参数中...

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

点赞 0
收藏 0
分享

0 条评论

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