Я настроил файл 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, чтобы это произошло? И если да, то есть ли способ заранее выяснить, в каком блоке какое событие будет?
Спасибо!
Точно так же, как и вы 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, многое меняется)