NFT铸造的效率及其对Sui网络的影响

使用对象模型,特别是拥有对象,Sui网络被构建为能够处理每秒数十万笔交易(TPS),因为仅修改特定拥有对象的交易可以并行执行而不会相互冲突:

  1. Alice 给她的英雄NFT添加盔甲。她拥有盔甲和英雄NFT。
  2. Bob 给Alice发送一些SUI作为礼物,这会修改他们各自的主要Coin对象。

以上两笔交易不涉及相同的对象,可以并行运行,从而显著减少执行时间。此外,涉及拥有对象的交易不需要通过完整的共识过程,这通常对大多数网络来说既繁重又缓慢。

构建能够在Sui网络上表现良好的可扩展应用程序的一般经验法则是尽量减少争用——如果太多应用程序构建不当,它们可能会占用更多的执行时间和Sui网络的资源, 从而可能导致Sui网络未能达到设计的规模。

开发人员应尽量避免以下一些错误:

  1. 在没有理由的情况下使用可修改的共享对象。例如,在NFT铸造期间,Collection对象有一个供应字段,每次铸造新NFT时都会增加。 这种供应字段也可以用来生成每个NFT的递增ID(例如SuiFren #124)。如果可能,应避免这种情况。
  2. 使用向量跟踪哪些地址已经铸造了NFT。这在允许列表功能中很常见,只有被列入允许名单的特定账户才能铸造NFT。 铸造模块会跟踪谁已经铸造过,因此一个账户最多只能铸造一个NFT。如果开发人员使用向量或vec_set/vec_map(底层都是使用向量), 允许列表会被不正确地实现。如果允许列表足够大(例如超过10,000项),检查某个地址是否已经铸造过会对网络非常昂贵,因为这需要很长的执行时间。在这种情况下,使用表格会更好。
  3. 尽可能冻结对象而不是共享它们,如果它们从未改变。