Bech32编码 隔离见证地址

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bech32编码 隔离见证地址相关的知识,希望对你有一定的参考价值。

1. Bech32 编码

  • 人类可读的部分“bc” [ 7 ]用于主网,“tb” [ 8 ]用于测试网。
  • 数据部分值:
    . 1 个字符(代表 5 位数据):见证版本
    . 2 到 40 字节的见证程序(由BIP141定义)到 base32 的转换:
    ■ 从见证程序的位开始,首先是每个字节的最高有效位。
    ■ 将这些位重新排列为 5 组,并在需要时在末尾填充零。
    ■ 使用上表将这些位转换为字符。

2. 解码

解释隔离见证地址的软件:

  • 必须验证人类可读的部分对于主网是“bc”,对于测试网是“tb”。
  • 必须验证第一个解码数据值(见证版本)在 0 和 16 之间,包括 0 和 16。
  • 将其余数据转换为字节:
    . 将值转换为 5 位,最重要的位在前。
    . 将这些位重新排列为 8 位一组。最后的任何不完整组必须是 4 位或更少,必须全为零,并被丢弃。
    . 必须有 2 到 40 个组,它们被解释为见证程序的字节。

解码器应该对见证程序执行已知长度限制。
eg. BIP141 指定如果版本字节为 0,但见证 程序既不是 20 字节也不是 32 字节,则脚本必须失败。

由于之前的规则,地址的长度总是在 14 到 74 个字符之间,并且它们的长度模 8 不能是 0、3 或 5。版本 0 见证地址总是 42 或 62 个字符,但实现必须允许使用任何版本。

在将地址转换为 scriptPubkey 时,实现应特别小心,其中见证版本n存储为OP_n。OP_0 编码为 0x00,但 OP_1 到 OP_16 编码为 0x51 到 0x60(十进制为 81 到 96)。如果 bech32 地址被转换为不正确的 scriptPubKey,结果可能是无法使用或不安全。

3. 以P2WPKH地址为例

公钥为0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798

step1. 计算HASH160(sha256+ripemd160)值

751e76e8199196d454941c45d1b3a323f1433bd6

step2. bech32编码

易读前缀“bc” + 版本 0 + HASH160值 bech32格式编码结果为

因此主网 P2WPKH为:bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4

其他格式(使用密钥 OP_CHECKSIG作为脚本)

  • 测试网 P2WPKH:tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx
  • 主网 P2WSH:bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3
  • 测试网 P2WSH:tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7

以上是关于Bech32编码 隔离见证地址的主要内容,如果未能解决你的问题,请参考以下文章

Bech32编码 地址验证示例

最新报告:莱特币网络隔离见证使用率达75%

超级详解隔离见证(segregation witness)

超级详解隔离见证(segregation witness)

(SegWit)隔离见证人在24小时内激活:比特币会如何变化?

▶区块链:什么是隔离见证?股份授权证明机制(DPoS)是什么?