2017-09-28 6 views
0

ファブリックサーバをセットアップし、トランザクションを投入します。また、ファブリックサーバーと連携するアプリケーションもあります。ここに状況があります。Hyperledger Fabricでイベント(コミットイベント)を聴くにはどうすればいいですか?

  • アプリケーション生地はchaincode
  • ファブリックが、結果についてアプリケーションに通知/アプリケーションは、blockchainを生成し、トランザクションをコミット(トランザクションのイベントに耳を傾けるをexcute fabric-sdk-javafabric-sdk-node
  • との取引を送りますブロックチェーンを追加する、世界の状態を更新するなど)
  • アプリケーションはトランザクションの結果についてカスタムに通知します。

ご存じのように、chaincodeの出現には時間がかかるでしょう。特に、blockchainは数十秒後にコミットされます。ですからpeerコールバックをurlにするか、アプリケーションに実行結果を通知させます。それは可能ですか?

答えて

1

コミット中のブロック/トランザクションの通知用に、偶数ハブに登録し、リストすることができます。例えば、fabcarfabric-samplesから探してみてください。特にinvoke.jsをご覧ください。

var options = { 
    wallet_path: path.join(__dirname, './creds'), 
    user_id: 'PeerAdmin', 
    channel_id: 'mychannel', 
    chaincode_id: 'fabcar', 
    peer_url: 'grpc://localhost:7051', 
    event_url: 'grpc://localhost:7053', 
    orderer_url: 'grpc://localhost:7050' 
}; 



    let eh = client.newEventHub(); 
    eh.setPeerAddr(options.event_url); 
    eh.connect(); 


    let txPromise = new Promise((resolve, reject) => { 
     let handle = setTimeout(() => { 
      eh.disconnect(); 
      reject(); 
     }, 30000); 

     eh.registerTxEvent(transactionID, (tx, code) => { 
      clearTimeout(handle); 
      eh.unregisterTxEvent(transactionID); 
      eh.disconnect(); 

      if (code !== 'VALID') { 
       console.error(
        'The transaction was invalid, code = ' + code); 
       reject(); 
      } else { 
       console.log(
        'The transaction has been committed on peer ' + 
        eh._ep._endpoint.addr); 
       resolve(); 
      } 
     }); 
    }); 
    eventPromises.push(txPromise); 

JavaおよびGolang SDKにも同様のAPIがあります。

関連する問題