Как измерить время в приватной сети и контролировать процесс майнинга?

Я использую частную сеть с geth 1.7, и у меня есть несколько вопросов

1- Чтобы получить время выполнения функции, я нашел обсуждение об использовании Data.getTime(), но мне интересно, смог ли кто-нибудь успешно реализовать другие методы, такие как performance.now(), для измерения времени в командных строках geth. ? Я пробовал, но кажется, что функция не определена!!

2- как я могу получить метку времени для определенного блока, если я знаю номер блока?

3- как я могу майнить только один блок. Например, я отправляю одну транзакцию в частную сеть, а затем только один блок, содержащий эту транзакцию. Я нашел здесь, что некоторые предлагают использовать цикл while, чтобы проверить, нет ли ожидающих транзакций, а затем остановить майнинг. Но мне не нужен этот метод, я предпочитаю майнить только один блок.

Заранее спасибо,

Ответы (1)

1: Вы можете получить время выполнения функции, обновив исходный код в файле jsre.go следующим образом:

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
}

а затем разверните контракт для тестирования.

2: нет способа получить временную метку блока по номеру, block.timestampили nowэто просто текущая временная метка блока в секундах с эпохи unix.

3: miner.start(1);admin.sleepBlocks(1);miner.stop();просто добывает один блок, а затем останавливает добычу. Пожалуйста, обратите внимание на выполнение вместе.

Возможно, слишком низкая сложность создания двух или трех точек для точки 3, для этого явления требуется источник аялиза. Для пункта 1 вы обновите и скомпилируете исходный код. 1. клонировать go-ethereum 2. найти метод Evaluate в файле jsre.go и заменить Evaluate следующим образом:
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 ",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", код, "конец, потребление времени" ,(time.Now().UnixNano() - startTime.UnixNano())) }) return fail }
3. cd go-ethereum dir на терминале и выполнить make all. 4. начать гет. './build/bin/geth --datadir=./dev/data --networkid 1 --dev console' 5. разверните свой контракт и протестируйте его.
сделайте то же самое, но не можете распечатать время в командной строке, как напечатать время? Спасибо
Вы изменили исходный код и выполнили «сделать все» geth, чтобы перестроить и запустить geth ./build/bin/geth --datadir=./dev/data --networkid 1 --dev console? этот способ подходит для меня, пожалуйста, каждый шаг правильный ~
как только я заставлю все получить ошибку; go-ethereum/cmd/evm/compiler.go:24:2: использование внутреннего пакета запрещено go-ethereum/cmd/geth/bugcmd.go:29:2: использование внутреннего пакета запрещено .. спасибо