【区块链科普】如何用Go实现一个”矿池”?

最近一直在组织公司内的Go语言培训课,为了拉动大家的学习兴趣,设计了一个以”挖矿”为主题的课后作业,反响非常热烈:

大家不仅实践了Go语言开发,而且了解了”挖矿”的基本工作原理。

矿池原理

作业已经开源到了:https://github.com/owenliang/blockchain,代码非常简单。

简单的说,我们模拟的是现在流行的”矿池”场景,以”哈希宝“这家矿池为例,下面是我运行了它家的”挖矿客户端”:

我的GTX 1060 6G显卡每天可以得到收益15元人民币,扣除电费3元后净利润12元左右,半年就可以赚回显卡钱。

显卡越贵则算力越强,收益则越高,同事的2080ti一天50元收入,大家家里电脑闲着的话建议别浪费。

类似哈希宝的”矿池”非常多,无非哈希宝提供的挖矿客户端是自家的,小白也可以参与挖矿,大家有闲置显卡(>=6GB显存)建议都进来”捡钱”。

哈希宝 目前是在挖ETH以太币,目前1个币的价值是1800美金左右,所谓”矿池”就是大家共同来碰撞区块hash,碰到区块之后提交到区块链上所得的”矿工奖励”收益则由哈希宝根据大家的算力贡献进行分配,这样大家都可以赚点小钱,而哈希宝只赚大家提现的抽水费用,可以直接提现到微信和支付宝。

哈希宝 之外也有其他矿池(比如”鱼池”),使用市面上开源的挖矿软件可以接入到这样的矿池中,只不过这些”矿池主“分配利益时是直接将挖矿收益的ETH以太币按贡献转账给你的ETH钱包,最终变现还需要你自己去类似”火币”的交易所进行售卖,比较繁琐。

作业原理

作业已经开源到了:https://github.com/owenliang/blockchain,因为只是模拟矿池,所以这里面有2个关键设计:

  • ”矿池主“:也就是服务端,区块链完整的持久化在这个节点上。
  • ”矿工“:也就是客户端,客户端不下载完整区块链,而是调用”矿池主“接口下载最新的一个区块,然后自己本地碰撞下一个区块,并提交给”矿池主“。

判断学员是否通过测验,只需要让学员提交区块时在区块的内容里写上自己的姓名即可,提交成功则广播到钉钉群,促进大家互动。

最终”矿池主“磁盘上保存有完整的区块链信息,根据区块链信息进行”幸运抽奖“之类的学员激励活动即可,我们设立的类似这样的活动奖项:

最佳发现奖(N人):奖励前N名挖矿成功的同学100元购物卡1张(每人限制1张)。

幸运矿工奖(M人):活动结束后从最终的区块链上随机抽取M人,奖励100元购物卡1张(每人限制1张)。

大家也可以尝试在公司内组织这样的活动,让学习变得更加有趣。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~