2017-05-28 95 views
2

我正在修补web3j,并且我想要做的大部分事情都能成功,但是我似乎无法听到事件。在Web3j中倾听事件

我已经通过添加一个事件VoteEnded来扩展您通过混音获得的ballot.sol合同,该事件在对callsProposal进行调用并且在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()); 
     } 
    }); 

但是,这并不打印任何东西。

我在做什么错?

回答

1

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