我想了解 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 笔无效?
这里是链代码示例的链接(来自官方示例存储库