¿Cómo medir el tiempo en una red privada y controlar el proceso de minería?

Estoy usando una red privada con geth 1.7 y tengo algunas preguntas

1- Para obtener el tiempo de ejecución de una función, encontré una discusión sobre el uso de Data.getTime(), pero me pregunto si alguien pudo implementar con éxito otros métodos como performance.now() para medir el tiempo en las líneas de comando geth ? ¡Lo intenté pero parece que la función no está definida!

2- ¿Cómo puedo obtener la marca de tiempo para un bloque específico si sabía el número de bloque?

3- ¿Cómo puedo minar solo un bloque? Por ejemplo, envío una transacción a la red privada y luego solo extraigo un bloque que contiene esa transacción. Encontré aquí algunos que sugieren usar while loop para verificar si no hay transacciones pendientes y luego detener la minería. Pero no quiero este método, preferiría extraer solo un bloque.

Gracias de antemano,

Respuestas (1)

1: puede obtener el tiempo de ejecución de una función actualizando la fuente en el archivo jsre.go, de la siguiente manera:

func (self *JSRE) Evaluate(code string, w io.Writer) error {
    var fail error

    self.Do(func(vm *otto.Otto) {
        var startTime = time.Now();
        fmt.Println("jsre function ",code," start")
        val, err := vm.Run(code)
        if err != nil {
            prettyError(vm, err, w)
        } else {
            prettyPrint(vm, val, w)
        }
        fmt.Fprintln(w)
        fmt.Println("jsre function ",code," end ,consume time " ,(time.Now().UnixNano() - startTime.UnixNano()))
    })
    return fail
}

y luego, implemente el contrato para probar.

2: no hay forma de obtener la marca de tiempo del bloque por número, block.timestampo nowsimplemente es la marca de tiempo del bloque actual como segundos desde la época de Unix.

3: miner.start(1);admin.sleepBlocks(1);miner.stop();solo extrae un bloque y luego detiene el mío. Tenga en cuenta que se ejecutan juntos.

Tal vez la dificultad sea demasiado baja para generar dos o tres para el punto 3, este fenómeno requiere una fuente de análisis. Para el punto 1, actualizará y compilará el código fuente. 1. clonar go-ethereum 2. encontrar el método Evaluar en el archivo jsre.go y reemplazar Evaluar de la siguiente manera:
func (self *JSRE) Evaluate(code string, w io.Writer) error { var fail error self.Do(func(vm *otto.Otto) { var startTime = time.Now(); fmt.Println("jsre function ",código," iniciar") val, err := vm.Run(código) if err != nil { prettyError(vm, err, w) } else { prettyPrint(vm, val, w) } fmt.Fprintln(w ) fmt.Println("función jsre", código, "finalizar, consumir tiempo" ,(time.Now().UnixNano() - startTime.UnixNano())) }) return fail }
3. CD go-ethereum dir en la terminal y ejecute make all. 4. empezar geth. './build/bin/geth --datadir=./dev/data --networkid 1 --dev console' 5. implemente su contrato y pruebe.
haga lo mismo pero no puede imprimir la hora en la línea de comando, ¿cómo imprimir la hora? Gracias
¿modificó la fuente y ejecutó 'make all' para reconstruir gethy comenzó geth ./build/bin/geth --datadir=./dev/data --networkid 1 --dev console? de esta manera está bien para mí, por favor, cada paso es correcto ~
una vez que hago que todos obtengan un error; go-ethereum/cmd/evm/compiler.go:24:2: uso de paquete interno no permitido go-ethereum/cmd/geth/bugcmd.go:29:2: uso de paquete interno no permitido .. gracias