• 李明阳

挖矿背后的黑产:谁偷了我的算力?



某A是一位很有经验的矿工,虽不及我资深,却也有4年的挖矿经验,对此颇有心得。


在给某A做咨询的过程中,直觉告诉我,似乎哪里出了问题。


偏低的收益

与我一样,某A也是最早的一批以太坊矿工,在四川运行着一家中等规模的矿厂,几批机器加起来,大约有1500台显卡矿机,以太坊总算力超过350G。


谈及自己的矿厂,某A非常得意,滔滔不绝地向我介绍,他每天的收益高达13个ETH。


这引起了我的警觉,因为按2021年4月10日的数据,350G算力理论上每天可以挖到15个ETH,价值超过23万人民币。


实际收益略低于理论收益是正常的,但是低了这么多,实在不合理。


细问之下,原来350G是挖矿软件显示的算力总和,矿池显示的24小时算力只有305G,按305G算力计算,每天13个ETH的收益是正常的。


收益偏低的问题在大多数情况下,只要找到原因,对症下药,很容易就能解决。


但是,在帮某A梳理了所有可能影响收益的因素之后,我发现,事情没这么简单。


排查

通常,导致收益偏低的因素,无外乎以下几点:


  • 非原版软件盗取算力

原版的挖矿软件会在挖矿过程中抽取一定比例的算力作为软件开发者的收益,这些被抽取的算力被称为DevFee。


比如lolMiner在挖以太币的时候,就会收取0.7%的算力,明码标价,童叟无欺。


至于非原版的挖矿软件嘛,基本上就是给原版软件套层外壳,加个图形界面,甚至直接篡改原版软件,打着免费的旗号,实际上收取的算力比例很高,有的甚至高达30%。


解决方法非常简单,不要使用来路不明的挖矿软件即可,认准原版软件的官方发布渠道,必要时重装一个干净的系统,很多非原版的挖矿软件,本身就是病毒,只有重装系统才能保证完全清除干净。


▼lolMiner的发布渠道是Github上的仓库,不过它并不开源,只会发布二进制程序。





网络不稳定

挖矿的过程中,矿机需要不断与矿池或者其他节点保持通讯。


如果网络不稳定,就会出现你挖到的结果不能及时发出去,或者直接丢失,自然无法获得收益。


你可以理解为,茶壶里煮饺子,饺子是煮熟了,可惜倒不出来,吃不到。


过度超频

显卡适度超频可以提高算力,但是如果超频过度,计算结果就会出现错误。


你看着它是在拼命计算,软件显示的算力也很高,其实很多结果都是错误的,根本不会被矿池认可,自然也就没有收益。


你可以理解为,学生做题靠瞎蒙,看着做得快,其实不得分。


矿池费过高


为了维持矿池的运行,矿池也会收一笔手续费,通常在1-3%左右,这些手续费会在支付收益时扣除。


与挖矿软件收取算力不同,因为矿池费并不是通过分走一部分算力实现的,所以矿池显示的一般是实际算力,并没有打折扣。


大矿池为了维护自己的声誉,吸引更多的矿工,在诚信方面还是很不错的,不会多收。


一些野鸡矿池就不一定了,他们会花大价钱购买广告推广,打出超低矿池费、甚至挖矿送币的旗号,吸引矿工来挖矿。背地里却黑掉了很多收益,等矿工反应过来,纷纷离开时,野鸡矿池运营方就会关掉矿池,再换个新名字重新上线,继续买广告推广,如此循环。


我还真见过来咨询的矿工,记吃不记打,多次上当,被野鸡矿池一茬茬割韭菜。


曾经有野鸡矿池联系我,承诺10%的分红,希望我帮忙推广,被我拒绝了。


他们能拿出10%的收益来推广,可见他们黑了矿工多少收益。




某A作为老矿工,他很自信地一一排除了我提出的可能:


  • 某A将使用的lolMiner发给我,经过对比,确认是原版

  • 通过不断ping矿池,延迟都在50ms上下,也没有异常波动,显然网络很稳定

  • 某A的矿机调优参数并不激进,机器运行一直很稳定,绝大多数机器一两周都没有重启的记录,不像是过度超频的问题

  • 某A一直在头部矿池挖矿,并且有合作,手续费都是有优惠的。


灵光乍现

经过一下午的折腾,某A表示矿厂比较偏僻,他要开车回家了,不然晚上山路很危险。


为了能够继续调试,他带了两台矿机回去,正是这个举动,最终成为发现问题的关键。


某A回到家后,因为已经很晚了,我也在忙其他事儿,我们便约好第二天晚上继续排查。


为了不损失收益,某A把矿机放在阁楼里,生成了个新地址,连接好矿池,继续挖。


