2017-05-28 94 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對象。