2017-01-10 8 views
1

ブロックチェーンをローカルで実行しています。私はnode-json-rpcモジュールを使ってrpc呼び出しを行っていました。私はerisdb.getBlockchainInfoのようないくつかの呼び出しを行うことができました。 私はerisdb.eventSubscribe呼び出してみました:erisdb.eventPoll rpc callを呼び出せません

client.call(
    { 
    "jsonrpc": "2.0", "method": "erisdb.eventSubscribe", "params": { 
     "event_id": "NewBlock" 
    }, "id": "0" 
    }, 

をし、それが正常には私にをsub_idは返さ:

{ result: { sub_id: '7878EB2ECC668AEE19D958B89C4ED6E145D9298E91366D67F93CD2A20E995829' }, 
     error: null, 
     id: '0', 
     jsonrpc: '2.0' } 

私はerisdb.eventPollコールを呼び出すためにをsub_idはことを使用:

client.call(
    { 
    "jsonrpc": "2.0", "method": "erisdb.eventPoll", "params": { 
     "sub_id":"7878EB2ECC668AEE19D958B89C4ED6E145D9298E91366D67F93CD2A20E995829" 
    }, "id": "1" 
    }, 

が、それは次のようエラーを与えている:

{ result: null, 
    error: 
    { code: -32603, 
    message: 'Subscription not active. ID: 7878EB2ECC668AEE19D958B89C4ED6E145D9298E91366D67F93CD2A20E995829' }, 
    id: '1', 
    jsonrpc: '2.0' } 

私のエリス-DBのバージョンは0.12.1です。

答えて

0

現在、2つの異なるAPIがあります。使用しているものは、「v0」APIと呼ばれます。これは、長いポーリングのJavascriptクライアントに最適化されています。私の推測では、あなたのサブスクリプションはハードコードされたタイムアウトが10秒になる前に刈り取られています。 eventSubscribeコールの後にeventPollコールをすばやく呼び出そうとしましたか?

これは 'v0'刈り取り機能です:https://github.com/eris-ltd/eris-db/blob/master/event/event_cache.go#L72。最近ポーリングされていない古いサブスクリプションをクリアするループで実行されます。あなたがポーリングする前に10秒以上待っていれば、あなたのサブスクリプションはおそらく刈られている(削除されている)。

私たちは、(Tendermintコンセンサスエンジンの遺産のために) 'tendermint' APIと呼ばれるチェーン管理用に最適化された別のAPIを持っています。これはパラレルAPIのもので、eris-pmツールで使用されます。また、websocketエンドポイントによってアクセス可能な購読メソッドもあります。これは、そのサブスクリプションが決して恩恵を受けることがないため、あなたにとって有用かもしれません。

あなたはこのようにそれを試してみることができます:

あなたのチェーンを起動し

:のWebSocketエンドポイントに

$ go get github.com/raphael/wsc 

接続:

$ eris chains start testchain 

は簡単なのWebSocketクライアントを取得

$ wsc ws://0.0.0.0:46657/websocket 
2017/01/21 01:03:51 connecting to ws://0.0.0.0:46657/websocket... 
2017/01/21 01:03:51 ready, exit with CTRL+C. 

は、単一の行として端子に{ "jsonrpc": "2.0", "method": "subscribe", "params": ["NewBlock"] }を貼り付けてNewBlockイベント登録:

>> { "jsonrpc": "2.0", "method": "subscribe", "params": ["NewBlock"] } 

次に、あなたは次のように新しいブロックのイベント(約1秒)のストリームを受信する必要があります:あなたは

<< {"jsonrpc":"2.0","id":"#event","result":[19 {"event":"NewBlock","data":[1,{"block":{"header":{"chain_id":"testchain","height":206320,"time":"2017-01-21T01:04:01.095Z","num_txs":0,"last_block_hash":"2DB0D0AE6D92DA6DA07F8E7D1605AAB6CB96D8D2","last_block_parts":{"total":1,"hash":"A4AD1708714CF0BE3E5125B65F495DDDFA1ED8D9"},"last_commit_hash":"4C301C0367B7CECDD4E00C955D2F155802B2377E","data_hash":"","validators_hash":"46E43215C6C332446114BF7320D2D007114C5EEB","app_hash":"9A72DE9AAD6BD820A64DB98462CD706594217E1 
<< 1"},"data":{"txs":[]},"last_commit":{"precommits":[{"height":206319,"round":0,"type":2,"block_hash":"2DB0D0AE6D92DA6DA07F8E7D1605AAB6CB96D8D2","block_parts_header":{"total":1,"hash":"A4AD1708714CF0BE3E5125B65F495DDDFA1ED8D9"},"signature":"45A6C3D0B0BD380A239F014681A29FD6217B52653CC7FC189FF5B7DC840A61062CF12FC652687A30A5CBBF0270937F32542D6075BA94A12180568560B322EC07"}]}}}]}],"error":""} 

このwebsocket APIを使用してチェーンとやりとりするプログラム可能なwebsocketクライアントを使用すると、購読者は決して恩恵を受けることはありません。

すぐに使用できるようにし、よりよく文書化する必要があるこれらのAPIの大規模な統合が計画されています。

デバッグの手助けが必要な場合は、https://monax.slack.com/

にご登録ください
関連する問題