10

These are both "faux-blockchains" for development purposes. Both are recommended from various people as a good tool when developing in truffle. And I even think both are being developed by the same people.

But I'm really having trouble finding which one to use. This tutorial claims that EtherSim will replace testrpc, but the repository being referenced links back to testrpc. There's also another EtherSim repository. All of these seem to be updated in the past week.

Frontier indeed :)

EDIT: Don't have enough reputation to post the relevant links… Two of them will have to suffice. Google EtherSim 0.3.0 to find the second EtherSim repository I mentioned.

  • Maybe you could rephrase your question to find out the differences between ethersim and testrpc? I see a lot potential in this question. – Waqar Lim Mar 18 '16 at 13:35
6

I'm the author of the ethereumjs-testrpc, and did much of the work on Ethersim during its early days, evidenced by this commit, the following commits and this unmerged PR. Ethersim was started by Iuri Mathias as an alternative to eth-testrpc, also written primarily by me, adapted from a script by Stephan George. eth-testrpc was the first ever testrpc application available, but it was written in Python and missing many features. Because it was written in Python it was hard to maintain and install (for me at least), and because I didn't have much Python experience I couldn't reconcile an extremely annoying bug; it would, unfortunately, die of a race condition under heavy load. This became extremely problematic when I was preparing to demo an application for Devcon 1 in 2015, as eth-testrpc wouldn't reliably run my unit tests, stunting development. In a fit of rage I chose to rewrite eth-testrpc in Javascript, which is when I found Ethersim.

Ethersim was woefully unfinished when I found it, not supporting enough requests for the unit tests mentioned above. After a few late nights I had completely rewritten Ethersim, keeping Iuri's file structure but rewriting the internals to better integrate with ethereumjs-vm. Iuri eventually accepted this PR, and Ethersim has been working against this rewrite ever since.

Continuing to make Ethersim better, I submitted this PR, mentioned above. This PR made block handling better, and included two special RPC requests (evm_snapshot and evm_revert) which could significantly speed up unit tests and, if merged, would give Ethersim the ability snapshot the chain state at a specific block and revert back to that chain state later.

Unfortunately, this PR was never merged. As time went on, the ethereumjs community decided they wanted to consume one of these projects, either Ethersim master or my changes in this new PR, as they were so closely tied to ethereumjs-vm. After discussing it, they chose to consume my fork as it seemed to have had more active development at the time.

Since this fork, their feature set has greatly diverged, with ethereumjs-testrpc consuming most if not all of Ethersim's features (I'm biased here, of course, but I highly encourage you to compare their README's). At the time of this writing, the following features exist in the TestRPC that do not exist in Ethersim:

  • Snapshotting and reverting the chain state, speeding up unit tests significantly.
  • Address creation with HD wallet support, useful for integration with other applications like Metamask
  • Deterministic address creation, useful for debugging
  • Optionally processing blocks on an interval instead of instamining, simulating a real blockchain
  • Instantly forking from another currently running chain (i.e., geth), useful for a wide range of analysis and scripting activities
  • Starting and stopping mining with miner_start and miner_stop, like geth, also useful for scripting and unit tests
  • Configurable gas price and gas limit
  • Many more RPC requests supported
  • Better defaults for simulating a real blockchain

As far as I can tell from the README, Ethersim does not have any features that the testrpc does not support.

So the TL;DR, as biased as I might sound, is that ethereumjs-testrpc is a more fully featured blockchain simulator and has a wider array of uses. They both have the same goals, but ethereumjs-testrpc has seen more active development.

EDIT: Somehow I missed Karl's answer before answering myself, not sure how. This at least gives a history of their development and why a fork occurred.

6

The issue here is there are a bunch of repositories called EtherSim and TestRPC, many of them now deprecated. When you say EtherSim and TestRPC currently you are likely referring to either one of these two repositories:

The difference between the two is only how well maintained they are. At the time of writing ethereumjs/testrpc has been updated more recently than iurimatias/EtherSim.

Just go with the most complete and well maintained Javascript Ethereum node and you'll be good. Right now that is ethereumjs/testprc

Note: It looks like the guys at Nexusdev are working on a fork of EtherSim that's a lot more up-to-date. https://github.com/nexusdev/EtherSim

0

If things are as they were a couple of months ago, testRPC was being replaced by Ethersim (or maybe they found a use for the two to coexist). Either way, I know more about Ethersim than I do testRPC. Ethersim currently creates an artificial blockchain program and runs your contract code through its blockchain (when properly configured), and then enables you to run tests on the output from mocha.js...it's quite awesome actually. In any case...pretty much all the major Ethereum frameworks to my knowledge use Ethersim...Truffle, Embark, Dapple all are using it. Very useful tool.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.