如何在Hyperledger Fabric中监听事件(提交事件)? [英] How to listen to the event(commit event) in Hyperledger Fabric?

查看:269
本文介绍了如何在Hyperledger Fabric中监听事件(提交事件)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们设置了一个Fabric服务器,并将一些事务放入其中.我们还有一些将与光纤服务器配合使用的应用程序.这是一种情况.

We set up a fabric server, and put some transaction into it. And we have some applications those will cooperate with the fabric server. Here is a situation.

  • 应用程序使用 fabric-sdk-java fabric-sdk-node
  • 发送事务
  • 结构执行 chaincode
  • 结构将结果通知给应用程序/应用程序侦听交易事件(提交交易,生成区块链,追加区块链,更新世界状态等)
  • 应用程序将交易结果通知海关.

您知道,执行 chaincode 会花费一些时间.特别是, blockchain 将在数十秒后提交.因此,我希望 peer 回调一个 url 或只让应用程序知道执行结果.有可能吗?

As you know, the excution of the chaincode would cost some time. Especially, the blockchain would be commit after tens of seconds. So I want the peer callback a url or just let the application know the result of the execution. Is is possible?

推荐答案

您可以注册到甚至集线器,并列出有关正在提交的阻止/事务的通知.如果您正在寻找示例,请考虑查看 fabcar 来自织物样品.特别是,您可能想看看 invoke.js .

You can register to even hub and listed for notifications of block/transaction being committed. If you are looking for example please consider to take a look at fabcar from fabric-samples. In particular you might want to take a look on 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.

Similar API exists also in Java and Golang SDKs.

这篇关于如何在Hyperledger Fabric中监听事件(提交事件)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