▼第二天晚上,我们惊奇地发现,矿池24小时算力居然和挖矿软件的本地算力相差无几!




如果事情在往好的方向发展,那一定是我们做对了什么,只是我们不知道而已。


某A仔细回忆,却实在想不出他到底做了什么不寻常的事情,似乎除了机器搬了个地方,就没什么其他变化了。


于是,某A又远程切了一台矿厂里的同配置机器到这个地址,又跑了一整天。


▼对比一下,相信大家也能看出问题了,矿厂里的矿机,24小时算力远低于挖矿软件显示的本地算力,而某A家里的矿机就不存在这个情况。





古人云:橘生淮南则为橘,生于淮北则为枳,这矿机还能“水土不服”?



矿池

挖矿的本质其实就是求解一个谜题,谁先找到答案,谁就可以生成区块,获得奖励。


这个谜题是经过精心设计的,除了一个个去试,没有其他更好的办法。


每试一次,找到一个解的概率是相同的。


你的算力高,你试得就快,找到解的概率就高。


你的算力低,你试的就慢,找到解的概率就低。


这个过程的奇妙之处就在于,它不是长跑这类问题,你跑得快就必胜,跑得慢的人毫无机会。


挖矿更类似于从一堆绿豆里找黄豆,豆子足够多,你找得快只是会找到更多黄豆而已,并不会让找得慢的人一无所获。


长时间来看,算力高的人找到的解更多,算力低的人找到的解会少一些,找到解的数量与算力成正比。


不过,当你的算力与全网算力相比太低时,你找到解需要的时间大概率会非常长,可能一连几个月甚至几年都找不到一个解。


想象一下,你现在上班,工资不是每个月发,而是三年发一次,你的生活会是什么样子?


为了让大家有个稳定的收益,矿池就诞生了。


大家组团一起找解,找到了之后,按贡献大小分收益,因为大家加在一起的算力会很高,很快就能找到一个解,大家也就能每天或者每周拿收益了。


按现在全网算力500T来算,你就是有上百台矿机,算力与全网算力相比也依然很低,所以,现在基本上已经没有人单打独斗了,都是加入矿池挖矿。


矿池会给矿工派发任务,矿工完成了任务,就会把结果提交给矿池,被称为Share。


▼现在明白挖矿软件上显示的Share是什么意思了吧。




事实上,矿池就是根据你提交的Share来分配收益的。


你需要给挖矿软件提供一个账号或者钱包地址,你提交的Share就会被矿池关联到你的地址上,这样,矿池就知道收益应该发给谁了。


▼挖矿软件的启动命令中,需要提供账号或钱包地址。


./lolMiner --algo ETHASH --pool eth.f2pool.com:6688 --user {账号或钱包地址}

同时,矿池也会根据你提交的Share的多少来推测你的算力,这就是矿池中显示的24小时算力的来源,矿池并不是根据这个估算的算力来分配收益的。


比如100M算力每天理论上可以提交2000个Share,如果你提交了8000个Share,我就可以推测你的算力是400M,这个数值应该与本地的实时算力接近,毕竟长时间的统计规律会接近于理论概率。


为了尽可能让本文通俗易懂,我省略了很多矿池的实现细节,大家感兴趣的话,矿池的技术原理完全可以开一个新的文章系列了。


你只要明白两点,就不会影响你阅读本文的后半部分:


矿池会给矿工分配一个个可以快速完成的小任务

小任务的结果被称为Share,矿池会按Share的多少分配收益


黑幕

▼让我们看看正常挖矿时,矿机与矿池的通讯。




矿池派发任务,矿机完成计算,并提交Share。


▼我们再来看看某A的矿厂发生了什么。




软路由被配置了一个拦截程序,会对矿机连接矿池的请求进行拦截。


矿池1下发给矿机的部分任务,会被替换成矿池2的任务,矿机完成计算后,提交的结果也会被转发给矿池2。


在矿机看来,它不知道软路由做了拦截操作,它以为自己正在矿池1挖矿。


在矿池1看来,矿机是在挖矿,相关Share的收益会被算到某A的账号上。


在矿池2看来,矿机也是在挖矿,相关Share的收益会被算到算力盗窃者的账号上。


矿机的算力毕竟是有限的,如果接受一部分矿池2的任务,自然能接受矿池1的任务就会减少,提交给矿池1的Share也会减少,这就是为什么某A在矿池上看到的24小时算力偏低的原因。


▼我在软路由上找到了个配置文件,从中可以看出,这个盗窃比例是12%。




也就是说,矿池1下发给矿机的任务,有12%会被矿池2的任务替换,某A就会损失12%的算力。


某A的一台矿机正常算力252M,矿池显示220M左右,损失的部分正好是12%。


5 views0 comments

Recent Posts

See All