События возвращения Truffle Exec

Я настроил файл JavaScript, который принимает мой контракт и выполняет различные функции, а затем возвращает правильные события. Файл проходит через «truffle exec».

Я использую следующую строку, чтобы вернуть мои события:

      let myEvent = contract.ThisEvent({}, {fromBlock: 0, toBlock: 'latest'});
  myEvent.get((error, logs) => {
    logs.forEach(log => console.log(
      'Message: ' + log.args.message
    ))
  });

Проблема, с которой я столкнулся, заключается в том, что у меня есть множество событий с одним и тем же именем, но которые возвращают разные сообщения. Идея состоит в том, чтобы каждое событие возвращалось в определенном порядке (как указано в функции). Но когда я пытаюсь выполнить их в файле JS, они возвращаются в терминале в неправильном порядке.

Я не уверен, как заставить его возвращать события в правильном порядке. Могу ли я изменить fromBlock/toBlock, чтобы это произошло? И если да, то есть ли способ заранее выяснить, в каком блоке какое событие будет?

Спасибо!

Ответы (1)

Точно так же, как и вы log.args.message, вы можете log.blockNumberувидеть, в каком блоке было сгенерировано это событие, и упорядочить их таким образом, тем не менее, вы можете получить некоторые из них не по порядку, потому что транзакции не всегда добываются в том же порядке, в котором они отправляются. .

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

Если вы используете его для уведомлений, вам не нужно читать всю цепочку, просто проверяйте блоки по мере их добычи.

var event = myContractInstance.myEvent([{valueA: 23}] [, additionalFilterObject] , function(error, result){
 if (!error)
   console.log(result);
});

Примечание 2: Похоже, вы используете web3 0.2x (будьте осторожны при обновлении до версии 1.x, многое меняется)