挖矿& 矿池

什么是挖矿

挖矿是按照一套规则,竞争获取记账权的过程,获取记账权的矿工可获得一定的记账奖励; 通过PoW竞争记账权,大部分是通过CPU、GPU、ASIC矿机计算哈希值(bitcoin)或者其他某个解(例如:grin,图中找环) 比如,现在如果要挖到比特币,需要哈希结果中,前面有67 个0。不停地哈希,会有2 的67 次方之一的概率,随机到我们想要的结果,2^67=147573952589676412928,电脑非常快,1 秒算1 亿次哈希,大概需要46795.4 年才能挖到比特币。挖矿有两种方式:独立挖矿和矿池。

SOLO挖矿

一般是对GPU友好的虚拟货币才会考虑SOLO挖矿,全网算力越分散越适合SOLO挖矿。

挖矿原理

本质是找一个数学难题的解,大多数是执行Hash函数,获取符合目标难度的结果。

挖矿原理:挖矿的过程

挖矿和共识机制

抗ASIC算法

一般有三种做法:

  1. 内存密集型(memory intensive)hash算法: Equihash(ZCash),Cuckoo Cycle(Aeternity);
  2. 多个hash算法随机组合:X16R(Ravencoin);
  3. 混合算法:Cuckaroo:ASIC-Resistant
    Cuckatoo:ASIC friendly

抗ASIC算法—Cuckoo Cycle(一)

在一个N个节点M个边的二分图中搜索指定长度的环(cycle); 二分图使用Cuckoo hashtable存储,一边是奇数索引的节点,一边是偶数索引的节点:

抗ASIC算法—Cuckoo Cycle(二)

image

抗ASIC算法—Cuckoo Cycle(三)

当图变大时,找到符合要求的环将越来越困难。例如,从下图中找到长度为8的环

抗ASIC算法—Cuckoo Cycle(四)

两个重要特性:

  1. 当图变大时,找到符合要求的环将越来越困难;
  2. 在图中找到指定长度的环的概率随着M/N的增加而增加;Cuckoo Cycle固定M=N/2

抗ASIC算法—X16R(一)

算法用的是X16R。X16R算法使用不断打乱哈希算法串联顺序,利用随机性来抗ASIC矿机。X16R的16种哈希算法的串联次序,由前一区块哈希值的最后8字节(十六进制表示的16位)决定。 image

抗ASIC算法—X16R(二)FPGA ?

上一区块最后8字节是:0x0000000000000000007e8a29f052ac2870045ae3970270f952ac2870045aae39 每一个十六进制位决定一种哈希算法: image

挖矿的演化历史

比特币挖矿

按照比特币产出的运算公式,每逢四年年产出都会减半,最终挖矿。 2019年1月8日比特币全网算力:43EH/s;1EH/s代表,每秒可进行10^18次hash运算。

挖矿产业链

什么是矿池

矿池就是一个平台,汇集矿工的算力,给矿工一个稳定的挖矿收益,平台从中收取一定的服务费

矿池的好处和问题

对比solo挖矿,矿池有如下好处:

  1. 收益稳定:矿池内的矿工大家共同承担风险、分享收益;
  2. 降低门槛:solo挖矿对技术和资金都有较高要求;
  3. 代表权益:矿池可代表矿工权益参与社区治理。

挖矿协议

Getwork:最原始的挖矿协议,pool给miner区块头(不包含交易数据) GBT (getblocktemplate):pool给miner模板,不同于Stratum的是,给的是完整的区块数据,它允许miner修改区块数据,比如把那个交易打包的块中,所以GBT比Stratum需要传输更多的数据,所以需要更高的带宽。 Stratum:矿池服务器给挖矿客户端提供模板(只包含区块头和coinbase交易)。

Getwork目前用的比较少了,市面上的许多矿池已关闭Getwork接口,都主力支持Stratum协议。

POW矿池的结算模式

PPS(pay per share):据矿工提交的有效工作量,矿池按照估算的理论爆块奖励扣除手续费后,与矿工进行结算。该机制主要由矿池承担挖矿风险,相对其他结算方式手续费较高(5%-8% ),但收益稳定,只和提交的工作量有关,和矿池幸运值无关。打工模式。PPS模式也称为打工模式,假设你的算力是100M,而整个矿池的算力是10000M,那么你就占据了矿池算力的1%,然后,假设矿池根据当前的难度和全球总算力,估算出矿池一天大约能够挖到4个区块,也就是100个比特币,那么,矿池会为你每天支付全矿池1%,也就是1个比特币的报酬,这样,即使矿池今天只挖到了1个区块,你也是获得1个比特币(矿池亏本),如果矿池超额发挥,挖到了10个区块,你还是只有1个比特币的收益(矿池大赚)。

PPLNS(Pay Per Last N Shares):PPLNS模式也就是组队挖矿模式,举个例子:假设张三、李四、王五,这三个人在同一个PPLNS 矿池中挖矿,在过去的一段时间里,张三贡献了10个shares,李四贡献3个,王五贡献12个,加起来是25个shares,这时矿池发现了一个区块,区块中含有25个比特币,那么,张三就会分到10/25个区块的奖励,也就是10个比特币,而李四获得3个,王五获得12个。在PPLNS模式下,运气成份非常重要,如果矿池一天能够发现很多个区块,那么大家的分红也会非常多,如果矿池一天下来都没有能够发现区块,那么大家也就没有任何收益。

