Solidity
呼叫太快時事件不會觸發
我有一個非常簡單的 Solidity 函式,它只呼叫一個事件:
function sendMessage(int id, string title, string message){ Message(id, method, parameters); }
當我使用 web3 呼叫它時:
communicationChannelInstance.sendMessage(45, 'exampleTitle', '{}');
我可以用事件手錶看到它就好了。
當我在循環中多次呼叫該函式時,問題就來了:
ids.forEach(function(id) { communicationChannelInstance.sendMessage.sendTransaction(id, 'exampleTitle', '{}'); })
不管這個循環被呼叫多少次,它只顯示最新的事件。
這是我正在使用的手錶:
var events = contractInstance.allEvents(); events.watch(function(error, event){ if (error) { callback(error, null); } else { var eventRet = event; callback(null, eventRet); } });
為什麼會這樣?我怎樣才能真正快速地觸發多個事件並執行所有事件?
謝謝您的幫助。
解決了它,這是 Ganache/testRPC 和 web3 的問題,如果它設置為在獲得交易後立即探勘交易,而不是使用標誌來探勘塊
--blockTime
,事件閱讀器會感到困惑並且無法正確獲取交易。簡而言之,將 a 設置
--blockTime
為 3+ 秒就可以了。
我不知道是不是同樣的情況,但我遇到了類似的問題。我
web3js
與MetaMask
. 當我使用此功能記錄事件時
mycontract.MyEvent({fromBlock:0, toBlock: 'latest'}, function(error, log){...});
,它只顯示最新事件;相反,使用
mycontract.allEvents({fromBlock:0, toBlock: 'latest'}, function(error, log){ if (!error){ if(log.event == "Message"){ console.log(log.args.id); console.log(log.args.method); console.log(log.args.parameters); } } });
它顯示了一切。