My web3 version is [email protected], I am deploying the contract on the localhost:8545.
Here is my contract example.
pragma solidity ^0.4.18;
contract LocalEthereum {
address public owner;
event Created(bytes32 _tradeHash);
function createEvent() onlyOwner external {
Created(0x01);
}
}
and here is my js code
init the contract instance
var Contract = new this.web3.eth.Contract(abi_json,address);
button click events
Created(account){
Contract.methods.Created().send({from: account,gas:210000,gasPrice:5000000000})
.on('transactionHash', function(hash){
console.log('hash',hash);
})
.on('receipt', function(receipt){
console.log('receipt',receipt);
})
.on('confirmation', function(confirmationNumber, receipt){
console.log('confirmation',confirmationNumber);
})
.on('error', console.error);
}
watch events
this.Contract.events.Created({},{ fromBlock: 0, toBlock: 'latest' }, function(error, event){ console.log(event); })
.on('data', function(event){
console.log(event);
})
.on('changed', function(event){
console.log('on changed');
})
.on('error', console.error);
The js app can load the contract and connect the ethereum network, when I click the button, Contract will generate a 'Created' rpc call to the ethereum, the transaction can be received immediately. On the testrpc interface I could also see the transaction as shown below.
Transaction: 0x2469f2085c8f6f23ad8aa30bc6cf99ade40ea2f0368b9bb008496ba05d927d84
Gas usage: 21272
Block Number: 6
Block Time: Thu Dec 28 2017 20:38:02 GMT+0000 (GMT)
Everything works well, however the event call is never activated after the method call. There is only one time event call in the app intialization but still the
this.Contract.events.Created({},{ fromBlock: 0, toBlock: 'latest' }, function(error, event){ console.log(event); })
.on('data', function(event){
console.log(event);
})
the console outputs the null.
Wonder what is the problem?
i wonder is it because of web3 provider? currently i am using web http not ws. And currently I am testing on the ganache-cli and testrpc.
this.web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
is http provider doesn't provide event?