Ejecute el código EVM fuera de Blockchain

¿Hay alguna forma de ejecutar funciones en un contrato inteligente (como EVM-Bytecode) en un programa separado como evm (proporcionado por go-ethereum) sin tener que ejecutar una red de prueba? Necesito encontrar una manera de ejecutar el código varias veces, por lo que lamentablemente usar Remix no es una opción.

¡Gracias por adelantado!

echa un vistazo a truffle, su objetivo es facilitar el desarrollo de ethereum.
Hola. ¿Cuál es el problema de ejecutar cosas varias veces en Remix? ¿Por qué quieres poder ejecutarlo varias veces y de cuántas veces estamos hablando? (Aclarar las cosas podría ayudar con una respuesta).
Quería ejecutar funciones en un contrato inteligente varias veces con fines de prueba para rastrear errores. Al usar Remix, necesitaría iniciar cada llamada manualmente y Web3 con testrpc sería demasiado lento.

Respuestas (2)

Trufa y Ganache parecen ser un excelente combo:

  • Ganache es un nodo en memoria independiente, diseñado para el desarrollo. Puede extraer automáticamente, lo que significa que crea y extrae inmediatamente un bloque cada vez que se envía una transacción. Esto hace que la implementación y la invocación de contratos inteligentes sean casi sincrónicas.
  • Truffle viene con una herramienta de línea de comandos y una consola con web3 incorporado, lo que elimina algunas de las molestias de la configuración de web3.
  • Truffle le permite escribir pruebas de JavaScript para sus contratos usando Mocha y Chai. Definitivamente la forma correcta de ejecutar sus contratos "varias veces" :)

Para quien le interese, utilicé el EVM integrado de la implementación Go-Ethereum (Geth). Para eso escribí mi aplicación en go y usé principalmente "github.com/ethereum/go-ethereum/core/vm/runtime" y github.com/ethereum/go-ethereum/core/vm" como importaciones. Para generar un EVM -instancia Usé *runtime.Config y *vm.EVM.Luego usé una versión modificada de las funciones Crear y Llamar demostradas en [..]runtime/runtime.go para implementar contratos y transacciones de llamadas.

Me pregunto si podría vincular el código editado de estos dos archivos que utilizó. Eso me ayudaría mucho para mis investigaciones :D