听取Web3j中的事件

时间:2017-05-28 07:38:46

标签: java blockchain ethereum remix web3-java

我正在修改web3j以及我想要做的大部分事情,但是我似乎无法听取事件。

我通过添加一个事件VoteEnded扩展了你使用remix获得的ballot.sol合约,当调用winsProposal并且在Remix JavaScript VM中工作时会触发该事件。

ContextMenuStrip

我可以在Web3j中部署此合同并投票等。然后我添加了一个过滤器来收听VoteEnded。我这样做了:

ContextMenuStrip

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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

您需要添加filter.addSingleTopic(EventEncoder.encode(event)) event是实例化的org.web3j.abi.datatypes.Event对象。

答案 1 :(得分:3)

在收听基于本地松露的节点时,我不得不添加.substring(2):

EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, contract.getContractAddress().substring(2);

第二,您可能需要使用

    String encodedEventSignature = EventEncoder.encode(event);
    filter.addSingleTopic(encodedEventSignature);

您所遇到的事件应该看起来像什么

new Event("VoteEnded", 
            Arrays.<TypeReference<?>>asList(), Arrays.<TypeReference<?>>asList());