十二、斗转星移

狗池历险最有意思的部分就在第一个月;迈入第二个月之后,事情就变得平淡起来。这一章就简略介绍一下后来发生的小故事。

强制升级

大概1月中旬的时候,XPM的难度从9提升到了10。xolo矿机出了个新版,专门为新的难度做优化。我们测试之后发现新矿机的 块/share 比例更高,就强行推荐用xolo矿机。

简单说一下这里的技术细节。质数币的挖矿算法并不像比特币那么均匀。举个例子,如果挖矿算法的目标是找长度为 9的链,那么每秒可以找到 20 个 share,但是几乎找不到长度为 10 的链。而如果把目标定为 10,每秒就只能找到 10 个share了,也有不小的概率可以找到10。这种设计对于只追求 share 的矿工来说,是有动力用 share 更多的矿机的。旧版的 jh 和 xolo 矿机目标是找 9,而新版 xolo 的矿机目标是找 10。所以用户默认更喜欢用旧版矿机。

然而只出 share 不出块是矿池最痛恨的事情。我们根据 块和 share 的比例 给 jh 矿机算了个折扣,凡是用 jh 矿机挖矿的人,share 数量都要打折。新政一出,大量用户的流失。一开始我们以为流失的只是那些想薅羊毛的人,直到几天后,一位大户联系我们说,在他的 CPU 上 xolo 矿机的效率极其低,这才让我们意识到犯了大错。

jh 矿机的原作者已经不维护了,好在我们发现有另一个作者改造了目标为 10 的版本。联系上作者,和他商定好分成策略,请他为我们专门编译了一个版本(限制了矿池的 IP 只能是我们的矿池)。终于可以用上新版的 jh 矿机了。

大多数矿工都很配合升级了新版矿机,还有少数还在用旧版矿机薅羊毛。为了不被薅羊毛,群神也是费了不少精力。先是限制版本号,没想到道高一尺魔高一丈,居然有人自己编译矿机,把旧版的矿机用新的版本号连接上来。

这段攻防大约持续了大半个月。最后 D 神找到了一个终极方法,这是一个数学方法,可以根据 share 的数值检测出他的计算目标是几。这一筛不要紧,我们查出了居然有用户用着非常古老的矿机在薅羊毛,目标为6。

教程页插图

广告

1月8日那天,狗池接入了 Google 广告。广告主要放在了两个地方,banner位和土豪榜的中间。特别是土豪榜中间插入的广告,要多丑有多丑,当时我是十万个反对。结果 D 神一句话说服了我:丑没关系,赚钱就行,丑也能挖矿。现在想起来这种应该属于信息流广告吧 🙂

广告的收入其实不少,特别是土豪榜的丑广告。巅峰时期差不多每个月有60刀,大概能抵一半的服务器费用。有意思的是,矿工似乎是“高价值”人群,狗池广告的 CPM 比我博客的高多了(于是后来博客的广告就去掉了)。

黑池

群神提出过好多种黑池的方案,但因为大家都太正直了,最后完全没有尝试。这些方法包括:

  • 额外划出去一些钱给我们的钱包(狗池2%的手续费已经是全网最低,黑到4%几乎看不出来)。
  • 51%攻击,狗池 DTC 的占有率有60%多,完全可以不承认矿池外的块,直接变成100%收益。
  • 把 BEK、CDN 的算力导到 DTC 或者 XPM 里。毕竟我们已经占了 BEK 100%的市场,实际上有多少算力挖矿根本不重要了。

其实我们也在多个矿池做过公平比较,实验结果看,我们的收入一直是最高的,甚至比某些矿池的收入多一个数量级。也不知道它们是技术问题还是太黑。

群神一直都坚信走正道才能赚大钱,只可惜市场大环境一直在下行,还没等我们占领更多市场,币就快没了。

跑路

2014年2月7日,当时最大的比特币交易平台 Mt. Gox 宣布自己客户的比特币被盗,自己要倒闭了。之后的很长一段时间比特币一蹶不振,山寨币也跟着加速地跌。

随着市场慢慢变冷,我们的收入也越来越少,到最后,连服务器的成本也支撑不了了。7 月的分红日,群神不但没有收入,还一起凑了 800 元交服务器费;到了 8 月,感觉盼不到下一个春天了,就发了公告准备关机。

最后根据老黄历,我们把关机时间定在了2014年9月8日。截图留念。

关机当天网站首页截图

质数

