如何在Hyperledger Fabric中监听事件(提交事件)?

问题描述 投票:3回答:2

我们设置了一个结构服务器,并将一些事务放入其中。我们有一些应用程序将与Fabric服务器合作。这是一种情况。

  • 应用程序使用fabric-sdk-javafabric-sdk-node发送交易
  • 面料执行qazxsw poi
  • 结构通知应用程序结果/应用程序监听事务事件(提交事务,生成区块链,附加区块链,更新世界状态等)
  • 应用程序通知自定义事务结果。

如你所知,chaincode的执行将耗费一些时间。特别是,chaincode将在几十秒后提交。所以我希望blockchain回调一个peer或者只是让应用程序知道执行的结果。有可能吗?

hyperledger-fabric hyperledger
2个回答
3
投票

您可以注册到甚至集线器并列出正在提交的块/事务的通知。如果您正在寻找示例,请考虑从url查看fabcar。特别是你可能想看看fabric-samples

invoke.js

Java和Golang SDK中也存在类似的API。


-4
投票

Hyperledger Composer改变了我们使用Hyperledger Fabric Blockchain的方式。虽然我不能在这里给你所有的介绍,但我提供了一段关于如何(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); )的代码:

  1. 定义事件
  2. 从您的交易中发出一个事件
  3. 收听应用程序中的事件

1)定义事件:在这里,我有一个由医生,患者和消息组成的事件。

credits to

2)从事务中发出事件:这里我们将拥有Chain代码的逻辑。

    event MedicalEvent {
    --> Doctor thedoctor
    --> Patient thePatient
    o String theMessage
    }
    transaction sampleTransaction {
    --> Doctor thedoctor
    --> Patient thePatient
    }

3)听取事件:在这里我让我的Nodejs听取事件。

    /**
     *@ALL NECCESSARY DECORATIONS GO HERE
     /
    sampleTransaction(obj) {
    var factory = getFactory();
    var patient = obj.thepatient;
    var doctor = obj.thedoctor;
    var message = 'Take your medications PROPERLY';

    return getParticipantRegistry('org.acme.WHATEVER.Patient')
    .then(function(patientRegistry) {
       var basicEvent = factory.newEvent('org.acme.WHATEVER', 'addMeLiveEvent');
       basicEvent.theDoctor=doctor;
       basicEvent.thePatient=patient;
       basicEvent.theMessage = message;
       emit(basicEvent);
     })
    }
© www.soinside.com 2019 - 2024. All rights reserved.