В чем разница между testrpc и EtherSim?

Оба они являются «фальшивыми блокчейнами» для целей разработки. Оба рекомендуются разными людьми как хороший инструмент при разработке в трюфеле. И я даже думаю, что оба разрабатываются одними и теми же людьми.

Но мне действительно трудно найти, какой из них использовать. В этом руководстве утверждается, что EtherSim заменит testrpc, но указанный репозиторий ссылается на testrpc. Также есть еще один репозиторий EtherSim. Все они, похоже, были обновлены за последнюю неделю.

Действительно граница :)

РЕДАКТИРОВАТЬ: Недостаточно репутации, чтобы публиковать соответствующие ссылки… Двух из них должно хватить. Погуглите EtherSim 0.3.0, чтобы найти второй упомянутый мной репозиторий EtherSim.

Может быть, вы могли бы перефразировать свой вопрос, чтобы узнать разницу между ethersim и testrpc? Я вижу большой потенциал в этом вопросе.

Ответы (3)

Я автор ethereumjs-testrpc и проделал большую часть работы над Ethersim в первые дни его существования, о чем свидетельствует этот коммит , следующие коммиты и этот неслитный PR . Ethersim был запущен Юрием Матиасом в качестве альтернативы eth-testrpc , также написанной в основном мной, адаптированной на основе сценария Стефана Джорджа.eth-testrpcбыло первым доступным приложением testrpc, но оно было написано на Python и не имело многих функций. Поскольку он был написан на Python, его было трудно поддерживать и устанавливать (по крайней мере, для меня), а поскольку у меня не было большого опыта работы с Python, я не мог устранить чрезвычайно досадную ошибку; к сожалению, он умрет из-за состояния гонки при большой нагрузке. Это стало чрезвычайно проблематичным, когда я готовился к демонстрации приложения для Devcon 1 в 2015 году, поскольку eth-testrpc не мог надежно запускать мои модульные тесты, задерживая разработку. В приступе ярости я решил переписать eth-testrpc на Javascript, и тогда я нашел Ethersim.

Ethersim был ужасно незаконченным, когда я его нашел, не поддерживая достаточное количество запросов для модульных тестов, упомянутых выше. После нескольких поздних ночей я полностью переписал Ethersim, сохранив файловую структуру Юрия, но переписав внутренности для лучшей интеграции с ethereumjs-vm . В конце концов Юрий принял этот PR, и с тех пор Ethersim работает против этого переписывания.

Продолжая делать Ethersim лучше, я представил этот PR , упомянутый выше. Этот PR улучшил обработку блоков и включал два специальных запроса RPC ( evm_snapshotи evm_revert), которые могли бы значительно ускорить модульные тесты и, в случае слияния, давали бы Ethersim возможность сделать снимок состояния цепочки в определенном блоке и вернуться к этому состоянию цепочки позже.

К сожалению, этот PR так и не был объединен. Со временем сообщество ethereumjs решило, что хочет использовать один из этих проектов, либо Ethersim, masterлибо мои изменения в этом новом PR, поскольку они были тесно связаны с ethereumjs-vm. Обсудив это, они решили использовать мой форк, так как в то время он, похоже, активно развивался.

После этого форка их набор функций сильно разошелся: ethereumjs-testrpc потребляет большинство, если не все функции Ethersim (конечно, я необъективен, но настоятельно рекомендую вам сравнить их README ). На момент написания этой статьи в TestRPC существовали следующие функции, которых нет в Ethersim:

  • Создание моментальных снимков и изменение состояния цепочки, что значительно ускоряет модульные тесты.
  • Создание адреса с поддержкой HD-кошелька, полезно для интеграции с другими приложениями, такими как Metamask.
  • Создание детерминированного адреса, полезное для отладки
  • Опциональная обработка блоков с интервалом вместо инстаминга, имитирующая реальный блокчейн.
  • Мгновенное ответвление от другой работающей в данный момент цепочки (например, geth), полезно для широкого спектра действий по анализу и написанию сценариев.
  • Запуск и остановка майнинга с помощью miner_startи miner_stop, gethтакже полезно для сценариев и модульных тестов.
  • Настраиваемая цена газа и лимит газа
  • Поддерживается гораздо больше запросов RPC
  • Улучшенные значения по умолчанию для имитации реального блокчейна.

Насколько я могу судить из README , у Ethersim нет функций, которые не поддерживает testrpc.

Таким образом, TL;DR , как бы предвзято это ни звучало, заключается в том, что ethereumjs-testrpc — это более полнофункциональный симулятор блокчейна, который имеет более широкий спектр применений. У них обоих одни и те же цели, но ethereumjs-testrpc развивается более активно.

РЕДАКТИРОВАТЬ: Каким-то образом я пропустил ответ Карла, прежде чем ответить себе, не знаю, как. Это, по крайней мере, дает историю их развития и почему произошел форк.

Проблема здесь в том, что существует множество репозиториев под названием EtherSim и TestRPC, многие из которых устарели. Когда вы говорите EtherSim и TestRPC в настоящее время, вы, вероятно, имеете в виду один из этих двух репозиториев:

Разница между ними только в том, насколько хорошо они обслуживаются. На момент написания ethereumjs/testrpcбыл обновлен не так давно, как iurimatias/EtherSim.

Просто используйте самую полную и хорошо поддерживаемую ноду Javascript Ethereum, и все будет хорошо. Сейчас это ethereumjs/testprc.

Примечание. Похоже, что ребята из Nexusdev работают над EtherSimгораздо более современной вилкой. https://github.com/nexusdev/EtherSim

Если все обстоит так, как было пару месяцев назад, testRPC заменялся Ethersim (или, может быть, они нашли применение для их сосуществования). В любом случае, я знаю об Ethersim больше, чем о testRPC. В настоящее время Ethersim создает программу искусственного блокчейна и запускает код вашего контракта через свой блокчейн (при правильной настройке), а затем позволяет вам запускать тесты на выходе из mocha.js... на самом деле это довольно круто. В любом случае... почти все основные фреймворки Ethereum, насколько мне известно, используют Ethersim... Truffle, Embark, Dapple используют его. Очень полезный инструмент.

Truffle настоятельно рекомендует использовать ethereumjs-testrpc: truffle.readthedocs.io/en/latest/getting_started/client .