协议与网络限制
为保证网络安全与稳定,Sui 在协议层规定了一系列限制。超过这些限制时,交易会被网络拒绝或执行时中止。这些限制由协议配置定义,只能通过网络升级修改。开发应用时需在设计阶段就考虑这些上限。
交易大小
单笔交易的总大小上限为 128KB,包括交易负载、签名和元数据。超过后交易会被网络拒绝。
对象大小
单个对象的数据大小上限为 256KB。超过后对象无法被接受。若需存储更多数据,可使用「基础对象 + 动态字段」(如 Bag)等方式拆分。
单参数大小(Pure 参数)
单笔交易中,单个纯参数的大小上限为 16KB。若传入的向量等超过该限制,会导致执行失败。例如要传入超过约 500 个 address(每个 32 字节)的列表,应在 PTB 或 Move 内用 vector::append 等动态拼接,而不是一次性传入超过 16KB 的单个参数。
单笔交易创建的对象数
单笔交易中新创建的对象数量上限为 2048。超过后交易会被拒绝。动态字段的 key 和 value 也计为对象,因此单笔交易中新创建的动态字段数量上限约为 1000(动态对象字段同理)。
单笔交易访问的动态字段数
单笔交易中被访问的动态字段数量上限为 1000。超过后交易会被拒绝。
单笔交易发出的事件数
单笔交易中发出的事件数量上限为 1024。超过后交易会中止。
小结
| 限制项 | 上限 | 超出后果 |
|---|---|---|
| 交易大小 | 128KB | 交易被拒绝 |
| 对象大小 | 256KB | 对象被拒绝 |
| 单纯参数大小 | 16KB | 执行失败 |
| 单笔创建对象数 | 2048 | 交易被拒绝 |
| 单笔创建动态字段数 | 约 1000 | 交易被拒绝 |
| 单笔访问动态字段数 | 1000 | 交易被拒绝 |
| 单笔事件数 | 1024 | 交易中止 |
设计大对象、批量铸造、复杂 PTB 或高吞吐事件时,请对照上述限制做容量与拆分设计。更多实践可参考「安全最佳实践」与「代码质量检查清单」。