Cointime

扫码下载App
iOS & Android

给 Sui 开发者的入门指南:需要注意哪些事项?

项目方

Sui Network 主网启动,开发者又多了一块构建 DApp 的新土壤。

撰文:Sui Network

Sui 是基于第一原理重新设计和构建而成的 L1 公有链,旨在为创作者和开发者提供能够承载 Web3 中下一个十亿用户的开发平台。Sui 上的应用基于 Move 智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。Sui 主网已于 2023 年 5 月 3 日正式上线

本文将为开发人员在 Sui Network 上的最佳实践做快速参考。

Move

常规知识

阅读有关包升级的详细信息并编写对升级友好的代码。

  • 包是不可变的,有漏洞的包代码可以永远调用,解决方案是在对象层面添加保护。
  • 如果将包从 P 升级到 P',依赖于 P 的其他包和客户端将继续使用 P,而不是自动更新到 P'。因此,依赖于包和客户端的代码都必须更新以明确地指向 P'。
  • 期望被依赖包扩展的包,可以通过提供符合所有版本标准的(不变的)接口,来避免每次升级时破坏它们之前的扩展。以 Wormhole 跨链桥为例,通过 Wormhole 作为桥梁发送消息,要想生成发送消息的扩展包,可以使用任意版本 Wormhole 包中的 prepare_message 指令来生成 MessageTicket,而发送消息的客户端代码必须将该 MessageTicket 传递到最新版本包中的 publish_message。
  • public 函数不能删除或更改,但 public(friend) 函数可以。您可以自由地使用 public(friend) 或仅自己可见功能,除非您要将现在的库函数永远公开。
  • 不能删除 struct 类型、不能添加新字段(尽管您可以添加动态字段)或通过升级新功能。添加新类型时请谨慎思考,一旦添加后将永远存在!

使用 vector 支持的集合(如 vector, VecSet, VecMap, PriorityQueue),最多不超过 1000 个数据项。

  • 使用动态字段支持的集合(如 Table、Bag、ObjectBag、ObjectTable、LinkedTable)用于任何允许第三方添加的集合、更大的集合和未知大小的集合。
  • Sui Move 对象最大为 250KB——任何创建更大对象的尝试都将导致事务中止,请确保您的对象没有不断增长大过 vector 支持的集合。

如果您的函数 f 需要来自调用者的付款,例如使用 SUI ,请使用 fun f(payment: Coin) 函数而不是 fun f(payment: &mut Coin, amount: u64) 函数。这对调用者来说更安全,因为他们可以准确地知道具体支付数额,并且不需要依靠函数 f 来提取正确的数额。

不需要小幅度优化 gas 消耗。在 Sui 上计算花费成本时,使用四舍五入的方法计算出其最接近的 bucket,因此只有非常剧烈的波动才会导致 gas 的变化。特别是,如果您的交易已经在最低成本范围内,那就不能更便宜了。详情请参照下图。

遵循 Move 编码惯例(Move coding conventions)来获得统一的式样。

可组合性

  • 使用 display 标准自定义您的对象在钱包、应用程序和浏览器中的显示方式。
  • 避免使用「自我转移」功能——任何时候都有可能,从当前函数返回 obj,而不是写入 transfer::transfer(obj, tx_context::sender(ctx)),这允许调用者或可编程交易块(programmable transaction block)使用 obj。

