Go-Ethereum

什麼是ethash共享模式?

  • February 3, 2017

我紅色了 ethash 原始碼並看到了這段程式碼:

func CreatePoW(config *Config) (pow.PoW, error) { switch { case config.PowFake: glog.V(logger.Info).Infof("ethash used in fake mode") return pow.PoW(core.FakePow{}), nil case config.PowTest: glog.V(logger.Info).Infof("ethash used in test mode") return ethash.NewForTesting() case config.PowShared: glog.V(logger.Info).Infof("ethash used in shared mode") return ethash.NewShared(), nil default: return ethash.New(), nil } }

共享模式是什麼意思?ethash 何時處於共享模式?

我在 go-ethereum gitter 頻道上從Péter Szilágyi那裡得到了答案,所以我貼在這裡給路過的人。

如果我沒記錯的話,“共享 PoW”只在我們的測試中使用。這個想法是生成一個 PoW DAG,即使是一個小的用於測試的 DAG 也需要時間。由於我們有數十萬個隨機測試,即使是很小的時間也會增加巨大的測試執行時間,這完全是浪費,因為它們無論如何都使用相同的 DAG。共享 PoW 背後的想法是有一個在所有實例之間共享的全域 DAG 實例,因此當您執行 ethash.NewShared 時,它只會在目前不存在時生成一個新實例,否則它將返回該實例。最初所有的測試 dag 都是這樣工作的,我們需要在引入一些實際上需要多代 dag 的測試時明確說明。

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