INFURAではfilterが使えない。 例えば、下記のコードは動かない。
var web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/"));
var filter = web3.eth.filter('pending');
filter.watch(console.log); // returns invalid json response error
コントラクトのEventを監視することもできない。
var event = myContractInstance.MyEvent()
event.watch(console.log); // nothing will happen
試しに、json rpcを投げてみる。
$ curl https://mainnet.infura.io/ -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
API Keyをつけても変わらなかった。
INFURAを使っているクライアントの一つ、MetaMaskでは、どうやら内部でフィルターしているらしい。 https://ethereum.stackexchange.com/questions/34698/how-does-metamask-watch-filter-events
というわけで、やっぱり自分でノード立てたほうがいい。