¿Cómo puedo ejecutar el código localmente en la dirección dada?

¿Cuál es la forma más sencilla de ejecutar un fragmento de código en una dirección específica de la cadena de bloques principal localmente mediante la interfaz de línea de comandos?

Aquí se demuestra cómo reproducir un archivo mp3 en función de los datos de entrada mediante el comando geth, pero ¿cómo puede ejecutar el código real con su lógica en su máquina local para fines de prueba propios?

¿Puede elaborar / tratar de aclarar lo que quiere decir? Tengo problemas para averiguar exactamente lo que quieres que suceda.
Solo quiero simular la ejecución del código de bytes en la dirección específica de la cadena de bloques. Creo que la respuesta actual cubre eso.
¿A qué te refieres con simular? ¿Desea utilizar la cadena de bloques principal en vivo o una de prueba como la que puede proporcionar testrpc? Entonces el ejemplo del MP3 es solo un dato almacenado en una transacción. ¿Quiere decir leer datos binarios almacenados en una transacción y luego usarlos directamente fuera de la salida estándar y ejecutarlos en algún otro programa local (aquí mpg321 para reproducir los datos binarios mp3)? ¿Qué tipo de datos planea almacenar? Tenga en cuenta el costo de almacenar datos en la cadena. Será mejor que use algún distribuidor FS como IPFS y cree un enlace al contenido en los datos de la transacción.
Quiero decir que me gustaría simular la ejecución de un código ya existente en la cadena de bloques en mi máquina local desde CLI. No leer los datos como el audio, sino ejecutar el código de bytes y obtener el resultado de esa ejecución solo con fines de prueba. No planeo almacenar nada en la cadena de bloques principal, es posible que desee almacenar los datos en algún lugar temporal para ejecutar el código.

Respuestas (1)

El método JSON_RPC eth_call le permite simular una transacción en la cadena de bloques, incluidas las ejecuciones de contratos.

Se puede acceder a este método en geth o web3.js como

eth.call({from: eth.accounts[0], to: myContract, gas: 1000000, value: web3.toWei(1,"ether")})

Si conoce el ABI de un contrato, puede utilizar

var myContract = eth.contract(myABI).at(contractAddress);
var result = myContract.myMethod.call(arg1,arg2,arg3,{from:myAddress, gas:1000000})

Si desea obtener un seguimiento de depuración de una transacción, puede enviar una transacción y luego usar debug_traceTransaction .