Mining
驗證 ethash 輸出乙太坊區塊雜湊
在 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); }
希望能幫助到你。