工作量证明哈希函数
区块链的工作量证明挖矿算法使用一类特殊的计算密集型和内存密集型哈希函数。这类哈希函数被设计成消耗大量计算资源和内存,并且很难在硬件设备上实现,例如 FPGA 集成电路或 ASIC 矿机,因此被称为“抗 ASIC”哈希函数。
许多哈希函数专为工作量证明挖矿算法而设计,例如 ETHash、Equihash、CryptoNight 和 Cuckoo Cycle。这些哈希函数的计算速度很慢,通常需要使用 GPU 硬件(由 NVIDIA GTX 1080 等显卡组成的矿机)、强大的 CPU 硬件(如 Intel Core i7-8700K),以及大量高速 RAM(如 DDR4 芯片)。这些挖矿算法旨在通过扶持小型矿工(家庭用户和小型矿场)并限制挖矿行业巨头的力量(它们有能力建设大型矿场和数据中心),从而尽量减少挖矿的中心化。大量小型参与者比少量大型参与者更有利于去中心化。
大型矿业公司的主要武器通常被认为是 ASIC 矿机,因此现代加密货币的设计通常会采用使用抗 ASIC 哈希算法的工作量证明挖矿,或采用权益证明共识协议。
ETHash
下面简要说明以太坊区块链所使用的 ETHash 工作量证明挖矿哈希函数背后的思路。
- ETHash 是以太坊区块链中的工作量证明哈希函数。它是一种内存密集型哈希函数(快速计算需要大量 RAM),因此被认为具有抗 ASIC 能力。
ETHash 如何工作?
- 为每个区块计算一个“种子”(基于截至当前区块的整条区块链)。
- 根据种子计算一个 16 MB 的伪随机缓存。
- 从缓存中提取一个用于挖矿的 1 GB 数据集。
- 挖矿过程会将数据集中的随机切片一起进行哈希。
了解有关 ETHash 的更多信息:https://github.com/ethereum/wiki/wiki/Ethash、https://github.com/lukovkin/ethash。
Equihash
下面简要说明 Zcash、Bitcoin Gold 和其他一些区块链所使用的 Equihash 工作量证明挖矿哈希函数背后的思路。
- Equihash 是 Zcash 和 Bitcoin Gold 区块链中的工作量证明哈希函数。它是一种内存密集型哈希函数(快速计算需要大量 RAM),因此被认为具有抗 ASIC 能力。
Equihash 如何工作?
- 使用 BLAKE2b,根据区块链中截至当前区块的先前区块计算一个 50 MB 的哈希数据集。
- 在生成的哈希数据集上求解“广义生日问题”:从 2097152 个字符串中选取 512 个不同的字符串,使它们的二进制 XOR 结果为零。目前已知的最佳解法 Wagner 算法具有指数时间复杂度,因此需要大量内存和计算。
- 对解执行双重 SHA256,计算最终哈希。
了解有关 Equihash 的更多信息:https://www.cryptolux.org/images/b/b9/Equihash.pdf、https://github.com/tromp/equihash。
关于抗 ASIC 哈希函数的更多信息
有关抗 ASIC 哈希函数的更多信息,请参阅:https://github.com/ifdefelse/ProgPOW。