我们必须认识到使用来自 Base58 字母表中简单符号来代表比特币地址是非常重要的。搜索“1kids”开头的图案我们会发现从1Kids11111111111111111111111111111 到
1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz 的地址。这些以“1kid”开头的地址范围中大约有 58 的 29 次方地址。 显示了这些有“1kids”前缀的地址。
“1Kids”靓号的范围
From1Kids11111111111111111111111111111
To 1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz
我们把“1Kids”这个前缀当作数字,我们可以看看比特币地址中这个前缀出现的频率。如果是一台普通性能的桌面电脑,没有任何特殊的硬件,可以每秒发现大约 10 万个密钥。
靓号的出现的频率(1KidsCharity)以及生成所需时间
长度地址前缀 概率 平均生成时间
1 1K 1/58 < 1 毫秒
长度地址前缀 概率 平均生成时间
2 1Ki 1/3,364 50 毫秒
3 1Kid 1/(195*103) < 2 秒
4 1Kids 1/(11*106) 1 分钟
5 1KidsC 1/(656*106) 1 小 时
6 1KidsCh 1/(38*109) 2 天
7 1KidsCha 1/(2.2*1012) 3–4 月
8 1KidsChar 1/(128*1012)13–18 年
9 1KidsChari 1/(7*1015) 800 年
10 1KidsCharit 1/(400*1015)46,000 年11 1KidsCharity1/(23*1018) 250 万 年
正如你所见,Eugenia 将不会很快地创建出以“1KidsCharity”开头的靓号地址,即使她有数千台的电脑同时进行运算。每增加一个字符就会增加 58 倍的计算难度。超过七个字符的搜索模式通常需要专用的硬件才能被找出,譬如用户定制的具有多图形处理单元(GPU)的桌面级设备。那些通常是无法继续在比特币挖矿中盈利的钻机,被重新赋予了寻找靓号地址的任务。用 GPU 系统搜索靓号的速度比用通用 CPU 要快很多个量级。
另一种寻找靓号地址的方法是将工作外包给一个矿池里的靓号矿工们,如靓号矿池中的矿池。一个矿池是一种允许那些 GPU 硬件通过为他人寻找靓号地址来获得比特币的服务。对小额的账单,Eugenia 可以外包搜索模式为 7 个字符靓号地址寻找工作,在几个小时内就可以得到结果,而不必用一个 CPU 搜索上几个月才得到结果。
生成一个靓号地址是一项通过蛮力的过程:尝试一个随机密钥,检查结果地址是否和所需的图案想匹配,重复这个过程直到成功找到为止。例 4-8 是个靓号矿工的例子,用 C++程序来寻找靓号地址。这个例子运用到了我们在 56 页“其他替代客户端、资料库、工具包”一节介绍过的 libbitcoin 库。