作为一个数据完整性强迫症的患者,狗池获取的所有质数都被我保留下来了。总计大约20亿,或许能给相关研究人员提供一些素材。(附wiki链接:第一类坎宁安链,第二类坎宁安链,和双坎宁安链

质数链长度 质数数量
61846635074
7192006179
817747003
91067364
1054265
111578
1259
131
狗池搜集到的质数数量,按质数链长度统计

这些质数存放到百度网盘上了,总共118G。

链接:https://pan.baidu.com/s/1p5v8_btFYcouxMl8QOn60A

提取码:gpol 

再回首

再回首 恍然如梦

再回首 我心依旧

只有那无尽的长路伴着我

很好听的老歌《再回首》。

从开始做矿池至今已经有接近 8 年的时间了,从写第一篇回忆录至今也已经 5 年了。翻着聊天记录和日记可以慢慢复原出当时的故事,但已经很难还原出当时的精气神。也许是自己水平有限吧。

回看狗池的经历,年轻时的激情让正在创业的我也略显惭愧。五年前挖的坑在此填上,草草收尾,更是为了向前看。

十一、抢币行动

2014-01-15 14:42,金牌客服X传来急讯:大户Q的钱包被盗。

矿池“错误”页面插图(404等)

虽然事情很紧急,但还是有必要先强行科普一下,虚拟币的钱包被盗和现实中的钱包被盗有什么区别。

简单的理解,现实中的钱包被盗之后,钱包就在小偷手里了,里面的钱一般也回不来了;但是虚拟币钱包被盗之后,钱包同时在自己手里和小偷手里,这就有挽回余地了。这有点类似网游账号密码被黑客知道了,自己和黑客同时拥有了这个账号。在以前网游安全机制不完善的时候,黑客拿到账号会先改了密码和密保问题,然后把道具,甚至账号都卖了。不过,虚拟币的特性从数学上保证了这个“密码”(私钥)是不可修改的。既然这时候的钱包同时被自己和黑客控制,那就要跟黑客拼手速了,看谁先把钱拿出来。

说得技术一些,我们通常看到的虚拟币钱包地址,是类似这样的一个字符串:1icstarNBYj6F9D8eqGXJuf2JpxTuyT9c(欢迎土豪打赏这个比特币钱包)。给别人转账的时候,就是要填别人的这个钱包地址。那么,怎么证明自己是这个钱包地址的主人呢?所有的证明信息都在wallet.dat这个本地文件中。事实上,wallet.dat存储的是私钥,而钱包地址就是对应公钥的hash。每一笔从自己钱包出去的转账,都需要自己的私钥签名才会被虚拟币网络认可。所谓钱包被盗,其实就是wallet.dat被黑客拷走了,于是黑客就有权限用里面的钱了。

到这里,其实还有个问题没解决。从直觉上想,黑客应该会在拿到虚拟币之后,马上把里面的钱都转走。一旦转走了,由于虚拟币的匿名特性,就再也不用想找回来了。如果黑客悄悄地拷走了钱包,然后把钱转走,消失,等我们反应过来的时候,钱已经没了。那这还有什么可以挽回的吗?还真有。因为里面有一部分钱,还没“成熟”,要等几个小时才能转。

这次大户被盗的是他挖矿的收款钱包,由于是在狗池挖的,所有的币都在挖矿时发放。虚拟币有个很有趣的设计,为了防止因为51%攻击,所有虚拟币都要求:挖到的币,要被N个后续的块承认后才能使用。对于质数币来说,N=3200,平均每块一分钟。也就是说,刚挖到质数币需要在两天之后才能使用。对于虚拟币而言,这种保守的设计可以大幅提高虚拟币的稳定性,也让这次抢救成为了可能。

回头看一下大户,在钱包里面还存有价值数万的未成熟的币,所以现在的最佳办法,就是一旦一个币成熟了,就马上转到自己的新钱包里。当然,黑客也知道这点,也会掐着成熟的时候,马上转到黑客自己的钱包里。

简单了解了事情的经过,大户从群里下载了一个嵌入了木马的挖矿程序,估计这个木马扫描了整个硬盘上所有的wallet.dat,并传给了黑客。现在大户所有虚拟币都在危险之中。

10分钟后,狗池提供了紧急抢救方案:提供程序化转账服务,为大户尽可能降低损失。

之后的一小时,金牌客服处于失踪状态。原来她已经完全得到了大户的信任,拿到了大户的钱包,一起帮大户手工抢币。大户和金牌客服两人应该是和一个黑客在比手速,成功率基本和参与人数成正比:70%。

在金牌客服的建议之下,大户采纳了我们提出的程序化抢救的方案。程序化抢救的要点就是在一个新币(块)刚刚成熟的时候,马上提交转账申请。提交过早会被网络拒绝,提交慢了就被黑客转走了。到这里,我们还天真的以为,程序的速度肯定比手工要快。实际上真正的瓶颈在于P2P网络的同步时间。一般虚拟币P2P网络的同步时间在两秒之内,也就是说,当有人挖到一个新块(同时意味着此前的第3200个块成熟了),通过P2P网络广播出去,大约两秒之后,全世界都知道了这条信息。对于矿工而言,知道了这条消息,就可以马上放下手中的活,开始挖下一个块了;对于此时的我们,就可以马上发出转账请求了。虽然这个延时只有短短的一两秒,但这足以让黑客手工完成转账操作。为了更快地得到这条宝贵的新币成熟的信息,我们在中美两地多个机房部署了钱包抢救程序,其中一个节点就在我们狗池的同一个机房,占尽先机。经过这一番改造,我们基本保证获取信息的时间在0.5秒之内,就算黑客比我们早0.5秒得到消息,手速也比不过程序。

大约一个半小时之后,分布式程序化抢救方案上线。抢救成功率上升至100%。最终共为大户挽回损失N万元。

p.s. 几天后,金牌客服收到大户赠送的 iPhone 5S。

十、转型——从公池到私池

私池,我们早有耳闻,但一直看不上眼。曾经觉得只有公池才能做大,才能多赚钱。但是,大户Q的出现让我们改变了这一想法,原来头部用户这么重要。

我们很快发现了私池对我们还有更多的好处。首先服务器可以开的很小,毕竟不用考虑分钱的事了(share的计算是大头)。其次,如果我们给每个大户分配一个IP,那么无论哪个IP被DDoS,吃亏的也只是泄露IP的人。最后甚至连网站界面都不需要做了。

经过简单地讨论,我们很快达成了一致:我们少赚点,看看他愿不愿意,手续费降到 1%。很快,金牌客服X带来了出乎意料的好消息:“嗯,费率你改5%,不对外就行了。反正有钱一起赚。”

“感动死了”群里开始刷屏。很快又开始了“金牌客服 X 神”的第二波刷屏。

其实从概率的角度看,私池并不会比公池有优势。但是大户似乎不相信这一点,而坚持认为私池的话钱就不会被其他人分走了,所以私池更好。好吧,我们也解释不清楚,做就是了。

“土豪榜”页面插图

云币(CDN币)

大户 Q 想让我们做云币的私池,云币是一个纯忽悠的币,从名字就能看出来。它号称用云计算预测未来天气,它的英文名 CDN 说明了作者心目中 CDN 就是云计算的代名词。云币无论官网还是论坛的信息,都显露出一丝不着边际的高大上。论坛的发布贴甚至还用上了当时的最高规格,四国语言同步发布(不是机翻的那种)。

一开始我还很有兴致地去看云币的代码,看看他怎么预测的天气。结果发现它只是从 XPM 的代码 fork 出来改了个名字,根本没有什么天气预报。

这么山寨的币,要是我们自己调研下来,肯定是不会碰的,感觉第二天就会挂掉一样。但现在不一样,这是大户需求,他有办法盘活韭菜,我们跟着喝点韭菜汤也是很好的。

D 神花了半天时间改好了云币的矿池,金牌客服 X 很快让大户开始测试。5%,30%,70%,直逼80%。短短一小时,大户仅仅是切了一些测试机过来,就占据了整个币80%的算力。金牌客服 X 透露说,大户那天晚上正在开心的数钱。

可惜好景不长,第二天,云币作者宣布做出来了官方矿池,吸引大家去挖。但是这个矿池 bug 无数,根本不出块,群里哀声怨道。作者一气之下居然把云币矿工群的韭菜都踢了……这可了得,这个币真的要活不过一天么,我们还没卖呢。

大户 Q 看到这个趋势,马上提出需要我们开公池,保住云币。几小时后,云币公池上线,缓和了韭菜们的心情。也保住了我们那些微薄的收入。

“大户”们

大户们似乎有个自己的圈子,定制了第一个私池后不久,开始源源不断地有“大户”来联系我们。他们的需求千奇百怪:

  • 最主流的需求就是和大户 Q 一样,希望独立出块,钱不会被别人分去。
  • 有个大户似乎是机房管理员,他会希望我们帮他做不同币种不同矿机的收益测试,挑到最后选了 ripple。
  • 还有个大户似乎在用公司的电脑挖矿,说不能连接矿池公开的IP地址,需要我们提供一个专用的IP给他。
  • 也有个外国友人问我们的底线在哪,接不接受他朋友控制的肉鸡来我们这里挖矿。
  • 最坑的是一个口气很大的顾客,要求做一个很奇怪的定制,类似于nicehash的自动分配挖矿,可以切换钱包地址的。因为他那里的启动脚本只能用同一个,而他是通过代理技术切换不同的服务器的。我们信以为真,吭哧吭哧开发了一天,后来发现他的算力连1%都不到。

这些奇葩需求做起来很没有成就感,后来我们接需求之前会请大户先证明一下自己的身份,用自己的收款钱包签个名。我们看到有足够的收益才做。

不过倒是有个意外的收获。后来狗池 DTC 真的被 DDoS 攻击了,而当时私池的算力差不多有一半,攻击者发现攻击之后矿池还在出块,就以为我们已经可以防 DDoS了,很快就停止了攻击。