超级账本结构定时交易/事件



据我所知,在Hyperledger Fabric中没有办法进行定时交易。

考虑使用弹珠示例的用例。假设我想在收到弹珠 600 秒后转移它。Fabric SDK 是否为我提供了在收到弹珠时获取事件的 unix 时间戳,然后通过计算时间戳 + 600 将另一个事务发送到队列,该队列将在 600 秒后发生?

当您谈论实际收到弹珠的时间时,那么在我看来,您必须在两边编写一些代码。 即在客户端和链码端。

我不确定如何仅使用SDK/客户端代码执行相同的操作。

如果你愿意在你的事务处理逻辑中写一些东西,github.com/hyperledger/fabric/core/chaincode/shim包中有一个方法ChaincodeStubInterface.GetTxTimestamp((来获取Fabric处理交易的时间。

可以将相同的内容返回到 SDK,然后返回到外部调用程序。然后计算 +600 秒并发送下一笔交易。

不,没有办法从链码中自动执行定时交易,尝试在那里处理它是不好的做法。如果您尝试从链码中创建时间戳,则可以保证所有处理交易提案的 Peer 节点将返回不同的值,因为它们并非都在同一个实例中处理该提议。由于结果集将返回非确定性结果,因此事务在进入验证阶段时将始终失败。如果您尝试使用stub.GetTxTimestamp()则只会返回客户端本身发送的时间戳,根据文档。

最好的方法是使用纯 sdk 代码。获取必要的事务建议并发送事务以进行排序后,侦听事务提交事件。

收到交易承诺通知后,您可以排队等待另一笔交易在 600 秒后发送背书和承诺。具体方式因 SDK 而异,但所有 SDK 都支持交易承诺通知。

最新更新