bitcoin cash的地址格式 cash addr 简介

摘要

这篇文章主要阐述用于bitcoin cash的地址格式。它是一种base32编码格式,使用BCH 代码作为校验和,可以直接用于链接或QR码。

这种格式重用了Bech32的工作,在某些方面类似,但在其他方面有所改进。

规范

新的bitcoin cash地址是由:

  1. 能够表示该地址有效的网络的前缀,一般为主网、测试网、回归测试网三种。
  2. 一个分隔符::
  3. 一个base32编码的payload,表示这个地址的目的地和包含的checksum(校验和)。

prefix

这个前缀标明了该address所属于的有效网络是哪一个,前缀的命名主要如下:

  • 主网:bitcoincash
  • 测试网:bchtest
  • 回归测试:bchreg

紧接着在前缀后面跟一个分隔符::

当用户在使用时,可以省略前缀,但这是校验和计算的一部分。校验和可确保不同网络上的地址相互之间不兼容,即使没有标明前缀也是如此。

payload

payload是base32编码的数据流:

 01234567
+0qpzry9x8
+8gf2tvdw0
+16s3jn54kh
+24ce6mua7l

payload由三个元素组成:

  1. 指示地址字节的版本类型。
  2. 一个hash值。
  3. 一个40字节的校验和。

Version byte

版本字节的 most signficant bit是保留的,必须为0。接下来的4位表示地址类型,3个最低有效位表示hash的大小。

Size bitsHash size in bits
0160
1192
2224
3256
4320
5384
6448
7512

在版本字段中,编码hash的大小可确保地址的长度是否正确。

Type bitsMeaningVersion byte value
0P2KH0
1P2SH8

随着新功能的添加,将添加更多类型。

Hash

hash含义取决于版本字段。它是表示数据的hash,即P2KH的pubkey hash和P2SH的reedemScript哈希。

Checksum

校验和是在GF(2 ^ 5)上定义的40比特BCH码。它可确保检测到地址中最多6到8个错误。结合长度检查,这可以非常有效地防止错误。

校验和根据以下代码计算:

 

uint64_t PolyMod(const data &v) {
    uint64_t c = 1;
    for (uint8_t d : v) {
        uint8_t c0 = c >> 35;
        c = ((c & 0x07ffffffff) << 5) ^ d;
        
        if (c0 & 0x01) c ^= 0x98f2bc8e61;
        if (c0 & 0x02) c ^= 0x79b76d99e2;
        if (c0 & 0x04) c ^= 0xf33e5fb3c4;
        if (c0 & 0x08) c ^= 0xae2eabe2a8;
        if (c0 & 0x10) c ^= 0x1e4f43e470;
    }
    
    return c ^ 1;
}

校验和是根据以下数据计算的(0-31范围内的整数列表):

  1. 前缀的每个字符的低5位。 - 例如“位...”变成2,9,20,......
  2. 分隔符为零(5个零位)
  3. payload由5位的块组成。如有必要,payload将以零位填充到右侧,以完成那些unfinished的块。
  4. 八个零作为校验和的“模板”。

PolyMod返回的40位数字被分成8个5位数字(msb优先)。然后根据base32字符表对payload和checksum进行编码。

要验证base32格式的地址,它将在冒号“:”中拆分为prefix和payload。 PolyMod功能的输入数据(整数列表)由以下部分组装而成:

  1. 前缀的每个字符的低5位。
  2. 分隔符为零(5个零位)。
  3. payload的每个base32字符映射到它的相应数字。如果PolyMod返回非零值,则地址被破坏。

以下地址可用作校验和计算的测试向量:

  • prefix:x64nx6hz
  • p:gpf8m4h7
  • bitcoincash:qpzry9x8gf2tvdw0s3jn54khce6mua7lcw20ayyn
  • bchtest:testnetaddress4d6njnut
  • bchreg:555555555555555555555555555555555555555555555udxmlmrz

注意:这些地址故意没有有效的payload。

Error correction

BCH码允许纠错。但是,强烈建议不要以自动方式进行纠错,因为如果做错了可能会导致资金无法恢复。然而,它可以用于暗示用户可能的错误。

Double prefix

在某些情况下,例如付款URL或QR码,地址目前以bitcoincash为前缀:在这些上下文中,地址不得重复添加前缀。

Examples of address translation

以下地址以旧格式和新格式给出。

LegacyCashAddr
1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggubitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a
1KXrWXciRDZUpQwQmuM1DbwsKDLYAYsVLRbitcoincash:qr95sy3j9xwd2ap32xkykttr4cvcu7as4y0qverfuy
16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXbbitcoincash:qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r
3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzCbitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq
3LDsS579y7sruadqu11beEJoTjdFiFCdX4bitcoincash:pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e
31nwvkZwyPdgzjBJZXfDmSWsC4ZLKpYyUwbitcoincash:pqq3728yw0y47sqn6l2na30mcw6zm78dzq5ucqzc37

Larger Test Vectors

该表定义了具有各种前缀的各种大小为160-512位的有效载荷的测试向量。这些测试向量不以传统地址格式给出,因为传统格式限于160比特的有效载荷。

Payload Size (bytes)TypeCashAddrPayload (hex)
200bitcoincash:qr6m7j9njldwwzlg9v7v53unlr4jkmx6eylep8ekg2F5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9
201bchtest:pr6m7j9njldwwzlg9v7v53unlr4jkmx6eyvwc0uz5tF5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9
200pref:pr6m7j9njldwwzlg9v7v53unlr4jkmx6ey65nvtks5F5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9
2015prefix:0r6m7j9njldwwzlg9v7v53unlr4jkmx6ey3qnjwsrfF5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9
240bitcoincash:q9adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2ws4mr9g07ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA
241bchtest:p9adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2u94tsynr7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA
240pref:p9adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2khlwwk5v7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA
2415prefix:09adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2p29kc2lp7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA
280bitcoincash:qgagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkcw59jxxuz3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B
281bchtest:pgagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkcvs7md7wt3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B
280pref:pgagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkcrsr6gzkn3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B
2815prefix:0gagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkc5djw8s9g3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B
320bitcoincash:qvch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxq5nlegake3173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060
321bchtest:pvch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxq7fqng6m63173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060
320pref:pvch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxq4k9m7qf93173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060
3215prefix:0vch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxqsh6jgp6w3173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060
400bitcoincash:qnq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklv39gr3uvzC07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB
401bchtest:pnq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklvmgm6ynejC07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB
400pref:pnq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklv0vx5z0w3C07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB
4015prefix:0nq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklvwsvctzqyC07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB
480bitcoincash:qh3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqex2w82slE361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C
481bchtest:ph3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqnzf7mt6xE361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C
480pref:ph3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqjntdfcwgE361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C
4815prefix:0h3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqakcssnmnE361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C
560bitcoincash:qmvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqscw8jd03fD9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041
561bchtest:pmvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqs6kgdsg2gD9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041
560pref:pmvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqsammyqfflD9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041
5615prefix:0mvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqsgjrqpnw8D9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041
640bitcoincash:qlg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96mtky5sv5wD0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B
641bchtest:plg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96mc773cwezD0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B
640pref:plg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96mg7pj3lh8D0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B
6415prefix:0lg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96ms92w6845D0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值