我正在修补web3j和我想要做的大部分事情成功,但我似乎无法倾听事件。
我已经通过添加一个事件ballot.sol扩展了您通过混合获得的VoteEnded契约,当调用winningProposal时,事件VoteEnded会被触发,并且在remix中工作。
...
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());
}
});我在这里发现的:过滤器和事件的问题(web3j/TestRPC)。求救!;)
然而,这根本不打印任何东西。
我做错了什么?
发布于 2018-03-03 22:59:00
我知道这个问题很古老,但当我遇到这个问题时,我在这里给出了一个答案,在其他地方找不到解决办法.
这似乎是Web3j中的一个bug,当您将契约地址作为筛选器的一部分传递时会发生该错误。
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress());不管用,但是
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress().substring(2));确实如此。当应用过滤器时,“0x”似乎被插入在字符串的开头。传入带有'0x‘修整的子字符串将使其工作。
(另见必须在乙烯过滤器中裁剪合同地址)
https://ethereum.stackexchange.com/questions/16697
复制相似问题