¿Puedo pasar argumentos a un script .js en Geth?

Estoy empezando a familiarizarme con Geth, especialmente con los guiones, siguiendo this y this .

Tengo scripts que crean contratos y llaman a funciones, pero no sé cómo pasar argumentos a un script. Argv[]no se reconoce, y la mayoría de los documentos de JavaScript que encontré son para html.

Por ahora llamo scripts congeth --testnet js script.js 2>>geth.log

¿Hay alguna forma de pasar argumentos?

Respuestas (2)

La mejor forma, y ​​la que yo recomendaría, para manejar scripts en geth es.

  1. Primero: inicie geth con consola. Olvídate por ahora de los guiones.
  2. Luego, en el comando de uso de la consola:loadScript("source");

De esa manera, si tienes, por ejemplo, este simple script:

function getBalance(fromAddress)
{
var Balance = web3.fromWei(web3.getBalance(fromAddress), "ether");
console.log(Balance)
}

en un archivo llamado myScripts.js(en el que puede tener más funciones), haría eso:

  • Cargue la consola geth.
  • loadScript('home/TeleportingGoat/Desktop/Scripts/myScript.js');
  • getBalance('0x1231afd1289a...deff');

Esa es la forma en que le sugiero que proceda.

Gracias por su respuesta. ¿Cómo llamas a los comandos de la consola desde geth externo? Sé cómo llamar a los scripts geth desde el shell, pero no sé cómo usar los comandos de la consola desde el exterior... El script no está ahí para ahorrarme tiempo sino para automatizar un proceso, no puedo tocar la consola mí mismo.
Solo hay algunas formas: API JSON-RPC, API WEB3.JS, etc., etc. Consulte este Ethereum Geth para obtener toda la documentación. El más fácil y más usado es web3.js
Encontré una solución a mi problema (que publiqué), pero mi pregunta era un poco general, por lo que la suya técnicamente responde a mi pregunta, no estoy seguro de cuál debo aceptar.
oh, ahora entiendo qué estabas preguntando exactamente :) buena manera de resolverlo :)

EDITAR: dejaré mi respuesta anterior para el legado, pero el usuario BokkyPooBah me dio una respuesta increíble a otro problema, algo relacionado con este.

Su solución resolvió ambos, ¡así que ve y dale puntos en su respuesta allí !

Lo resumiré rápidamente aquí:

Debe tener una instancia de Geth ejecutándose, y con un script bash en lugar de ejecutarlo geth --testnet js script.js 2>>geth.log, usará geth attach. Luego puede escribir javascript directamente, y usar $1y dar me $2gusta en cualquier script bash.

#!/bin/bash
arg1=$1
arg2=$2
geth attach << EOF | grep "Data: " | sed "s/Data: //"

<content of your js script>

EOF

Esto ocultará la salida de la consola. Si necesita verlo para la depuración, utilícelo en su geth attach << EOFlugar.

Es posible que deba agregar la ruta a su archivo ipc si no es la predeterminada, entre gethy attach. Traté de ser breve, pero si necesita una explicación más detallada, vea su respuesta.


Mi pregunta no se hizo perfectamente y no está claro lo que necesitaba. Traté de ser general, pero dado que "no hay una manera fácil" de pasar argumentos a un script js, debe encontrar un truco que dependa mucho de la forma en que llama a su script (como dije, hay muy respuestas específicas para cuando se llama al script desde un html).

Encontré una solución a mi problema, así que publicaré la respuesta porque creo que podría ser útil para otros.

Lo que estaba haciendo era llamar a un script bash simple desde una página web, que se ejecutó geth --testnet script.js, por lo que ya tenía dos niveles de scripts: bash y javascript. Js no puede aceptar argumentos (fácilmente), pero los scripts bash sí.

Así que esto es lo que hice. El siguiente es mi archivo de script bash.

echo "primary = eth.accounts[0]; personal.unlockAccount ...<content of the js script> ... address ='"$1"'); ..." > gethScript.js
geth --testnet js gethScript.js 2>>gethScript.log 

El argumento es $1 y está escrito directamente en el script js. Luego, el script js funciona perfectamente como si el argumento estuviera codificado. El script bash se puede ejecutar desde la consola con bash bashScript "0x00..00"o en php, por ejemplo, con:exec('./bashScript '.$address);