¿Cómo personalizar mis propios comandos en la consola geth?

¿Cómo personalizar mis propios comandos en la consola geth?

Sabemos que en la consola geth, podemos escribir eth.accounts y otros comandos. Descubrí que hay un analizador/intérprete de JavaScript llamado Otto que hace esto, pero ¿cómo agregar un nuevo comando como eth.mycommand en la consola geth?

Muchas gracias.

Respuestas (2)

Puede modificar el código fuente para lograrlo, creando una cadena privada local.

  1. instalar ir

  2. Clonar go-ethereumproyecto porgit clone https://github.com/ethereum/go-ethereum.git

  3. Reconstruir todos los comandos por make all, por ejemplogeth
  4. Prueba si todo está bien. ./build/bin/geth --datadir=./dev/data0 --networkid 2 console. Al principio, debe crear un directorio ./dev/data0para guardar los datos de la cadena. Si está bien, ahora ha ingresado a la consola geth.

Ahora, modificamos el código fuente. al gethiniciar, se creará un hilo para interactuar con la consola mediante el método interactivoconsole.Evaluate() , y el último se ocupará del comando de entrada. Entonces puedes implementar tu lógica aquí. Ahora definimos un eth.custom(params)comando para mostrar decir hola. Modifique el código fuente de la siguiente manera:

// 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")
}

Si ingresa eth.custom("BinBin"), se muestra Hello BinBinen la terminal. Ahora ejecuta

make all

comando para reconstruir, y luego ejecute el comando para ingresar a la consola:

./build/bin/geth --datadir=./dev/data0 --networkid 2  console

Ahora, comenzamos la prueba, ingrese el comando de la siguiente manera:

eth.custom("BinBin")

y el resultado es

ingrese la descripción de la imagen aquí

¡perfecto!
Espero que ayude ~

Geth proporciona los parámetros --jspath, --preloady --execeso se puede usar para personalizar la consola.

También hay https://github.com/ethereum/ethereum-console que puede usar para crear su propia consola.

gracias, solo quiero personalizar un nuevo comando como admin.sayHello, ¿cómo modificar la fuente para lograr el objetivo?
Desde la consola puedes hacer admin.sayHello = function (who) { console.log('Hello ' + who); }. Ahora lo puedes hacer desde la consola admin.sayHello('World!')y será hecho "¡Hola Mundo!".
Tal vez sea útil, pero quiero crear un comando complicado que no se pueda lograr ensamblando comandos existentes.