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?
La mejor forma, y la que yo recomendaría, para manejar scripts en geth es.
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:
loadScript('home/TeleportingGoat/Desktop/Scripts/myScript.js');
getBalance('0x1231afd1289a...deff');
Esa es la forma en que le sugiero que proceda.
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 $1
y dar me $2
gusta 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 << EOF
lugar.
Es posible que deba agregar la ruta a su archivo ipc si no es la predeterminada, entre geth
y 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);
Cabra teletransportadora
kanekidev
Cabra teletransportadora
kanekidev