测试

  • 使用 sui::test_scenario`模拟多次交易和多位发送者的测试场景。
  • 使用 sui::test_utilsmodule 通过 assert_eq 测试获得更好的纠错消息,通过 print 调试打印,以及通过 destroy 进行 test-only 销毁。
  • 使用 sui move test --coverage 计算测试时代码覆盖的信息,使用 sui move coverage source --module 查看以红色突出显示的未覆盖行。如果可行,建议将覆盖率设置为 100%。

应用程序

  • 为了获得最佳性能和数据一致性,应用程序应该在同一个全节点上提交写入和读取请求。在 TS SDK 中,这意味着应用程序应使用钱包的 signTransactionBlock API,然后通过调用应用程序全节点上的 execute_transactionBlock 来提交交易,而不是使用钱包的 signAndExecuteTransactionBlock API。这确保了先写后读的一致性——从应用程序的全节点读取将立即反映事务的写入,而不是等待 checkpoint。
  • 为了降低延迟,如果您的应用程序需要知道交易已确认,但不需要立即查看交易效果或读取交易写入的对象 / 事件,请使用带有"showEffects": false 和"showEvents": false 的 executeTransactionBlock。
  • 应用程序应该将频繁读取的数据本地缓存,而不是从全节点频繁抓取。
  • 尽可能地使用可编程交易块(programmable transaction blocks)来组合现有的链上功能,而不是发布新的智能合约代码。可编程交易块允许大规模批次处理和异构组合,进一步降低已经很低的 gas 费。
  • 应用程序应该将对 gas 预算、gas 价格和 coin 选择权留给钱包,这将为钱包提供了更大的灵活性,并且钱包有责任试运行交易以确保交易不会失败。

签名

  • 永远不要签署两笔触及同一独享对象的并发交易,要么单独使用独享对象,要么等待一笔交易结束后再发送下一笔交易。违反此规则可能会导致客户端模棱两可,从而同时锁定两个交易中涉及的独享对象,直到当前 epoch 结束。
  • 任何发起交易的 sui client 命令(例如 sui client publish、sui client call)都可以接受 --serialize-output 标志以输出要签名的 base64 交易。
  • Sui 支持多种签名方案(signature schemes)进行交易签名,包括包括本机多重签名。
评论

所有评论

推荐阅读

  • Web3游戏开发商Seeds Labs完成1200万美元种子轮融资,Solana Foundation等参投

    Web3游戏开发商Seeds Labs宣布完成1200万美元种子轮融资, Avalanche 旗下Blizzard Fund、Solana 基金会、Krust、Hashkey Capital、UOB Ventures、Signum Capital、IVC 和 Emoote等参投。Seeds Labs成立于2021年,是一家基于Solana区块链的游戏基础设施开发商,旨在缓解近年来玩家和开发者之间日益紧张的关系,其旗舰产品全球多平台互联近战大逃杀Web3游戏Bladerite计划于本月发布。

  • 香港比特币ETF昨日总申购量101.6枚,以太坊ETF连续两日呈现净赎回

    根据 SoSo Value 数据,香港比特币现货 ETF 昨日(5 月 8 日)单日净申购比特币 101.6 枚,比特币持有总量为 4350 枚,单日成交额为 267 万美元,总净资产为 2.7 亿美元,单日 BTC 申购量来自博时 HashKey 以及华夏比特币 ETF。在日内折溢率方面,华夏比特币 ETF、博时 HashKey 比特币 ETF 以及嘉实比特币 ETF 分别呈现-0.55%、-0.03%以及 0.01%的日内折价率。华夏 ETF 持有 2020 枚 BTC 排名第一,博时 Hashkey 以及嘉实 ETF 分别持有 1220 枚以及 1110 枚 BTC。另外,香港以太坊现货 ETF 昨日(5 月 8 日)单日净赎回以太坊 644.78 枚,以太坊持有总量为 16100 枚,单日总成交额为 173 万美元,总净资产约为 4835 万美元。值得注意的是,香港以太坊现货 ETF 连续两日呈现净赎回。目前博时 Hashkey ETF 持有 6500 枚 ETH 排名第一,华夏以及嘉实 ETF 分别持有 5700 枚以及 3900 枚 ETH。注:香港加密 ETF 支持现货申赎机制,净申购是指一定时间段内申购金额和赎回金额之差为正,即买入比卖出多,反之则为净赎回。

  • 特朗普宣布接受加密货币形式的总统竞选捐款

    唐纳德·特朗普(Donald Trump)宣布其正在接受加密货币形式的美国总统竞选捐款。特朗普表示:“拜登甚至不知道加密货币是什么,如果你喜欢加密货币,你最好投票给特朗普。”特朗普还承诺,他将停止美国对加密货币的敌意并拥抱它。(Watcher.Guru)

  • 过去24小时全网爆仓1.42 亿美元,其中多单爆仓9933.14万美元

    据Coinglass数据显示,过去24小时加密货币市场全网合约爆仓总金额为1.42 亿美元,共有 64,153 人被爆仓。

  • 5月09日早间要闻速递

    1.特朗普:将停止美国对加密货币的敌意并拥抱它

  • Uniswap创始人:创始人与VC需停止将初创、未发币加密项目估值定在10亿美元以上

    Uniswap创始人Hayden Adams在社交媒体发文表示,加密货币创始人和风险投资者需要停止在开发初期、尚未发布代币的项目上将估值定在10亿美元以上,直到它们真正值得这个估值为止。构建出价值7-9位数美元的事物是一项不可思议的成就,不是每个项目在刚启动时都需要成为独角兽。此外,Hayden Adams表示,也许有点天真,但我认为作为创始人以公平估值进行融资(真正的人才想要上升空间),以及作为风险投资者以公平估值进行投资(有限合伙人想要上升空间)可以赚取更多的钱。只是这样做更难一些。

  • Cointime 5月5日要闻速递

    1.Justin Bons:SUI的所有“未分配”供应量都已分配2.美联储4月缩表770亿美元,资产负债表规模降至7.4万亿美元以下3.Bitmex前首席执行官:8月之前比特币交易价格将在6万至7万美元之间4.friend.tech代币FRIEND持仓前13名中仅4人卖出部分代币5.ether.fi质押大户发起37140枚ETH的质押提款申请6.某交易者花费402枚ETH买入732,326枚FRIEND,未实现利润65.3万美元7.某地址已通过BunnySwap累计卖出677197枚FRIEND枚空投,获利约115万美元8.一多签名钱包从Binance提取9158.5亿枚PEPE9.NFT项目Blob团队在比特币第四次减半区块史诗聪上铭刻符文EPIC•EPIC•EPIC•EPIC10.区块链分析师:比特币可能迎来6至12个月的“抛物线上涨”

  • Andromeda推出Web3操作系统,为无缝多链未来铺平道路

    aOS允许用户、创建者和开发人员快速构建dApp,将开发时间从几个月缩短到几分钟。

  • 偶像与音乐节,新的融合模式能否运用好Web3的明星效应?

    MEET48 打造了一个AI 和 WEB 3.0 结合的娱乐领域粉丝平台,用户可以在其元宇宙中与偶像互动。

  • Mirror母公司获Electric Capital 1000万美元投资以开发新产品,a16z crypto等提供捐款

    Mirror母公司Reflective Technologies Inc.透露,该公司从Electric Capital处筹集了1000万美元,a16z crypto、Union Square Ventures和Variant也提供了额外捐款,用于开发新产品Kiosk。目前Kiosk仍在开发和寻找创始团队中,将使用Farcaster来增强社交社区内基于区块链的交易。