如果你观察过很多的比特币地址,隐隐会发现有些规律:长度很多是34
位,好多是1
3
开头的,字母排列杂乱无章。
以下都是合法的地址:
3MWqbpfzxgojEAah6PMZoZPdUPUTuyTpan
1EdBvVAVP98zUsz2n8Pereop29y9fUFk2i
3Cbq7aT1tY8kMxWLbitaG7yT6bPbKChq64
3Nxwenay9Z8Lc9JBiywExpnEFiLp6Afp8v
18tTLso5jaa4XqyTQzo9S6mqhfCsgcufdh
1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF
1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx
1PnMfRF2enSZnR6JSexxBHuQnxG8Vo5FVK
3Kzh9qAqVWQhEsfQz7zEQL1EuSx5tyNLNS
1EBHA1ckUWzNKN7BMfDwGTx6GKEbADUozX
1LdRcdxfbSnmCYYNdeYpUnztiYzVfBEQeC
...
34
位的长度是绝对的么,有特例么?还真找到一个地址 1111111111111111111114oLvT2,长度只有27
位,而且这么多的1
,感觉很优雅。一般比特币地址的长度是34
位,也有33
位,最短的应该是26
位。
燃烧地址
1111111111111111111114oLvT2 还有特殊的地方,看 ta 的交易,只有输入,没有输出,只进不出。咋这抠门呢,这是个貔貅啊。
看下第一笔交易2c637592a4b4a95cf4b19260730c66de540d7d3b14d8d352de591c5ee6eac0fc,
输出脚本是 OP_DUP OP_HASH160 0000000000000000000000000000000000000000 OP_EQUALVERIFY OP_CHECKSIG
我们把 0000000000000000000000000000000000000000
叫做 hash160,hash160 可以转换为比特币地址。
你可以认为:比特币地址就是对 hash160 的简化,比特币地址是对人更友好的一种表现方式,就像语法糖一样。
输出脚本是啥?我们经常说,谁有比特币地址的私钥谁就能花费这些币,私钥相当于钥匙,输出脚本相当于锁,你把私钥放入输出脚本中,组成一个完整的脚本,
执行输出脚本,是私钥转化为 Hash160 的过程。如果与脚本里提前写好的 Hash160 一致,最后的输出结果就是 True
,你可以花费这些币了。
Hash160 就是没有规则的字符串,我们可以提供个任意的值,从半截腰上推导地址:Hash160 <==> 地址
。1111111111111111111114oLvT2 很明显就是这种情况,ta 的 hash160 全是0
,这显然是特意拼凑的,既然从半截腰推导出来的,自然没人知道私钥。
由于整体运算过程的不可逆性,我们无法推算出这个地址的私钥,既然不知道私钥,就无法动用币,只能进不能出,成了一个“废地址”,也叫燃烧地址,即 burn address
,像燃料一样烧没了。具体请看 https://qiita.com/shooter/items/1383ff1bcc8f1c97c53b
为什么还要向燃烧地址发送交易呢
- 减少币的流通量
- 土豪的心思不要猜
生成个燃烧地址
设定 hash160 = 1111111111111111111111111111111111111111
,最终得到地址12ZEw5Hcv1hTb6YUQJ69y1V7uhcoDz92PH
。
也有人打过币了,具体请看 https://qiita.com/shooter/items/1383ff1bcc8f1c97c53b
安全提示
强烈建议不要自己生成 addres
强烈建议不要自己生成 addres
强烈建议不要自己生成 addres
请用信赖的工具来做这事
如果地址计算错误,这个私钥并不能解开你的地址,相当于币丢了。
《Mastering Bitcoin》已经给了我们一个大教训。