PPS+:是PPS和PPLNS两种费率模式的结合,即对爆块的奖励按照矿池理论爆块数量进行PPS结算,而对矿工费/交易手续费按照矿池实际爆块获得的矿工费按照PPLNS进行结算。

FPPS:对爆块奖励和交易手续费均按照PPS 进行结算。

目前市场上主流的结算方式还是PPS 类(包括PPS 、PPS+、FPPS),矿工更偏好于收益相对稳定的结算方式。 PPS+ 主要用于:BTC、LTC、ETH。

POW矿池类型

托管矿池:即一个矿池有一个分布式中心服务器,对其下属的所有矿机进行协调与管理,服务器会与一个或多个全节点进行数据同步,帮助矿工完成对区块的验证,从而缓解矿机的压力,毕竟一个完整的区块副本还是很大的,这样矿工们也可以投入更多的算力获取更多的利润;

p2p矿池:托管矿池存在的管理员作弊的可能,即,控制打包哪些交易,爆块奖励的分配暗箱操作等。所以出现了p2p矿池,它没有中心服务器,取而代之的是一个基于区块链的系统(份额链),矿工们在这条链上进行挖矿,这条链的难度远低于比特币,基本上30秒一个块,大家在这里计算并由该区块链系统统计share,当有一个区块头的hash满足比特币的难度需求时,这个区块就算是挖矿成功了,并将被广播出去,然后份额链将对区块奖励按照统计的share进行分发,其实就是使用区块链替代了中心服务器。缺点是设计复杂,效率相对比较低,基本上已慢慢淡出市场,毕竟资本总是逐利的。

POW矿池攻击–Pool hopping

对于PPS的结算,如果有矿池的运气不太好很长时间都没有挖到区块,在这个矿池里的矿工的share就开始不断贬值,相当于算力越来越不值钱,这时候一些矿工就可以选择将其算力转到另一个刚挖到区块的矿池下去挖矿,因为这时候时间刚开始计算,每个share的价值比较高,相当于算力也比较值钱,如果一段时间没有挖到,他也可以选择再次跳池,一直去寻找share价值比较高的地方,至于前面所耗费的算力能值多少钱就不用太关心了。采用这种策略在统计学上来讲最终获得的收益肯定是要比你一直待在一个池里不动的收益要来得多的,不过随着现在矿池的收益分发策略的改变这种攻击策略已经不可行了。

POW矿池攻击–区块发布抑制攻击(Block-withholding attacks )

虽然矿工无法窃取难题求解答案的区块报酬,但他仍然可以否决对矿池中其他矿工的报酬。矿工可以选择只向矿池管理者提交部分难题求解答案,但放弃所有成功的难题求解答案。因此,当其他人找到难题求解答案时,矿工会收到一定比例的奖励,但不会为该矿池提供任何实际贡献。抛弃成功的难题求解答案破坏了矿池,攻击者仅损失少量的收入作为代价。尽管攻击者蒙受了损失,但在某些情况下,矿池有必要利用自己的一些挖矿能力破坏竞争对手:攻击矿池通过将其中一些矿工注册为受害矿池中的工人,渗透到受害矿池中。这些工人然后执行区块发布抑制攻击。通过成本和报酬的详细计算,表明在某些情况下(取决于攻击矿池和受害矿池的大小),攻击矿池是有利可图的。为了防止这种攻击,人们已经提出了对挖矿协议的轻微修改。在修改后的版本中,矿工无法辨别部分难题求解答案和完整难题求解答案,以解决工作量证明问题,并且无法选择性地抑制完整的难题求解答案。

矿池中心化问题

挖矿的成本问题

挖矿的主要运营成本是电力成本。世界各地电力成本是不同。在美国,一个比特币的挖矿边际成本约4700美元,而在中国则只有约3000美元。目前BTC的价格3850美元,所以中国的大矿场目前还有收益,但电力成本较高区域和小矿池则关闭了。只要币价还在他们的边际挖矿成本之上,他们就愿意买入更多的ASIC矿机。而中国矿工的挖矿边际成本在3000美元左右,因此他们的挖矿动机依然强烈,这也就是为什么币价下跌这个多但算力没有。如果其他条件不变,这一现象会持续下去,直到世界各地的挖矿边际成本相等。币价有可能跌落至最低挖矿成本之下;在这个时点,哈希率才会随着币价下跌而下降。

挖矿和矿池收益问题

基于显卡的挖矿程序算法抽取费用:0.5%-2% 矿池的抽取费用: PPS:2-5%; PPS+(BTC、ETH):2-2.5%; PPLNS:3%

BTC.com矿池业务线

image

矿池的核心竞争力

矿池的职能:聚集矿工算力一起挖矿。

  1. 技术要强:有能力带领自己的节点快速出块;
  2. 算力要稳定:持续性地保持出块竞争力;
  3. 平台要安全:防范DDoS攻击、资金安全;
  4. 矿池要扩大生态做矿机和矿场,而不能像之前倒闭的BTCC一样只做矿池;