在维基上,它提到可以使用一个16 no的验证缓存来验证块哈希,而不需要生成完整的DAG,但是没有进一步的细节说明如何做到这一点。
验证算法是什么?
编辑:我并不是在寻找可以访问块散列的可靠解决方案。我正在寻找一种方法来验证一个Ethash输出是否是有效的。
发布于 2018-01-25 23:59:30
我在Ethash上找到了一个答案这里。
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生成完整数据集不同,只动态地生成单个哈希周期所需的数据集项。
发布于 2018-01-25 03:49:05
此代码尝试:
function block_hash_validation(uint blockNumber, bytes32 blockHash)
constant returns(bool isValid)
{
return (block.blockhash(blockNumber) == blockHash);
}希望能帮上忙。
https://ethereum.stackexchange.com/questions/37418
复制相似问题