摘要
这篇文章主要阐述用于bitcoin cash的地址格式。它是一种base32编码格式,使用BCH 代码作为校验和,可以直接用于链接或QR码。
这种格式重用了Bech32的工作,在某些方面类似,但在其他方面有所改进。
规范
新的bitcoin cash地址是由:
- 能够表示该地址有效的网络的前缀,一般为主网、测试网、回归测试网三种。
- 一个分隔符:
:
- 一个base32编码的payload,表示这个地址的目的地和包含的checksum(校验和)。
prefix
这个前缀标明了该address所属于的有效网络是哪一个,前缀的命名主要如下:
- 主网:
bitcoincash
- 测试网:
bchtest
- 回归测试:
bchreg
紧接着在前缀后面跟一个分隔符::
当用户在使用时,可以省略前缀,但这是校验和计算的一部分。校验和可确保不同网络上的地址相互之间不兼容,即使没有标明前缀也是如此。
payload
payload是base32编码的数据流:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
+0 | q | p | z | r | y | 9 | x | 8 |
+8 | g | f | 2 | t | v | d | w | 0 |
+16 | s | 3 | j | n | 5 | 4 | k | h |
+24 | c | e | 6 | m | u | a | 7 | l |
payload由三个元素组成:
- 指示地址字节的版本类型。
- 一个hash值。
- 一个40字节的校验和。
Version byte
版本字节的 most signficant bit是保留的,必须为0。接下来的4位表示地址类型,3个最低有效位表示hash的大小。
Size bits | Hash size in bits |
---|---|
0 | 160 |
1 | 192 |
2 | 224 |
3 | 256 |
4 | 320 |
5 | 384 |
6 | 448 |
7 | 512 |
在版本字段中,编码hash的大小可确保地址的长度是否正确。
Type bits | Meaning | Version byte value |
---|---|---|
0 | P2KH | 0 |
1 | P2SH | 8 |
随着新功能的添加,将添加更多类型。
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范围内的整数列表):
- 前缀的每个字符的低5位。 - 例如“位...”变成2,9,20,......
- 分隔符为零(5个零位)
- payload由5位的块组成。如有必要,payload将以零位填充到右侧,以完成那些unfinished的块。
- 八个零作为校验和的“模板”。
PolyMod返回的40位数字被分成8个5位数字(msb优先)。然后根据base32字符表对payload和checksum进行编码。
要验证base32格式的地址,它将在冒号“:”中拆分为prefix和payload。 PolyMod功能的输入数据(整数列表)由以下部分组装而成:
- 前缀的每个字符的低5位。
- 分隔符为零(5个零位)。
- 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
以下地址以旧格式和新格式给出。
Legacy | CashAddr |
---|---|
1BpEi6DfDAUFd7GtittLSdBeYJvcoaVggu | bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a |
1KXrWXciRDZUpQwQmuM1DbwsKDLYAYsVLR | bitcoincash:qr95sy3j9xwd2ap32xkykttr4cvcu7as4y0qverfuy |
16w1D5WRVKJuZUsSRzdLp9w3YGcgoxDXb | bitcoincash:qqq3728yw0y47sqn6l2na30mcw6zm78dzqre909m2r |
3CWFddi6m4ndiGyKqzYvsFYagqDLPVMTzC | bitcoincash:ppm2qsznhks23z7629mms6s4cwef74vcwvn0h829pq |
3LDsS579y7sruadqu11beEJoTjdFiFCdX4 | bitcoincash:pr95sy3j9xwd2ap32xkykttr4cvcu7as4yc93ky28e |
31nwvkZwyPdgzjBJZXfDmSWsC4ZLKpYyUw | bitcoincash:pqq3728yw0y47sqn6l2na30mcw6zm78dzq5ucqzc37 |
Larger Test Vectors
该表定义了具有各种前缀的各种大小为160-512位的有效载荷的测试向量。这些测试向量不以传统地址格式给出,因为传统格式限于160比特的有效载荷。
Payload Size (bytes) | Type | CashAddr | Payload (hex) |
---|---|---|---|
20 | 0 | bitcoincash:qr6m7j9njldwwzlg9v7v53unlr4jkmx6eylep8ekg2 | F5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9 |
20 | 1 | bchtest:pr6m7j9njldwwzlg9v7v53unlr4jkmx6eyvwc0uz5t | F5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9 |
20 | 0 | pref:pr6m7j9njldwwzlg9v7v53unlr4jkmx6ey65nvtks5 | F5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9 |
20 | 15 | prefix:0r6m7j9njldwwzlg9v7v53unlr4jkmx6ey3qnjwsrf | F5BF48B397DAE70BE82B3CCA4793F8EB2B6CDAC9 |
24 | 0 | bitcoincash:q9adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2ws4mr9g0 | 7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA |
24 | 1 | bchtest:p9adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2u94tsynr | 7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA |
24 | 0 | pref:p9adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2khlwwk5v | 7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA |
24 | 15 | prefix:09adhakpwzztepkpwp5z0dq62m6u5v5xtyj7j3h2p29kc2lp | 7ADBF6C17084BC86C1706827B41A56F5CA32865925E946EA |
28 | 0 | bitcoincash:qgagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkcw59jxxuz | 3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B |
28 | 1 | bchtest:pgagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkcvs7md7wt | 3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B |
28 | 0 | pref:pgagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkcrsr6gzkn | 3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B |
28 | 15 | prefix:0gagf7w02x4wnz3mkwnchut2vxphjzccwxgjvvjmlsxqwkc5djw8s9g | 3A84F9CF51AAE98A3BB3A78BF16A6183790B18719126325BFC0C075B |
32 | 0 | bitcoincash:qvch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxq5nlegake | 3173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060 |
32 | 1 | bchtest:pvch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxq7fqng6m6 | 3173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060 |
32 | 0 | pref:pvch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxq4k9m7qf9 | 3173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060 |
32 | 15 | prefix:0vch8mmxy0rtfrlarg7ucrxxfzds5pamg73h7370aa87d80gyhqxqsh6jgp6w | 3173EF6623C6B48FFD1A3DCC0CC6489B0A07BB47A37F47CFEF4FE69DE825C060 |
40 | 0 | bitcoincash:qnq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklv39gr3uvz | C07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB |
40 | 1 | bchtest:pnq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklvmgm6ynej | C07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB |
40 | 0 | pref:pnq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklv0vx5z0w3 | C07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB |
40 | 15 | prefix:0nq8zwpj8cq05n7pytfmskuk9r4gzzel8qtsvwz79zdskftrzxtar994cgutavfklvwsvctzqy | C07138323E00FA4FC122D3B85B9628EA810B3F381706385E289B0B25631197D194B5C238BEB136FB |
48 | 0 | bitcoincash:qh3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqex2w82sl | E361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C |
48 | 1 | bchtest:ph3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqnzf7mt6x | E361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C |
48 | 0 | pref:ph3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqjntdfcwg | E361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C |
48 | 15 | prefix:0h3krj5607v3qlqh5c3wq3lrw3wnuxw0sp8dv0zugrrt5a3kj6ucysfz8kxwv2k53krr7n933jfsunqakcssnmn | E361CA9A7F99107C17A622E047E3745D3E19CF804ED63C5C40C6BA763696B98241223D8CE62AD48D863F4CB18C930E4C |
56 | 0 | bitcoincash:qmvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqscw8jd03f | D9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041 |
56 | 1 | bchtest:pmvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqs6kgdsg2g | D9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041 |
56 | 0 | pref:pmvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqsammyqffl | D9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041 |
56 | 15 | prefix:0mvl5lzvdm6km38lgga64ek5jhdl7e3aqd9895wu04fvhlnare5937w4ywkq57juxsrhvw8ym5d8qx7sz7zz0zvcypqsgjrqpnw8 | D9FA7C4C6EF56DC4FF423BAAE6D495DBFF663D034A72D1DC7D52CBFE7D1E6858F9D523AC0A7A5C34077638E4DD1A701BD017842789982041 |
64 | 0 | bitcoincash:qlg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96mtky5sv5w | D0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B |
64 | 1 | bchtest:plg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96mc773cwez | D0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B |
64 | 0 | pref:plg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96mg7pj3lh8 | D0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B |
64 | 15 | prefix:0lg0x333p4238k0qrc5ej7rzfw5g8e4a4r6vvzyrcy8j3s5k0en7calvclhw46hudk5flttj6ydvjc0pv3nchp52amk97tqa5zygg96ms92w6845 | D0F346310D5513D9E01E299978624BA883E6BDA8F4C60883C10F28C2967E67EC77ECC7EEEAEAFC6DA89FAD72D11AC961E164678B868AEEEC5F2C1DA08884175B |
本文由copernicus 团队 冉小龙
翻译自cashaddr, 转载无需授权!
家境清寒,整理不易。
image.png
网友评论