8BTCCI: 11116.45 -1.37% 8BTCVI: 5252.86 -1.75% 24H成交额: ¥3984.06亿 +7.72% 总市值: ¥15723.29亿 -1.52%
小课堂 | 聊一聊比特币的地址

小课堂 | 聊一聊比特币的地址

币信钱包 发布在 比特币 海盗号 58134

概要:本文按照从比特币地址由来到隔离见证地址演变的逻辑展开分析,最后讲解了隔离见证地址可能带来的一些改变。全文约1500字,大概需阅读4分钟。

 

01 比特币地址的由来

我们知道比特币地址是一个由数字和字母组成的字符串,例如由公钥(一个同样由数字和字母组成的字符串)生成的比特币地址以数字“1”开头,例1:

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy。

如果要生成一个新的密钥,需使用getnewaddress命令。但出于安全考虑,命令运行后只显示生成的公钥,不显示私钥。例2:

$ bitcoin-cli getnewaddress 1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy $ bitcoin-cli

这种由公钥生成比特币地址时使用的算法是Secure Hash Algorithm (SHA)和the RACE Integ rity Primitives Evaluation Message Digest (RIPEMD),具体地说是SHA256和RIPEMD160。

以公钥 K 为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160 哈希值,得到一个长度为160位(20字节)的数字,其中K是公钥,A即为生成的比特币地址:

A = RIPEMD160(SHA256(K))

公钥生成比特币地址过程
我们通常所见到的比特币地址是经过“Base58Check”编码的,这种编码使用了58个字符(一种Base58数字系统)和校验码,提高了可读性、避免了歧义,并有效地防止了在地址转录和输入中产生错误。
Base58Check编码过程
冷知识:为了避免混淆,Base58编码中不包括0(数字零)、O(大写字母欧)、I(大写字母i)和l(小写字母L)。
总结比特币地址产生的完整过程:从私钥、到公钥(椭圆曲线上某个点)、再到两次哈希的地址,到最终的 Base58Check编码,编译并运行address代码,即可得到比特币地址。

 

02 隔离见证的出现

比特币的地址不只有“1”开头,事实上比特币最常见的地址类型有三种:普通公钥地址(1-地址),脚本哈希地址(3-地址)和隔离见证地址(bc1-地址),地址类型通过地址的前缀来区分。

•1-地址:这是最常见的比特币地址,通常用于普通转账收款。1-地址实际上为公钥Hash的编码,验证1-地址的签名后便可解锁收款。

•3-地址:这个地址为脚本(Script)哈希地址,这类地址实际对应为一段比特币脚本Hash的编码。

•bc1-地址:bech32编码地址,用于隔离见证交易。

隔离见证改变了地址的格式。作为目前为止规模最大的一次比特币协议更新,隔离见证引进了一整套全新的数据结构,将比特币区块外貌更改为升级后的节点——虽然未更新的节点应该继续像往常一样运作。

 

Bech32编码

首先,我们简单了解一下什么是Bech32编码,与Base58有什么不同。Bech32字符串最长90个字符,由两部分组成:

可读部分,用于传递数据类型或与读卡器相关的任何其他内容,用于主网mainnet。此部分必须包含1到83个US-ASCII字符,每个字符的值都在[33-126]范围内。

数据部分,至少有6个字符长,仅由字母数字字符组成,不包括“1”、“b”、“i”和“o”,用于测试网testnet。关于数据部分值:1字节为见证版本;2到40字节见证程序(由BIP141定义)到BASE32的转换。Bech32编码过程:

03 隔离见证带来的改变

 

我们通过隔离见证程序改变“支付给公钥哈希”(Pay-to-Public-Key-Hash ,P2PKH)地址的例子来看看隔离见证带来的改变。假设某笔交易构建了一个价值2BTC的 P2PKH 输出,例3:

DUP HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 EQUALVERIFY CHECKSIG

如果通过隔离见证,将会创建一个“支付给见证公钥哈希”(P2WPKH)脚本,(需要注意的是,P2WPKH 应该由收款人即接收者,通过将被压缩的公钥转换成P2WPKH哈希值进行创建),例4:

0 ab68025513c3dbd2f7b92a94e0581f5d50f654e7

一个隔离见证输出的锁定脚本相对一个传统输出明显大为简化,“DUP HASH160”, “EQUALVERIFY CHECKSIG”都不再需要。此外,开发者还可使用P2SH-P2WPKH技术,即通过P2SH来包裹P2WPKH交易,让P2WPKH交易“骗过”不支持隔D离见证SegWit的旧节点。

在引入隔离见证之前,每一个交易输入后面都跟着用来对其解锁的见证数据,见证数据作为输入的一部分被内嵌其中。而隔离见证将某个特定输出的签名分离开,或将某个特定输入的脚本进行解锁。隔离见证实现了对比特币的一种结构性调整,将见证数据部分从一笔交易的scriptSig(解锁脚本)和签名数据字段移出至一个伴随交易的单独的见证数据结构,客户端请求交易数据时可以选择要或不要该部分伴随的见证数据。

将见证移出交易后,用作标识符的交易哈希不再含见证数据。因为见证数据是交易中唯一可被修改的部分,移除它的同时也移除了交易延展性攻击的机会。通过隔离见证,交易变得对除创建者本人外任何人都不可变,这极大地提高了许多其它依赖于高级比特币交易架构的协议的可执行性,比如支付通道、跨连交易和闪电网络。对于用户而言,隔离见证也会带来最直接的好处——减少交易费用。

隔离见证在多方面产生影响的结构性调整,一方面实现了扩容,更重要的是优化了延展性和比特币整体性能。在未来的区块链世界,保持比特币原链,加上隔离见证,再用闪电网络做小额支付,将是数字货币未来合情合理的发展路线,也是唯一可选的路线!

 

想了解更多关于隔离见证地址的朋友,下方是本文的参考资料:

https://en.bitcoin.it/wiki/Address

http://book.8btc.com/books/6/masterbitcoin2cn/_book/ch04.html

https://bitcoincore.org/en/segwit_wallet_dev/#why-and-how-to-use-native-bech32-p2wpkh-and-p2wsh

https://bitcoincore.org/en/2016/01/26/segwit-benefits/

https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki#Bech32

 

-END-

评论
登录 账号发表你的看法,还没有账号?立即免费 注册