Wie kann ich meine eigenen Befehle in der Geth-Konsole anpassen?

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.

Antworten (2)

Sie können den Quellcode ändern, um eine lokale private Kette zu erstellen.

  1. Installieren gehen

  2. Klonprojekt go-ethereumvongit clone https://github.com/ethereum/go-ethereum.git

  3. make allErstellen Sie beispielsweise alle Befehle neu, indem Siegeth
  4. Testen ob alles ok ist. ./build/bin/geth --datadir=./dev/data0 --networkid 2 console. Zuerst sollten Sie ein Verzeichnis erstellen, ./dev/data0um Kettendaten zu speichern. Wenn OK, haben Sie jetzt die Geth-Konsole eingegeben.

Jetzt ändern wir den Quellcode. Beim gethStart 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 BinBinauf 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

Geben Sie hier die Bildbeschreibung ein

perfekt!
Hoffe es hilft~

Geth stellt die Parameter bereit --jspath, --preloadmit --execdenen die Konsole angepasst werden kann.

Außerdem gibt es https://github.com/ethereum/ethereum-console , mit der Sie Ihre eigene Konsole erstellen können.

danke, ich möchte nur einen neuen Befehl wie admin.sayHallo anpassen, wie ändere ich die Quelle, um das Ziel zu erreichen?
Von der Konsole aus können Sie admin.sayHello = function (who) { console.log('Hello ' + who); }. Jetzt können Sie es von der Konsole aus tun admin.sayHello('World!')und es wird "Hello World!" Hecho.
Vielleicht ist es nützlich, aber ich möchte einen komplizierten Befehl erstellen, der nicht durch das Zusammenstellen vorhandener Befehle erreicht werden kann.