如果对等方调用相同的函数,执行顺序验证架构会产生大量无效交易吗?

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

我想了解 Hyperledger Fabric 的 execute-order-validate 架构相对于 order-execute 架构在效率方面的优势。

“执行顺序验证”方法允许节点执行交易而无需考虑其顺序。这允许对等方在“执行”阶段并行运行事务。 但是,根据我的理解,在validate阶段,所有更新世界状态中同一组密钥的交易(除了第一个交易)都将失效,以避免双花。

鉴于此,执行订单验证架构是否会产生大量无效交易?

下面是一个示例智能合约,可以说明我的担忧: reserveTicket(eventId, ticketingAgencyId, ticketCount){ //check if there is not enough tickets left if (worldState[eventId] < ticketCount) throw "there is not enough tickets" worldState[eventId] -= ticketCount; if (worldState[eventId + ":" + ticketingAgencyId] == null) worldState[eventId + ":" + ticketingAgencyId] = 0; worldState[eventId + ":" + ticketingAgencyId] += ticketCount }

在这个智能合约中,实现了门票预订系统。对于某个特定活动,可以有许多票务机构可以通过调用

reserveTicket
 功能来预订门票。

如果有 10 个票务代理机构(例如,

agency1

agency10

)同时预订同一活动(例如,

event9999
)(即订购者将把这 10 笔交易作为相同的块),这是否意味着 9 个交易将在
validate
阶段失效,因为所有交易都将更新世界状态中的相同密钥:

worldState["event9999"] -= ticketCount;

这是否会降低

execute-order-validate
 的效率,因为 10 笔交易中有 9 笔需要重试?

order-execute
的方法中,10笔交易不会并行执行,但是,只要剩下足够的票,所有交易都会成功。

我的理解

execute-order-validate
是否正确?如果是,有没有办法避免 10 笔交易中的 9 笔无效?

这里是链代码示例的链接(来自

官方示例存储库
hyperledger-fabric
2个回答
0
投票

HL 织物样品 - 高吞吐量

有四种不同的方法可以最大限度地减少按键冲突。 我将添加有关该主题的精彩文章(3 部分)的链接:

https://blog.softwaremill.com/concurrent-smart-contracts-in-hyperledger-fabric-blockchain-part-1-bba32b2c0e08

© www.soinside.com 2019 - 2024. All rights reserved.