我们昨天讲到的那笔交易中,收币地址虽然看似没什么不同,但仔细观察,会发现一个问题:
上面的地址是1开头,下面的地址是3开头。
而且观察历史上绝大多数的地址,都是以1开头的。那这个3开头的到底是什么地址?
今天主要讲一下以3开头的地址的由来。
我们首先回顾一下之前讲过的交易类型(参考比特币交易上锁的几大锁定规则),其中包括了P2SH交易类型(参考比特币交易上锁的几大锁定规则(补充))。
这种P2SH类型是基于多重签名类型而来,多重签名是指一个收币地址是由n方掌管,如果m方同意交易,那么就允许交易。P2SH基于多重签名,将收币地址的锁的长度降低到只有20个字节长度。下面再回顾一下P2SH的解锁工具和锁。
P2SH的解锁工具如下:
...
10 OP_CHECKMULTISIG>
(蓝色部分是原先多重签名的锁,现在与绿色部分的签名合并为P2SH的解锁工具,要解下面的锁。)
P2SH的解锁工具也称为赎回脚本(redeemScript),存于下一笔交易的签名(script)中。矿工需要用这个解锁工具,来解P2SH地址所对应的上笔交易中的锁:
OP_HASH160 2345nsd6s9r0f0vb9b0ds9fsfgs90f0sdfg9b OP_EQUAL
P2SH的赎回脚本类似于P2PKH中的公钥,唯一不同的是,需要将大锁解开之后,需要用这个大的解锁工具中的小解锁工具:
再解一次自己内部的那个小锁:
3
...
10 OP_CHECKMULTISIG
言归正传。
地址的生成,是需要根据不同的交易类型来生成的。地址的生成规则可以用简单的公式写明:
地址 = base58(版本号+A+校验码)
其中,A代表P2PKH的公钥或者P2SH的赎回脚本。校验码取SHA256(SHA256(A))前4字节。
P2PKH的版本号是0x00,那么在用base58编码对(0x00+公钥+验证码)加密,生成地址时,地址的首位即为1。这也是大多数的地址的生成规则。
同理,如果某笔交易的收币方定义为P2SH交易类型,那么在生成对应的地址时,需要将P2SH所对应的版本号填写进去,P2SH版本号是0x05,于是在用base58编码对(0x05+赎回脚本+验证码)加密,生成地址时,地址的首位即为3。
这就是为什么有的地址的开头是1,有的地址的开头是3的缘故。
关注【通俗易懂区块链】,学懂区块链
领取专属 10元无门槛券
私享最新 技术干货