EIP-3372: 用于 Ethash 的 5 个 FNV 素数
Authors | mineruniter969 (@mineruniter969), mineruniter969 <mineruniter969@tutanota.com> |
---|---|
Created | 2021-03-13 |
Discussion Link | https://ethereum-magicians.org/t/eip-3372-apply-minor-modifications-to-the-ethash-algorithm-to-break-current-asic-implementations-eip-969-resubmission/5655 |
简单总结
在 ethash 算法中引入 5 个新的 FNV 素数。
摘要
本 EIP 旨在通过更改 fnv
常量,将当前的 ASIC 实现从网络中移除,以保持 Ethereum 网络的安全和健康。
动机
ASIC 为 Ethereum 网络带来了严重的中心化风险。如果我们不摆脱它们,小型 GPU 矿工将被迫退出 Ethereum 挖矿,因为 EIP-1559 将使他们亏本挖矿。 此外,ASIC 的生产将仅集中在一两个参与者手中,这将使 Ethereum 的哈希率中心化。 此外,值得注意的是,Ethash ASIC 机器成本为 1 万美元以上,而 GPU 的价格低于 1000 美元。
使用 GPU,矿工可以切换到其他挖矿算法,但使用 ASIC,这是不可能的。 保持一切原样几乎可以肯定是对 Ethereum 2.0 的非常艰难的(从矿工的角度来看)整合。
简而言之,需要此 EIP 通过避免 ASIC 业务来保持 Ethereum 网络的稳定和去中心化。
规范
如果 block.number >= ETHASH11_BLKNUM
,则激活 ethash1.1
算法版本。
ethash1.1
在此更改之前,fnv
哈希函数在整个 hashimoto
函数中使用。 fnv
在所有步骤中都是相同的,ethash1.1
将引入额外的 fnvA
、fnvB
、fnvC
、fnvD
和 fnvE
函数。 所有这些函数都将具有不同的 FNV 常量。
// Previously used FNV prime
#define FNV_PRIME_0 0x1000193
// New FNV primes
#define FNV_PRIME_A 0x10001a7
#define FNV_PRIME_B 0x10001ab
#define FNV_PRIME_C 0x10001cf
#define FNV_PRIME_D 0x10001e3
#define FNV_PRIME_E 0x10001f9
在本 EIP 之前,Ethash 的所有部分都在使用 fnv
(以下称为 fnv0
)函数。 自本 EIP 引入以来:
fnvA
替换 DAG 项目选择步骤中的fnv0
fnvB
替换 DAG 项目混合步骤中的fnv0
fnvC(fnvD(fnvE
替换压缩混合步骤中的fnv0(fnv0(fnv0(
- DAG 生成步骤中的
fnv0
应保持不变。
理由
对于 以太坊的未来,ASIC 矿工已经成为一种威胁,并且需要在造成额外损害之前通过硬分叉将它们从网络中移除。 EIP-3372 提出了执行此操作所需的最低限度,并且不会像 Ethash 2.0 那样影响 ETH 利益相关者或网络。 ASIC 构成的威胁是法律、社会、道德、技术、货币和环境方面的。 随着我们越来越接近合并,ASIC 将像过去一样攻击网络和开发人员个人,因为矿工将始终追求利润。
在法律上和社会上,ASIC 以前一直是一种威胁和麻烦。 正如 Hudson 所描述的那样,Linzhi 亲自攻击了 EF 和开发人员,试图散布谎言和虚假信息,同时在围绕 EIP-1057 的讨论中发出法律威胁。 他的帐户 here 用他自己的话说
ASIC 制造商 Linzhi 既向我施压又撒谎
通过他们在下图所示的对员工的攻击和骚扰:
在社会和道德上,Ethereum 社区必须对针对其开发人员的个人攻击采取零容忍政策。 正是因为核心开发人员,Ethereum 才具有价值,社区不能允许大公司自由地攻击他们个人,并且必须寻求保护每个开发人员,因为他们是保持是以太坊保持活力的资源。 在此事件中,多位开发人员被“烧毁”。 随着我们加速合并,ASIC 公司可能会重复他们的行为,并在寻求法律选择的同时再次攻击开发人员个人。 这不仅可以从他们在 EIP-1057 期间的行为中看出,还可以从最近围绕 EIP-969 的讨论中看出,他们发出的法律威胁导致该 EIP 的支持者退出,并迫使我匿名提交此 EIP。 Ethereum 不能允许其参与者在不受惩罚的情况下受到威胁,这是一场必须现在发生的斗争,因为它们现在很弱而不是预合并时更强大,这将导致合并延迟并损害 Ethereum 的价值。
ASIC 有最大的动机和资源来实施不良行为,因为它们集中在矿场中,这就是 Vitalik 设计 ETH 具有 ASIC 抵抗性的原因,因为 ASIC 已经破坏了 BTC 的去中心化原则。 它们对网络的权力和控制力与日俱增。 ASIC 违反了 Ethereum 的基本原则,Ethereum 提倡由普通人运行的去中心化系统,而不是大型仓库的单一所有者。 F2Pool 主要由 ASIC 矿场组成,已成为第三大矿池,控制着大约 10% 的哈希率。 他们的农场可以在他们的网页上查看。 2020 年 11 月,他们拥有 23TH/s,但今天他们拥有 45.6 TH/s。 这是 4 个月内翻了一番,并且随着更多 ASIC 上线,它们的增长正在加速。 ASIC 正在成为一种威胁,很快将主导网络,现在必须采取行动来阻止它们。
长期以来,人们都知道 F2Pool 上的 ASIC 是 BTC 网络上的“不良行为者”。 众所周知,他们会操纵市场并倾销 BTC 以操纵价格(由于这是一个新帐户,我无法发布源链接)。 一旦这些 ASIC 发现它们即将在合并前损失数百万美元,它们会怎么做? Ethereum 不仅仅是一个网络,它还是一个社区,他们将利用他们的财务资源并投入数百万美元来延迟合并,因为他们会启动一个又一个的法律案件。 他们将攻击开发人员和社区,因为他们试图榨取最后一美元。
Ethereum 基于反 ASIC 的原则成立的原因是 Vitalik 已经看到了 ASIC 对 BTC 网络造成的损害,因为他们追求利润而不是网络的改进。 GPU 矿工是去中心化和无组织的,这使得它们比在一个中央公司的仓库受到的威胁要小得多,而该公司位于法律体系之外,因此不对不良行为负责。
EIP-3372 还可以保护环境。 合并后,GPU 将进入二级市场或转移到其他币种。 但是,ASIC 将成为垃圾。 随着 ASIC 的生产越来越多,Ethereum 增加了其环境足迹。 尽管公开表示正在加速合并,但这些 ASIC 的大规模生产数量却在增加。 显然,这些 ASIC 制造商和买家要么不了解加速合并,要么计划延迟合并。 因为他们倾销他们的 ETH,所以他们对网络没有任何兴趣,除了他们可以从中榨取的钱,如果通过制造麻烦他们可以给自己多一天的时间,那么他们就会这样做。
最后,Ethereum 一直致力于追求“最低发行量”。 通过减少可能对网络构成威胁的矿工数量,Ethereum 还可以减少它需要支付的保护费用。 正在准备一些 EIP 以在 EIP-1559 之后增加矿工收入,以防出现威胁。 EIP-3372 消除了为安全性支付更多费用的需要,并允许减少矿工的报酬,而不会损害网络的安全性。 随着我们越来越接近合并,社区必须减少攻击媒介,以降低合并本身的成本并最大限度地提高网络的安全性。 社区已经为保护支付了太多费用,通过减少威胁,我们可以减少这种成本。 ASIC 仓库矿场正在倾销他们赚取的所有 ETH,这正在抑制 ETH 的价格。 虽然很少见,但一些个人 GPU 矿工正在参与质押,或者已经加入社区进行开发或我们的金融活动。 因此,它们对社区的价值高于未来的垃圾仓库。 Ethereum 社区无需继续为即将过时的硬件支付费用,这些硬件最终将进入垃圾填埋场。
技术概述
Ethash 1.1 会在哈希计算阶段用五个新的素数替换唯一的 FNV 素数。 用于 DAG 生成的素数保持不变,而所有其他素数都会更改。 这不会阻止 ASIC 公司创建适应的新 ASIC,但由于非常接近合并,它们不太可能这样做,即使它们这样做,它们也不太可能生产足够的产品再次构成威胁。 FNV 常数的选择基于 https://tools.ietf.org/html/draft-eastlake-fnv-14#section-2.1 上提供的正式规范
对于延迟提交此 EIP 的理由,我们深表歉意。 正如社区可能知道也可能不知道的那样,由于受到 ASIC 公司的法律攻击,最初的支持者被迫停止从事此 EIP 的工作。 我们花了这么长时间才审查他的工作并找到新的支持者。 为了保护自己,我们匿名提交此文件,并要求社区帮助我们努力保持匿名,并考虑到我们面临的情况和威胁,给予一些宽容。
向后兼容性
如果针对 ethash 优化的挖矿硬件将 fnv
常量烘焙到硬件中并且无法更改,则可能不再有效。
测试向量
{
"first": {
"nonce": "4242424242424242",
"mixHash": "aa6a928db9b548ebf20fc9a74e9200321426f1c2db1571636cdd3a33eb162b36",
"header": "f901f3a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a09178d0f23c965d81f0834a4c72c6253ce6830f4022b1359aaebfc1ecba442d4ea056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808080a058f759ede17a706c93f13030328bcea40c1d1341fb26f2facd21ceb0dae57017884242424242424242",
"seed": "0000000000000000000000000000000000000000000000000000000000000000",
"result": "3972318778d2af9d3c5c3dfc463bc2a5ebeebd1a7a04392708ff94d29aa18c5f",
"cache_size": 16776896,
"full_size": 1073739904,
"header_hash": "2a8de2adf89af77358250bf908bf04ba94a6e8c3ba87775564a41d269a05e4ce",
"cache_hash": "35ded12eecf2ce2e8da2e15c06d463aae9b84cb2530a00b932e4bbc484cde353"
},
"second": {
"nonce": "307692cf71b12f6d",
"mixHash": "4a2ef8287dc21f5def0d4e9694208c56e574b1692d7b254822a3f4704d8ad1ba",
"header": "f901f7a01bef91439a3e070a6586851c11e6fd79bbbea074b2b836727b8e75c7d4a6b698a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794ea3cb5f94fa2ddd52ec6dd6eb75cf824f4058ca1a00c6e51346be0670ce63ac5f05324e27d20b180146269c5aab844d09a2b108c64a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefd880845511ed2a80a0e55d02c555a7969361cf74a9ec6211d8c14e4517930a00442f171bdb1698d17588307692cf71b12f6d",
"seed": "0000000000000000000000000000000000000000000000000000000000000000",
"result": "5ab98957ba5520d4e367080f442e37a047cfd9d2857b6e00dd12d82900d108a6",
"cache_size": 16776896,
"full_size": 1073739904,
"header_hash": "100cbec5e5ef82991290d0d93d758f19082e71f234cf479192a8b94df6da6bfe",
"cache_hash": "35ded12eecf2ce2e8da2e15c06d463aae9b84cb2530a00b932e4bbc484cde353"
}
}
安全考虑
此更改不存在已知的安全问题。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
mineruniter969 (@mineruniter969), mineruniter969 <mineruniter969@tutanota.com>, "EIP-3372: 用于 Ethash 的 5 个 FNV 素数 [DRAFT]," Ethereum Improvement Proposals, no. 3372, March 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3372.