Mining

驗證 ethash 輸出乙太坊區塊雜湊

  • February 20, 2019

在 Ethash wiki上,它提到可以使用 16MB 的驗證記憶體來驗證塊雜湊而不生成完整的 DAG,但沒有關於如何完成的更多細節。

驗證算法是什麼?

編輯:我不是在尋找塊雜湊可訪問的 Solidity 解決方案。我正在尋找一種方法來驗證 Ethash 輸出在鏈下是否有效。

我在 Ethash wiki 找到了答案

def calc_dataset_item(cache, i):
   n = len(cache)
   r = HASH_BYTES // WORD_BYTES
   # initialize the mix
   mix = copy.copy(cache[i % n])
   mix[0] ^= i
   mix = sha3_512(mix)
   # fnv it with a lot of random cache nodes based on i
   for j in range(DATASET_PARENTS):
       cache_index = fnv(i ^ j, mix[j % r])
       mix = map(fnv, mix, cache[cache_index % n])
   return sha3_512(mix)

def hashimoto_light(full_size, cache, header, nonce):
   return hashimoto(header, nonce, full_size, lambda x: calc_dataset_item(cache, x))

不是用 生成完整的數據集calc_dataset_item,而是動態生成單個雜湊循環所需的數據集項

此程式碼嘗試:

function block_hash_validation(uint blockNumber, bytes32 blockHash) 
       constant returns(bool isValid) 
   {
       return (block.blockhash(blockNumber) == blockHash);
   }

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/37418