Wie kann ich meine eigenen Befehle in der Geth-Konsole anpassen?
Wir wissen, dass wir in der Geth-Konsole eth.accounts und andere Befehle eingeben können. Ich habe festgestellt, dass es einen JavaScript-Parser/Interpreter namens Otto gibt, der dies tut, aber wie fügt man einen neuen Befehl wie eth.mycommand in der Geth-Konsole hinzu?
Vielen Dank.
Sie können den Quellcode ändern, um eine lokale private Kette zu erstellen.
Installieren gehen
Klonprojekt go-ethereum
vongit clone https://github.com/ethereum/go-ethereum.git
make all
Erstellen Sie beispielsweise alle Befehle neu, indem Siegeth
./build/bin/geth --datadir=./dev/data0 --networkid 2 console
. Zuerst sollten Sie ein Verzeichnis erstellen, ./dev/data0
um Kettendaten zu speichern. Wenn OK, haben Sie jetzt die Geth-Konsole eingegeben.Jetzt ändern wir den Quellcode. Beim geth
Start wird ein Thread erstellt, um mit der Konsole durch die interaktive Methode zu interagieren, und der letzte console.Evaluate()
behandelt den Eingabebefehl. So können Sie hier Ihre Logik implementieren. Jetzt definieren wir einen eth.custom(params)
Befehl, um say-hello anzuzeigen. Ändern Sie den Quellcode wie folgt:
// Evaluate executes code and pretty prints the result to the specified output
// stream.
func (c *Console) Evaluate(statement string) error {
//fmt.Println(isCustomCommand(statement))
if (isCustomCommand(statement)) {//custom command,return
result := "Hello " + statement[strings.Index(statement,"\"")+1:len(statement)-3]
log.Info(result)
return nil
}
defer func() {
if r := recover(); r != nil {
fmt.Fprintf(c.printer, "[native] error: %v\n", r)
}
}()
return c.jsre.Evaluate(statement, c.printer)
}
//our custom is eth.custom(param)
func isCustomCommand(input string) bool{
return strings.HasPrefix(input,"eth.custom")
}
Wenn Sie eingeben eth.custom("BinBin")
, wird es Hello BinBin
auf dem Terminal angezeigt. Jetzt ausführen
make all
Befehl zum Neuaufbau, und führen Sie dann den Befehl aus, um die Konsole aufzurufen:
./build/bin/geth --datadir=./dev/data0 --networkid 2 console
Jetzt starten wir den Test und geben den Befehl wie folgt ein:
eth.custom("BinBin")
und das Ergebnis ist
perfekt!
Hoffe es hilft~
Geth stellt die Parameter bereit --jspath
, --preload
mit --exec
denen die Konsole angepasst werden kann.
Außerdem gibt es https://github.com/ethereum/ethereum-console , mit der Sie Ihre eigene Konsole erstellen können.
Jiebang
Ismael
admin.sayHello = function (who) { console.log('Hello ' + who); }
. Jetzt können Sie es von der Konsole aus tunadmin.sayHello('World!')
und es wird "Hello World!" Hecho.Jiebang