Sui交易端到端执行时间优化:能否逼近500ms?
Sui端到端交易执行时间的影响因素及优化可能性
一、影响端到端交易执行时间的核心因素
从Web应用发起请求到Sui区块链完成交易的全流程中,以下是关键的耗时影响点:
- 网络链路延迟:本地应用与RPC节点的地理位置差异是主要瓶颈之一。如果使用海外公共测试网/devnet节点,国内访问的往返延迟通常可达500-800ms,直接拉高整体耗时。
- RPC节点负载与性能:公共RPC节点往往承载大量用户请求,队列等待时间、节点硬件资源不足都会增加交易处理的等待时长。
- 交易确认策略:
signAndExecuteTransaction默认可能等待交易的最终共识确认,而Sui文档中提到的“半秒内完成”仅针对自有对象交易的即时执行阶段(无需共识),若等待最终性会额外增加耗时。 - 交易构建与签名开销:本地签名环境性能、交易构建中的冗余步骤,会贡献少量但不可忽视的延迟。
- 节点状态同步:若RPC节点未同步到最新链上状态,会等待状态更新后再处理交易,进一步拉长耗时。
二、能否将端到端时间缩短至500ms?
Sui文档中“自有对象交易可在半秒内完成”的描述,指的是交易在链上的执行环节,不含网络往返、RPC节点处理的额外延迟。要实现端到端接近500ms的目标,需针对性优化:
1. 优化网络链路
选择就近部署的RPC节点(如国内节点或自行搭建的本地/近地节点),可将网络往返延迟压缩至200ms以内,这是降低整体耗时的核心措施。若一直使用海外公共节点,1400-1700ms属于合理预期。
2. 调整交易确认模式
在调用signAndExecuteTransaction时,修改确认选项,仅等待即时执行结果而非最终共识:
await client.signAndExecuteTransaction({ transaction: tx, signer: playerKeypair, options: { showEffects: true, waitForFinality: false // 跳过共识最终性等待 } });
自有对象交易无需经过共识,即时执行后即可获取结果,这能省去等待共识的数百毫秒耗时。
3. 使用高性能RPC节点
切换到负载较低的专用RPC节点(如付费服务或自行部署的节点),避免公共节点的资源竞争,提升交易处理速度。
4. 确保交易仅涉及自有对象
你的合约操作的DuelistCap是自有对象,符合Sui单签交易的快速执行条件。需确保交易逻辑中无隐含的共享对象交互,否则会触发共识流程,耗时大幅增加。
结合以上优化,端到端时间完全有可能接近500ms;若无法优化网络链路(如必须使用海外节点),1400-1700ms则是正常的预期值。
示例代码
Move合约
module duel::game { struct DuelistCap has key { id: UID, opponent_force: u16, opponent: address, } public fun cast(caster_cap: &mut DuelistCap) { let damage = 14; if (caster_cap.opponent_force <= damage) { caster_cap.opponent_force = 0; } else { caster_cap.opponent_force = caster_cap.opponent_force - damage; }; } }
Web端调用代码
async function cast(playerKeypair, duelistCapId) { const tx = new Transaction(); tx.moveCall({ target: `${PID}::game::cast`, arguments: [tx.object(duelistCapId)], }); await client.signAndExecuteTransaction({ transaction: tx, signer: playerKeypair, }); }
内容的提问来源于stack exchange,提问作者Dmitry Shvetsov
相关产品推荐
相关产品推荐

