首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web3j监听事件

Web3j监听事件
EN

Ethereum用户
提问于 2017-05-27 11:33:41
回答 1查看 6.4K关注 0票数 10

我正在修补web3j和我想要做的大部分事情成功,但我似乎无法倾听事件。

我已经通过添加一个事件ballot.sol扩展了您通过混合获得的VoteEnded契约,当调用winningProposal时,事件VoteEnded会被触发,并且在remix中工作。

代码语言:javascript
复制
...
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。我是这样做的:

代码语言:javascript
复制
    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)。求救!;)

然而,这根本不打印任何东西。

我做错了什么?

EN

回答 1

Ethereum用户

发布于 2018-03-03 22:59:00

我知道这个问题很古老,但当我遇到这个问题时,我在这里给出了一个答案,在其他地方找不到解决办法.

这似乎是Web3j中的一个bug,当您将契约地址作为筛选器的一部分传递时会发生该错误。

代码语言:javascript
复制
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress());

不管用,但是

代码语言:javascript
复制
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress().substring(2));

确实如此。当应用过滤器时,“0x”似乎被插入在字符串的开头。传入带有'0x‘修整的子字符串将使其工作。

(另见必须在乙烯过滤器中裁剪合同地址)

票数 8
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/16697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档