address 地址合法性 - comejoy/bitcoin GitHub Wiki

地址长度规则

一个bitcoin地址一般由26-35位字母或者数字来组成的标识符,早起区分大小写,。以数字1或3开头,这代表了比特币支付的可能目的地。任何比特币的使用者不需要任何话费便可以生成地址。

地址大小写规则

bitcoin早起规则是大小写敏感的,建议尽量使用粘贴、复制以免地址错误导致转账失败或coin打丢。后期发起的bech32规则是大小写不敏感的。

地址支持类型

地址规则 类型说明 地址前缀 地址长度(去除前缀) 例如
P2PKH 普通公钥地址 1 25-34 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
P2SH 脚本哈希地址 3 34 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
Bech32 隔离见证地址 bc1 39 bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq

地址编码规则

base58编码集

支持字符:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Base58编码

可读性编码算法,类似古典密码学里的置换算法,理论上并不是密码学理论的核心内容。可读性编码算法不是为了保护数据的安全性,而是为了可读性。以二进制进行传输的信息是不具备可读性的,数字与字母组成的字符串才更容易被识别。可读性编码不改变信息内容,只改变信息内容的表现形式(部分>编码算法还加入了容错校验功能,以保证传输过程中数据的准确性和完整性)。
Base64是常见的可读性编码算法,所谓Base64,即是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”。
Base58是Bitcoin中使用的一种编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。

设计Base58主要的目的是:

  • 避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。
  • 不使用"+"和"/"的原因是,非字母或数字的字符串难以作为账号的一部分被接受。
  • 没有标点符号,通常不会被从中间分行。
  • 使大部分的软件支持双击选择整个字符串。
  • 比特币中使用Base58算法来对公钥的Hash160及私钥进行编码,以生成以1或3开头的比特币地址及WIF(Wallet import Format)格式的私钥。