Closed helxsz closed 5 years ago
i wonder is it because of web3 provider? currently i am using web http not ws. And currently I am testing on the testrpc.
this.web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
is http provider doesn't provide event?
From what i understood you can only watch events trough ws (but i might be wrong) and so far i could only get them to work running a own geth instance with the params
... --rpccorsdomain="*" --ws --wsorigins="*" --wsaddr 0.0.0.0
and then
w3 = new Web3('ws://127.0.0.1:8546');
I have tried
geth --identity "MyTestNetNode" --rpccorsdomain="*" --ws --wsport=8546 --wsorigins="*" --wsaddr 0.0.0.0 -- --cache=512 --rpc --rpcapi="personal,eth,network" --rpcport=8545 --fast datadir /Users/abc/Documents/projects/ngx-admin-master
it gives me INFO [01-01|12:39:07] Generated ethash verification cache epoch=2 elapsed=3.111s
INFO [01-01|12:39:07] Imported new block headers count=2048 elapsed=483.670ms number=37120 hash=a27938…2d697f ignored=0
INFO [01-01|12:39:08] Imported new block headers count=2048 elapsed=518.097ms number=39168 hash=1a1cd2…514d2d ignored=0
INFO [01-01|12:39:08] Imported new state entries
i used the metamask to connect the localhost:8545, but it can't connect to it, any ideas?
You use port 8546 (for web sockets) not 8545, from what i get if you use web3 = new Web3(Web3.givenProvider);
to use with meta mask, and you use another instance to look for events w3 = new Web3('ws://127.0.0.1:8546');
I am facing the similar problem, unable to detect events. However, I am able to get all past events using getPastEvents
.
Oh. Got it with the solution you provided. But it used to work in the earlier version when event.watch
was being used.
I came across this problem too, the events listening part never worked after methods send? Only getPastEvents() works, and I tested with rinkeby net, the same result. So, the reason is that web3js 1.0 does not work? Why?
I'm using this code:
this.crowdsale.instance.events
.TokenPurchase({
fromBlock: 'latest'
})
.on('data', event => {
console.log(event)
}).on('changed', event => {
console.log(event)
}).on('error', error => {
console.log(error)
})
But the EventEmitter won't trigger anything.
I used to get it working via websockets:
subscribeToEvents(){
this.setWebsocketByNetwork()
let provider = new Web3.providers.WebsocketProvider(this.websocket)
let web3 = new Web3(provider)
return web3.eth.subscribe('logs', {
address: this.address,
topics: [],
})
}
but since web3@1.0.0-beta.35 it is not working anymore.
I am also using getPastEvents with "web3": "^1.0.0-beta.36", Not able to get all the events
@gus-canya Your reason is that the query start block is error. you can used it
myContract.events.MyEvent({
filter: {},
fromBlock: 0,
toBlock: 'latest
}, function(error, event){ console.log(event); })
I've tested and fixed the events handling during the refactoring. Please update to the latest version of Web3.js.
My web3 version is web3@1.0.0-beta.26, I am deploying the contract on the localhost:8545.
Here is my contract example.
and here is my js code
init the contract instance
var Contract = new this.web3.eth.Contract(abi_json,address);
button click events
watch events
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.
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
the console outputs the null.
Wondering what is the problem?