我想使用 web3 获取 Solidity 合约发出的所有事件,但是 .getPastEvents() 方法用于合约。
这将返回 contractInstance 的所有事件,但是,我的合约调用其他也发出事件的合约。
await contractInstance.getPastEvents("allEvents", {fromBlock: bn, toBlock: bn});
Run Code Online (Sandbox Code Playgroud)
我想从交易中获取所有事件,而不是从合同中获取。
或者作为替代,即使是来自一个块的所有事件,然后我可以使用事务哈希对其进行过滤,以获得我想要的。是否有返回块中所有事件的函数?我找过,但我找不到一个。我必须知道链中的每个合约并分别获取事件吗?也许。
我做了一个非常简单的例子来说明。
坚固性代码:
pragma solidity 0.5.8;
contract contractA {
event eventA();
function methodA( address b ) public {
emit eventA();
contractB instanceB = contractB( b );
instanceB.methodB();
}
}
contract contractB {
event eventB();
function methodB() public {
emit eventB();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Truffle 使其变得简单。这是迁移文件:
var contractA = artifacts.require("contractA");
var contractB = artifacts.require("contractB");
module.exports = function(deployer) {
deployer.deploy(contractA);
deployer.deploy(contractB);
Run Code Online (Sandbox Code Playgroud)
这是调用发出 eventA 的 contractA …