Dapp-Development

testrpc 和 EtherSim 有什麼區別?

  • October 3, 2016

這些都是出於開發目的的“人造區塊鏈”。在 truffle 開發時,這兩種工具都被很多人推薦為一個很好的工具。我什至認為兩者都是由同一個人開發的。

但我真的很難找到使用哪一個。教程聲稱 EtherSim 將取代 testrpc,但被引用的儲存庫連結回 testrpc。還有另一個 EtherSim 儲存庫。所有這些似乎都在過去一周內更新。

確實是邊境:)

編輯:沒有足夠的聲譽來發布相關連結……其中兩個就足夠了。Google EtherSim 0.3.0 找到我提到的第二個 EtherSim 儲存庫。

我是ethereumjs-testrpc的作者,並且在早期的 Ethersim 上做了很多工作,這個 commit以下 commits這個 unmerged PR證明了這一點。Ethersim 由 Iuri Mathias 創立,作為eth-testrpc的替代品,也主要由我編寫,改編自 Stephan George 的腳本。eth-testrpc是第一個可用的 testrpc 應用程序,但它是用 Python 編寫的,並且缺少許多功能。因為它是用 Python 編寫的,所以很難維護和安裝(至少對我來說),而且因為我沒有太多的 Python 經驗,所以我無法解決一個非常煩人的 bug;不幸的是,它會在重負載下死於競爭狀態。當我準備在 2015 年為 Devcon 1 展示一個應用程序時,這變得非常有問題,因為 eth-testrpc 不能可靠地執行我的單元測試,從而阻礙了開發。一怒之下,我選擇用 Javascript 重寫 eth-testrpc,這就是我發現 Ethersim 的時候。

當我發現 Ethersim 時,可悲的是它還沒有完成,它不支持上述單元測試的足夠請求。經過幾個深夜,我完全重寫了 Ethersim,保留了 Iuri 的文件結構,但重寫了內部結構以更好地與ethereumjs-vm集成。Iuri 最終接受了這個 PR,從那時起 Ethersim 就一直在反對這種重寫。

繼續讓 Ethersim 變得更好,我送出了這個 PR,上面提到過。這個 PR 使塊處理更好,並包括兩個特殊的 RPC 請求(evm_snapshotevm_revert),這可以顯著加快單元測試,如果合併,將使 Ethersim 能夠快照特定塊的鏈狀態並稍後恢復到該鏈狀態。

不幸的是,這個 PR 從未被合併。隨著時間的推移,ethereumjs社區決定他們想要使用其中一個項目,無論是 Ethersimmaster還是我在這個新 PR 中所做的更改,因為它們與 ethereumjs-vm 密切相關。在討論之後,他們選擇使用我的叉子,因為它當時似乎有更積極的發展。

自從這個分叉以來,他們的功能集已經有了很大的不同,ethereumjs-testrpc消耗了 Ethersim 的大部分功能(當然,我在這裡有偏見,但我強烈建議您比較他們的 README)。在撰寫本文時,TestRPC 中存在以下 Ethersim 中不存在的功能:

  • 快照和恢復鏈狀態,顯著加快單元測試。
  • 支持高畫質錢包的地址創建,可用於與 Metamask 等其他應用程序集成
  • 確定性地址創建,對調試有用
  • 可選地在間隔而不是instamining上處理塊,模擬真實的區塊鏈
  • 立即從另一個目前執行的鏈(即geth)分叉,可用於廣泛的分析和腳本編寫活動
  • miner_start使用和啟動和停止探勘miner_stopgeth對於腳本和單元測試也很有用
  • 可配置的gas價格和gas限制
  • 支持更多 RPC 請求
  • 模擬真實區塊鏈的更好預設值

據我從README中得知,Ethersim 沒有 testrpc 不支持的任何功能。

所以TL;DR,儘管我可能聽起來有偏見,但 ethereumjs-testrpc 是一個功能更全面的區塊鏈模擬器,並且具有更廣泛的用途。他們都有相同的目標,但 ethereumjs-testrpc 的發展更加活躍。

**編輯:**不知怎的,我在回答自己之前錯過了卡爾的回答,不知道怎麼回答。這至少給出了他們的發展歷史以及為什麼會發生分叉。

這裡的問題是有一堆名為 EtherSim 和 TestRPC 的儲存庫,其中許多現在已棄用。目前,當您說 EtherSim 和 TestRPC 時,您可能指的是以下兩個儲存庫之一:

兩者的區別僅在於保養的好壞。在撰寫本文時,ethereumjs/testrpc更新時間比iurimatias/EtherSim.

只需使用最完整且維護良好的 Javascript 乙太坊節點即可。現在是ethereumjs/testprc

**注意:**看起來 Nexusdev 的人正在開發一個更新的分支EtherSimhttps://github.com/nexusdev/EtherSim

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