Kann ich Argumente an ein .js-Skript auf Geth übergeben?

Ich fange an, Geth in den Griff zu bekommen, insbesondere die Skripte, die this und this folgen .

Ich habe Skripte, die Verträge erstellen und Funktionen aufrufen, aber ich weiß nicht, wie man Argumente an ein Skript übergibt. Argv[]wird nicht erkannt, und die meisten Javascript-Dokumente, die ich gefunden habe, sind für HTML.

Vorerst rufe ich Skripte mit aufgeth --testnet js script.js 2>>geth.log

Gibt es eine Möglichkeit, Argumente zu übergeben?

Antworten (2)

Der beste Weg, und den ich Ihnen empfehlen würde, um mit Skripten in Geth umzugehen, ist.

  1. Erstens: Starten Sie geth mit der Konsole. Vergiss vorerst Skripte.
  2. Dann in der Konsole den Befehl verwenden:loadScript("source");

Wenn Sie beispielsweise dieses einfache Skript erhalten haben:

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

in einer Datei namens myScripts.js(in der Sie mehr Funktionen haben können) würden Sie Folgendes tun:

  • Geth-Konsole laden.
  • loadScript('home/TeleportingGoat/Desktop/Scripts/myScript.js');
  • getBalance('0x1231afd1289a...deff');

So würde ich dir vorschlagen, vorzugehen.

Vielen Dank für Ihre Antwort. Wie rufen Sie Konsolenbefehle von externen Geth auf? Ich weiß, wie man Geth-Skripte von der Shell aus aufruft, aber ich weiß nicht, wie man Konsolenbefehle von außen verwendet ... Das Skript ist nicht da, um mir Zeit zu sparen, sondern um einen Prozess zu automatisieren, ich kann die Konsole nicht berühren mich selbst.
Es gibt nur wenige Möglichkeiten: JSON-RPC-API, WEB3.JS-API usw. usw. Überprüfen Sie diese Ethereum Geth für die gesamte Dokumentation. Das einfachere und am häufigsten verwendete ist web3.js
Ich habe eine Lösung für mein Problem gefunden (die ich gepostet habe), aber meine Frage war ein wenig allgemein, also beantworten Sie meine Frage technisch, ich bin mir nicht sicher, welche ich akzeptieren soll.
oh, jetzt verstehe ich, wonach du genau gefragt hast :) schöne Art, es zu lösen :)

BEARBEITEN: Ich werde meine alte Antwort für Legacy hinterlassen, aber der Benutzer BokkyPooBah hat mir eine großartige Antwort auf ein anderes Problem gegeben, das etwas mit diesem zu tun hat.

Seine Lösung löste beides, also gib ihm Punkte für seine Antwort dort !

Ich fasse es hier schnell zusammen:

Sie müssen eine Instanz von Geth ausführen, und mit einem Bash-Skript verwenden geth --testnet js script.js 2>>geth.logSie geth attach. Sie können dann direkt Javascript schreiben und $1und $2wie in jedem Bash-Skript verwenden.

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

<content of your js script>

EOF

Dadurch wird die Konsolenausgabe ausgeblendet. Wenn Sie es zum Debuggen sehen müssen, verwenden Sie geth attach << EOFstattdessen.

Möglicherweise müssen Sie den Pfad zu Ihrer IPC-Datei hinzufügen, wenn er nicht der Standard ist, zwischen gethund attach. Ich habe versucht, mich kurz zu fassen, aber wenn Sie eine detailliertere Erklärung benötigen, lesen Sie seine Antwort.


Meine Frage wurde nicht perfekt gestellt und ist nicht klar, was ich brauchte. Ich habe versucht, allgemein zu sein, aber da es "keine einfache Möglichkeit" gibt, Argumente an ein js-Skript zu übergeben, müssen Sie einen Trick finden, der sehr davon abhängt, wie Sie Ihr Skript aufrufen (wie gesagt, es gibt sehr viele spezifische Antworten, wenn das Skript aus einem HTML aufgerufen wird).

Ich habe eine Lösung für mein Problem gefunden, also poste ich die Antwort, weil ich denke, dass sie für andere nützlich sein könnte.

Ich habe ein einfaches Bash-Skript von einer Webseite aufgerufen, das ausgeführt geth --testnet script.jswurde, also hatte ich bereits zwei Skriptebenen: Bash und Javascript. Js können (leicht) keine Argumente annehmen, aber Bash-Skripte können dies.

Also hier ist, was ich getan habe. Das Folgende ist meine Bash-Skriptdatei.

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

Das Argument ist $1 und wird direkt in das js-Skript geschrieben. Dann funktioniert das js-Skript perfekt, als wäre das Argument fest codiert. Das Bash-Skript kann von der Konsole mit bash bashScript "0x00..00"oder in PHP zum Beispiel mit ausgeführt werden:exec('./bashScript '.$address);