Flow区块链同一区块并发交易的字段可见性保障问询
Flow区块链同一区块内交易竞态条件问题确认
我正在梳理Flow区块链中同一区块内交易非确定性执行场景下的竞态条件问题。假设有两笔交易通过调用资源方法修改资源状态,示例代码如下:
pub resource Example { pub let flag: Bool ... pub fun flipTrue() { if this.flag == true { panic("this flag is true, we are not allowed to set it true again") } // side effect A this.flag = true; } pub fun flipFalse() { if this.flag == false { panic("we are not allowed to do this if the flag is already false"); } // side effect B this.flag = false; } }
初始状态下flag为false,若同一区块内同时执行调用flipTrue的FlipTrueTx和调用flipFalse的FlipFalseTx,无法预测执行结果,初步推测有三种可能:
- 某种机制阻止两笔交易执行,均触发panic;
- 交易可按任意顺序执行,且彼此可见状态,结果具有非确定性;
- 交易可按任意顺序执行,且彼此不可见状态,仅
FlipTrueTx能成功执行,FlipFalseTx始终触发panic。
我已查阅相关文档未找到明确说明,尝试构建测试环境存在不确定性,通过查看Flow FVM设计文档,推测每个执行节点需单线程处理区块内全部交易,特此请求对此机制及执行结果进行确认。
内容的提问来源于stack exchange,提问作者Jamil R Khan
相关产品推荐
相关产品推荐

