ClassZZ的挖矿算法
作者:互联网
挖矿算法是任何 PoW 链的核心。无论是链的安全性,还是代币的经济模型,或多或少都与它有关。在设计 CZZ 的挖矿算法时,我们做了以下几个考量。
1,不能用现有的挖矿算法
众所周知,任何 PoW 链对 51% 攻击都是没有抵抗的。那么什么样的情况会出现 51% 攻击呢?一个比较常见的场景,就是当诸多区块链项目共用一个挖矿算法时,算力不是最高的那些项目都有可能遭到算力攻击的风险。
其中比较著名的两次事件为,2018 年 ABC vs BSV 的算力大战,以及 ETC 上的双花事件。两次攻击之所以能够给所有参与者造成损失,都是由于一部分矿工,迅速将大算力链(例如,BTC,ETH)上的矿机搬到小算力链上(例如,BCH,ETC)。
再比如说 2020 年四月的奖励减半,由于 BTC,BCH 与 BSV 公用一个哈希算法,且它们之间几乎同时减半,这也有可能会影响到其它币的算力稳定性和安全性。BTC 作为算力最大的网络自然不必担心,但是如果 BCH 或 BSV 减半时间点晚于 BTC,则有可能会受到算力冲击。
因此,任何新的区块链项目,最安全的方式是拥有自己独立的哈希算法。
2,是否应该抗 ASIC
我们想法是尽量抗 ASIC,或者至少需要持续提高制作 ASIC 的成本。这里面有两大因素,
- ASIC 不利于去中心化,这个大家都比较清楚。显卡可以随时购买,但定制 ASIC 的门槛却要高很多。因此,一个链一旦被 ASIC 垄断之后,它的算力势必将被少数几个寡头所垄断。
- 收益减半时对安全性的影响,是一个比较少被谈及的话题。大致情况如下,如果一条链用的是 GPU 算法,如果收益减半不能伴随币价翻倍,则 GPU 矿工可以切换到其它链上去挖。如果一条链主要是 ASIC 矿工,则此时大约 1/2 的 ASIC 将会关机。这就给了处心积虑的人,可以以极低成本来购买被废弃的 ASIC 矿机,从而大幅度降低了对全网进行算力攻击的成本。
基于以上两种考量,CZZ 必须推出自己独创的抗 ASIC 的挖矿算法。
在抗 ASIC 的各种尝试中,主要有 memory hard 与 bandwidth hard 这两种思路。在以前的项目中,采用 memory hard 的占主流。Memory hard 的思路其实很简单,由于 DDR 内存颗粒的成本较高,占用内存约高的算法,用 ASIC 实现起来成本就越高。这样做法虽然在一个项目的初期比较奏效,但随着项目市值越来越高,ASIC 厂商的投入越来越大,久而久之最终 ASIC 都会出现。
Bandwidth 在芯片生产的费用比 memory 要高的多,因此我们认为 bandwidth hard 的挖矿算法在对抗 ASIC 中会更有效。我们对哈希算法做以下修改:
- 令 K 为 Keccek 哈希算法,u(n) 为计算哈希时所用的 block header,n 为挖矿循环的 nonce 值,u(n) 的长度为 2048。正常挖矿算法是对不同的 n,循环计算 K(u(n))。
- 这个算法可以很容易延伸为:令 A 为一个 2048 x 2048 的满秩矩阵,循环计算 K(A*u(n)), 这里 * 代表矩阵乘法。注意,A 是一个大约 4mb 的表,这样做的好处是,不但矿机要将此表读入,每一个 nonce 都要用表中的数据进行计算。这就是本算法实现 bandwidth hard 的核心。
- 以上方式还可以推而广之,令 A1,…,Am 为 m 个不同的满秩矩阵,v 为一个固定的矢量。可循环计算:K(An*…*A2*(A1*u(n)+v)+v…))。这就要求每循环一次 nonce,都要重复读取并计算这些矩阵乘法。
- 考虑到科技的进步,相关硬件价格会变得越来越廉价。因此,CZZ 挖矿采取以下机制:
- 初始表为 32mb
- 每 100 万个区块高度,表的容量翻倍。
这样做的目的是为了让表的增长速度,不慢于如 SRAM 技术迭代速度,从而尽量保证显卡矿机的长期挖矿效率。
标签:hard,ClassZZ,ASIC,算法,哈希,算力,挖矿 来源: https://blog.csdn.net/TsingHua2008/article/details/101040693