Mix
MIX算法到底是什麼
我正在嘗試評估雜湊探勘的 MIX 塊的確切實現。有很多資訊(可能太多),但找不到任何描述 MIX 功能的詳細實現的資訊。
這是一個圖表,它解釋了我到底在尋找什麼:
我對實現“混合功能”塊的確切步驟感興趣。
這是我認為您正在尋找的基本 Python 實現,來自Ethash wiki。您需要從頁面的其他位置獲取各種常量。
def calc_dataset(full_size, cache): return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] 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)
fnv()
呼叫是Fowler –Noll–Vo 雜湊函式。要獲得實際可用的工作版本,請查看 Geth 的
algorithm.go
. 再次,generateDatasetItem()
可能是您正在尋找的。
這是在範例 GPU 硬體上執行 Ethash 的一個非常好的分析: https ://github.com/LeastAuthority/ethereum-analysiss/blob/master/PoW.md