共享对象 - 并行执行和共识

作为 Sui 开发人员,了解以下隐藏知识是很有用的:一般来说,最好尽可能多地在智能合约中使用归属对象。 共享对象通常只用于跨多个用户共享状态的情况,如果该状态不需要改变,建议优先使用不可变对象而非共享对象。

共享对象在 Sui 网络上通过一个单独的执行路径进行处理,因为它需要完全共识。 如果任何用户都可以更改共享对象,可能会因为顺序不同而导致不同的最终结果。 因此,Sui 网络需要使用完整的共识过程,并确保所有 Sui 验证器在将结果提交到存储之前同意顺序和最终结果。 由于这一原因,共享对象的执行时间会更长,并且会给 Sui 网络带来比归属对象或不可变对象更高的成本。 可以这样理解:如果尽可能多的对象是归属对象或不可变对象,Sui 网络的工作效率将会是最好的。

一般的经验法则是:

  1. 如果数据从未改变,则使用不可变对象作为合约的所有共享状态。
  2. 对于可以更新的共享状态,使用共享对象。
  3. 对于其他所有情况,使用归属对象。