¿Cuál es la diferencia entre testrpc y EtherSim?

Ambas son "cadenas de bloques falsas" para fines de desarrollo. Ambos son recomendados por varias personas como una buena herramienta a la hora de desarrollar en trufa. E incluso creo que ambos están siendo desarrollados por las mismas personas.

Pero realmente estoy teniendo problemas para encontrar cuál usar. Este tutorial afirma que EtherSim reemplazará a testrpc, pero el repositorio al que se hace referencia se vincula a testrpc. También hay otro repositorio EtherSim. Todos estos parecen ser actualizados en la última semana.

Frontera de hecho :)

EDITAR: No tiene suficiente reputación para publicar los enlaces relevantes... Dos de ellos tendrán que ser suficientes. Google EtherSim 0.3.0 para encontrar el segundo repositorio de EtherSim que mencioné.

¿Tal vez podría reformular su pregunta para descubrir las diferencias entre ethersim y testrpc? Veo mucho potencial en esta pregunta.

Respuestas (3)

Soy el autor de ethereumjs-testrpc y realicé gran parte del trabajo en Ethersim durante sus primeros días, como lo demuestra este compromiso , los siguientes compromisos y este PR no fusionado . Ethersim fue iniciado por Iuri Mathias como una alternativa a eth-testrpc , también escrito principalmente por mí, adaptado de un guión de Stephan George.eth-testrpcfue la primera aplicación testrpc disponible, pero estaba escrita en Python y le faltaban muchas características. Debido a que estaba escrito en Python, era difícil de mantener e instalar (al menos para mí), y debido a que no tenía mucha experiencia con Python, no pude conciliar un error extremadamente molesto; desafortunadamente, moriría de una condición de carrera bajo una carga pesada. Esto se volvió extremadamente problemático cuando me preparaba para hacer una demostración de una aplicación para Devcon 1 en 2015, ya que eth-testrpc no ejecutaba de manera confiable mis pruebas unitarias, lo que atrofiaba el desarrollo. En un ataque de ira, opté por reescribir eth-testrpc en Javascript, que fue cuando encontré Ethersim.

Ethersim estaba lamentablemente sin terminar cuando lo encontré, ya que no admitía suficientes solicitudes para las pruebas unitarias mencionadas anteriormente. Después de algunas noches tarde, había reescrito completamente Ethersim, manteniendo la estructura de archivos de Iuri pero reescribiendo las partes internas para integrarlo mejor con ethereumjs-vm . Iuri finalmente aceptó este PR, y Ethersim ha estado trabajando en contra de esta reescritura desde entonces.

Continuando con la mejora de Ethersim, envié este PR , mencionado anteriormente. Este PR mejoró el manejo de bloques e incluyó dos solicitudes RPC especiales ( evm_snapshoty evm_revert) que podrían acelerar significativamente las pruebas unitarias y, si se fusionan, le darían a Ethersim la capacidad de tomar una instantánea del estado de la cadena en un bloque específico y volver a ese estado de la cadena más tarde.

Desafortunadamente, este PR nunca se fusionó. Con el paso del tiempo, la comunidad de ethereumjs decidió que quería consumir uno de estos proyectos, ya sea Ethersim mastero mis cambios en este nuevo PR, ya que estaban muy vinculados a ethereumjs-vm. Después de discutirlo, optaron por consumir mi tenedor ya que parecía haber tenido un desarrollo más activo en ese momento.

Desde esta bifurcación, su conjunto de funciones se ha diferenciado mucho, con ethereumjs-testrpc consumiendo la mayoría, si no todas, las funciones de Ethersim (estoy sesgado aquí, por supuesto, pero le recomiendo que compare sus README ). Al momento de escribir este artículo, existen las siguientes funciones en TestRPC que no existen en Ethersim:

  • Instantáneas y reversión del estado de la cadena, lo que acelera significativamente las pruebas unitarias.
  • Creación de direcciones con soporte de billetera HD, útil para la integración con otras aplicaciones como Metamask
  • Creación de direcciones deterministas, útil para la depuración
  • Opcionalmente, procesa bloques en un intervalo en lugar de instalarlos, simulando una cadena de bloques real
  • Bifurcación instantánea de otra cadena actualmente en ejecución (es decir, geth), útil para una amplia gama de actividades de análisis y secuencias de comandos
  • Iniciar y detener la minería con miner_starty miner_stop, como geth, también útil para secuencias de comandos y pruebas unitarias
  • Precio de gas configurable y límite de gas
  • Se admiten muchas más solicitudes RPC
  • Mejores valores predeterminados para simular una cadena de bloques real

Por lo que puedo decir del README , Ethersim no tiene ninguna función que testrpc no admita.

Entonces, el TL; DR , por más parcial que parezca, es que ethereumjs-testrpc es un simulador de blockchain más completo y tiene una gama más amplia de usos. Ambos tienen los mismos objetivos, pero ethereumjs-testrpc ha experimentado un desarrollo más activo.

EDITAR: De alguna manera me perdí la respuesta de Karl antes de responderme a mí mismo, no estoy seguro de cómo. Esto al menos da una historia de su desarrollo y por qué ocurrió una bifurcación.

El problema aquí es que hay un montón de repositorios llamados EtherSim y TestRPC, muchos de ellos ahora obsoletos. Cuando dice EtherSim y TestRPC actualmente, probablemente se esté refiriendo a cualquiera de estos dos repositorios:

La diferencia entre los dos es solo qué tan bien mantenidos están. En el momento de escribir este artículo ethereumjs/testrpc, se ha actualizado más recientemente que iurimatias/EtherSim.

Simplemente vaya con el nodo Javascript Ethereum más completo y mejor mantenido y estará bien. En este momento eso es ethereumjs/testprc

Nota: Parece que los muchachos de Nexusdev están trabajando en una versión EtherSimmucho más actualizada. https://github.com/nexusdev/EtherSim

Si las cosas están como estaban hace un par de meses, testRPC estaba siendo reemplazado por Ethersim (o tal vez encontraron un uso para que ambos coexistieran). De cualquier manera, sé más sobre Ethersim que sobre testRPC. Ethersim actualmente crea un programa de cadena de bloques artificial y ejecuta su código de contrato a través de su cadena de bloques (cuando está configurado correctamente), y luego le permite ejecutar pruebas en la salida de mocha.js... en realidad es bastante impresionante. En cualquier caso... que yo sepa, casi todos los marcos principales de Ethereum usan Ethersim... Truffle, Embark, Dapple, todos lo están usando. Herramienta muy útil.

Truffle recomienda encarecidamente ethereumjs-testrpc: truffle.readthedocs.io/en/latest/getting_started/client