http://www.7klian.com

ProgPoW算法存在的裂痕,意味着什么呢?以太坊ASIC挖矿已不行否决?

而在ASIC哈希计较中,在步调1中需要一个hash_mix挪用,在步调2中则要挪用<code>keccak_1600和keccak_progpow_256,在步调3中将挪用<code>keccak_progpow_64。

我们需要较量keccak_progpow_64 row中的<code>D和2^64。简朴地说,更大的<code>D会使ASIC更有利可图。预计阈值门槛是坚苦的,但我认为今朝的难度 (> 2^50)是足够大的。 Demo演示位于此存储库中。 $ git clone https://github.com/kik/progpow-exploit.git $ cd progpow-exploit $ mkdir build $ cd build $ cmake .. $ make $ ./test/ethash-test --gtest_filter=asic.search在此演示中,seed被截断为24位宽度,以便在CPU上运行。拜见代码。
这里界说了search_asic

然后,执行以下3个步调:

对此,以太坊研发人员Philippe Castonguay评论称:

ProgPow存在一个设计缺陷: 64位seed太小了,这答允ASIC无需存储会见即可计较哈希。劈头实现感激chfast提供了可读的实现!

我们来看看kikx披露的细节吧:

测试代码是简朴的。

搜索extra_nonce,以便<code>header_hash满意难度条件;

ProgPoW的设计裂痕

第一步,为牢靠seed和<code>block_number计较mix_hash。由于<code>mix_hash被设计为seed和<code>block_number的函数,所以我们获得一个有效的三元组(seed,mix_hash,block_number)。此刻,我们的方针是找到满意以下两个条件的<code>header_hash和nonce:<ol><li></li><li>(A) <code>keccak_progpow_64(header_hash, nonce) == seed;

将seed牢靠为任何64位值,然后计较<code>mix_hash = hash_mix(block_number, seed);

那这一裂痕到底是肿么一回事呢?

由于hash_mix在我们的ASIC计较中仅被挪用一次,因此我们可以利用主机CPU来计较<code>hash_mix。而其它函数都是keccak哈希函数,不需要memory存储,而且可以在ASIC上轻松计较。

(B) keccak_progpow_256(header_hash, seed, mix_hash) <= boundary;</li></ol>记着,我们可以通过修改特另外随机数(在以太坊中利用ExtraData)来生成任意数量的header哈希。因此,条件(B)很容易在步调2中完成。此刻,我们有一个牢靠的<code>(header_hash, seed, mix_hash, block_number),但nonce是自由的。 最后,步调3扫描<code>nonce以查找条件(A)。由于seed只有64位长度,所以条件(A)仅提供64位安详性,而且可以由ASIC执行步调3。<h4>计较本钱</h4>有四个函数,<code>keccak_1600,keccak_progpow_64,<code>hash_mix以及keccak_progpow_256。本钱的计较,可通过计较所需函数的挪用来实现,这取决于网络难度<code>D。
ProgPoW 哈希函数被界说为: result hash(const epoch_context& context, int block_number, const hash256& header_hash, uint64_t nonce) noexcept { const uint64_t seed = keccak_progpow_64(header_hash, nonce); const hash256 mix_hash = hash_mix(context, block_number, seed, calculate_dataset_item_2048); const hash256 final_hash = keccak_progpow_256(header_hash, seed, mix_hash); return {final_hash, mix_hash}; }ASIC友好计较假设给出了一个区块头block_header以及一个区块数<code>block_number。
在正常的哈希计较中,需要一个keccak_1600挪用,才气从<code>block_header计较出header_hash,并针对每个<code>nonce值依次挪用其他函数。

对付近期备受争议的ProgPoW

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读