我正在修补 web3j 和大多数我想做的事情,但是我似乎无法收听事件。
我通过添加一个事件 VoteEnded 扩展了您通过 remix 获得的 ballot.sol 合约,该事件在调用 winsProposal 时触发,并且在 Remix JavaScript VM 中有效。
...
event VoteEnded();
...
function winningProposal() constant returns (uint8 winningProposal) {
uint256 winningVoteCount = 0;
for (uint8 proposal = 0; proposal < proposals.length; proposal++)
if (proposals[proposal].voteCount > winningVoteCount) {
winningVoteCount = proposals[proposal].voteCount;
winningProposal = proposal;
}
VoteEnded();
}
...
我能够在 Web3j 中部署这个合约和投票等。然后我添加了一个过滤器来收听 VoteEnded。我是这样做的:
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress());
web3.ethLogObservable(filter).subscribe(new Action1<Log>() {
@Override
public void call(Log log) {
System.out.println("log.toString(): " + log.toString());
}
});
然而,这根本不打印任何东西。
我究竟做错了什么?