infuraを使うときに詰まった点

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}'
何も返ってこない。ステータスコードは405(Method Not Allowed)だった。

API Keyをつけても変わらなかった。

INFURAを使っているクライアントの一つ、MetaMaskでは、どうやら内部でフィルターしているらしい。 https://ethereum.stackexchange.com/questions/34698/how-does-metamask-watch-filter-events

というわけで、やっぱり自分でノード立てたほうがいい。