Skip to content

Latest commit

 

History

History
159 lines (18 loc) · 5.34 KB

x16rs_algorithm_description.md

File metadata and controls

159 lines (18 loc) · 5.34 KB

X16RS 算法设计详解及GPU代码说明

X16RS 算法是 Hacash 原创发明的强随机性工作量证明算法,基于 X16R 改进而来,其设计目标有二:

  1. 全新算法,初期仅能使用CPU采矿,让现有GPU显卡挖矿套件和ASIC专业设备无法直接使用,降低货币产出分配的集中度,让早期个人参与者能使用消费级通用计算设备合理参与货币分配;
  2. 在一定期限(比如5~10年)或更长时期内阻止ASIC专业设备的出现,延缓采矿集中度,让货币分配更加公平和分散;

但是,Hacash 不认为像门罗币一样通过不断改换挖矿算法来永久禁止ASIC设备出现的方案是合理、有效的。无论以哪种方式来改变挖矿算法都会引入严重的中心化决策问题,采矿成本方面的信息也无法以市场机制运作来保持稳定,长期资本因无法计算回报从而不会投入,整个网络和经济体持续面临严重的技术和社区分裂压力。本质上,当采矿算力难度上升到一定高度之后,个人用户即使采用消费级设备和生活用电参与采矿也将无利可图,因为这完全无法与大规模专业矿场的规模优势进行竞争。所以,Hacash 认为,挖矿算法的设计只需要在项目早期确保个人的公平参与和货币的分散分配即可,在社区规模、市值体量及算力难度达到一定水平之后,无论如何,采矿业务都会走入专业化和规模化的阶段,与这种经济规律持续抗争是徒劳无益的,甚至是完全有害的。

X16RS 相比于 X16R 算法的具体改进如下:

  1. 算法轮次并不总是16轮,而是从 1 轮开始,每50000个区块(约半年时间)增加 1 轮,约持续 8 年时间不断增加,最终达到 16 轮后固定为 16 轮;
  2. 每轮选择的算法并不预先确定,而是从上一轮结果哈希值的最后一位与16求余,实时选择出下一轮算法,让每次运算过程最大程度随机不可预测;

以上两处随机性的改进,让 ASIC 专用电路必须多次处理条件选择分叉和不确定循环次数,电路设计面临很大的硬件冗余空间和运行空闲时间,在设计实现上将会导致制造成本高昂且运行效率低下。并由于出货量的巨大差别,使其制造成本无法轻易达到通用 CPU 规模化生产的优化程度,针对 X16RS 算法的专用硬件电路芯片从经济上难以行得通,也就不会出现。但这并没有100%永远排除ASIC出现的可能性,就算最终(比如10年以后)市场出现了专业硬件采矿设备,Hacash 也不打算修改算法以阻止这种情况,理由上文已述。

这种“抗ASIC算法”也带来另外一个好处,那就是极大的降低了GPU显卡并发运算相比于CPU多核计算在采矿效率上的差距。经过开发组有限几种设备的实测,在采购价格大致相等的情况下,采用GPU设备执行挖矿算法的效率与CPU计算效率并无数量级上的差距,甚至还不如某些多核计算优化的CPU的功耗成本低。原因是随机性强且逻辑判断分支多的代码并不适宜 GPU 的“简单逻辑、大量并发”的硬件设计特征。

由于这种算法设计包含了大量的随机性,每次哈希计算所选择的 sha3 算法都不同,且每种 sha3 算法所需要的计算时间也存在很大差异,其外在表现则为算力统计很不稳定,经常出现前后两次算力统计出现几倍甚至十几倍的差距。这种随机性很强的副作用给统计设备算力带来了某种难度,大家只能根据长时间的算力统计结果估计出一个近似值,而无法做到稳定和精确。算力越低的设备这种统计不精确和不稳定的程度越高。

总的来说,除非对GPU显卡运算的代码进行十分深入的、契合硬件底层的目标平台针对性专业优化,否则其采矿效率与多核CPU没有显著差异,甚至在同样设备价格和能耗成本之下,不如多核、多路CPU平台的效率。同样,暂时也看不到 ASIC 设备出现的可能性。

由于显卡计算硬件、软件平台及目标代码、编译环境的多样性,导致不同硬件和平台都需要针对性的编码和部署,要完善一整套适配不同平台和环境的显卡采矿解决方案,必将耗费极大的开发时间和精力。由于 Hacash 仍然有其它很多更重要、更核心的特性需要开发实现,我们并不打算在GPU显卡采矿软件上做全面而深入的开发、测试和优化。这方面的工作将依赖于开源社区的贡献,或交由专业组织、商业采矿机构的研发投入。

我们提供一份针对 OpenCL 平台的 GPU 采矿基础代码,由已存在的 X16R 显卡算法修改而来,经过简单测试,可以正确运行。但这并不意味着所有显卡设备或GPU平台都可以使用这一套代码来运行,也并不意味着使用此套 GPU 代码能够取得相比 CPU 更高的采矿效率。挖矿是专业事务,其效率依赖于能源成本和研发投入。

相关代码已提交至 Github 开源: