0

我目前正在使用版本2.1fabric-sdk-node尝试在应用程序中使用Network.addCommitListener()函数实现事务提交侦听器,但是在提交事务以供背书后我无法接收任何事件。

为了实现这一点,我使用了以下代码:

var listener = (error, event) => {
            if (error) {
                // Handle peer communication error
            }
            else {
                // Handle transaction commit event
            }
        };

        const peers = network.channel.getEndorsers();
        await network.addCommitListener(listener, peers, txId);

listener对象似乎存在一些问题,因为根据官方文档,侦听器对象的类型定义为CommitListner,但无法弄清楚如何在我的解决方案中实现它。任何帮助,将不胜感激。

4

1 回答 1

1

如果您只想接收来自网络中所有对等方的提交事件,那么您可以通过简单地使用NETWORK_SCOPE_ALL_FOR_TX默认事务事件处理程序来实现这一点。其他一切都由您负责,Transaction.submit()只有在从所有可联系的对等方收到提交事件后,所有调用才会返回。

如果您想实现自己的自定义提交等待逻辑而不是使用默认实现之一,您应该实现自己的事务事件处理程序。这将在提交流程中的适当时间被调用并传递您需要的信息。

本页详细介绍了上述两种方法,包括本页底部的示例事务事件处理程序实现(使用提交侦听器)的链接:

最后一种方法,我建议仅用于更高级的场景,您确实需要将事务提交为即发即弃并异步管理您自己对事务提交事件的处理,即在调用之前获取事务 ID 并附加一个提交侦听器提交以确保您不会错过事务提交事件。然后应该使用NONE事务事件处理程序执行提交,以便在事务成功发送到订购者后立即返回。这需要至少 2.1.1 版的fabric-network,其中引入了在调用提交之前获取事务 ID(并覆盖每个事务的默认事务事件处理程序)的能力。

上述所有模式在 v1.4 版本中也应该是可能的,但事件监听 API 略有不同。有关更多详细信息,请参见此处:

于 2020-05-20T10:27:23.273 回答