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)进行交易签名,包括包括本机多重签名。
评论

所有评论

推荐阅读

  • 本周重要事件与数据预告:美国中期选举、非农、中国外储

    11月2日,本周重要事件与数据预告如下: 1. 周一:①数据:中国10月RatingDog制造业PMI;瑞士9月实际零售销售年率;法国、德国、欧元区、英国10月制造业PMI终值;美国10月标普全球制造业PMI终值;美国10月ISM制造业PMI;美国9月营建支出月率;②事件:今日有1万亿隔夜逆回购、560亿元7天期逆回购到期。③财报:苹果(AAPL.O)、Palantir(PLTR.N)等。 2. 周二:①数据:澳大利亚至11月3日澳洲联储利率决定;瑞士10月CPI月率;美国9月JOLTs职位空缺;美国9月工厂订单月率;②事件:澳洲联储公布利率决议和货币政策声明,主席布洛克召开货币政策新闻发布会;2027年FOMC票委、芝加哥联储主席古尔斯比发表讲话;欧洲央行管委拉德夫、穆兰、科赫尔、多伦茨等发表讲话;2026年美国中期选举;③假期:日本东京证券交易所因文化日休市一日;④财报:辉瑞(PFE.N)、AMD(AMD.O)、BioNTech SE(BNTX.O)等。 3. 周三:①数据:美国当周API原油库存;中国10月RatingDog服务业PMI;法国、德国、欧元区、英国10月服务业PMI终值;欧元区10月CPI初值;美国10月ADP就业人数;美国9月贸易帐;美国10月标普全球服务业PMI终值;美国10月ISM非制造业PMI;美国当周EIA原油库存、当周EIA俄克拉荷马州库欣原油库存、当周EIA战略石油储备库存;②事件:欧洲央行管委内格尔、首席经济学家连恩发表讲话;美国财政部发布季度再融资公告;第二十四届中国半导体封装测试技术与市场年会于11月4日-6日在南京丰大国际大酒店举行;③财报:高通(QCOM.O)、Arm(ARM.O)、Uber(UBER.N)、麦当劳(MCD.N)等。 4. 周四:①数据:法国9月工业产出月率;瑞士10月季调后失业率;欧元区9月PPI月率;美国10月挑战者企业裁员人数;英国至11月5日央行利率决定;美国至10月31日当周初请失业金人数;美国10月全球供应链压力指数;美国当周EIA天然气库存;②事件:日本央行公布9月货币政策会议纪要;欧洲央行管委穆兰、执委施纳贝尔等发表讲话; 英国央行公布利率决议、会议纪要及货币政策报告,行长贝利召开货币政策新闻发布会;瑞士央行行长施莱格尔发表讲话;2026年FOMC票委、克利夫兰联储主席哈玛克就稳定币和避险货币汇率问题发表讲话;2027年FO

  • 伊朗外长披露“两天计划” 美方履约方能重启伊美谈判

    当地时间11月1日,伊朗外长阿拉格齐在接受媒体采访时表示,伊朗代表团访问卡塔尔是伊朗与卡塔尔、巴基斯坦等调解方持续沟通的延续。目前,摆在桌面的方案与伊朗此前提出的“七日计划”基本相同。卡塔尔和巴基斯坦等调解方也就此进行了多次磋商和讨论,并提出了比伊朗“七日计划”更具可行性和可操作性的建议。 阿拉格齐表示,卡塔尔提出的建议之一是“将七天期限缩短至五天甚至更短”。目前,伊朗同意一项“两天计划”,即:第一天,美国将采取一系列(履约)措施。第二天,霍尔木兹海峡将开放,海峡交通将恢复到之前的状态。 阿拉格齐指出,现在所有这些问题都摆在了桌面上,只要(美国)遵守伊朗这个为期两天的计划,就能为和平铺平道路,使霍尔木兹海峡恢复正常。在美国履行相关承诺、霍尔木兹海峡开放后,伊朗与美国恢复谈判的道路才会打开。据了解,伊朗提出的美国必须履约的条件包括:确定霍尔木兹海峡通航新航线、解冻伊朗资金、结束包括黎巴嫩在内的地区战争、解除海上封锁、伊朗出口石油豁免权、解除在《伊斯兰堡谅解备忘录》后美国实施的新制裁等。(央视)

  • 以媒:以色列已准备好与美国联手打击伊朗,但具体目标尚不明确

    11月2日,据《耶路撒冷邮报》报道,如果特朗普要求以色列国防军(IDF)在11月3日美国中期选举后参与美军空军对伊朗的军事行动,以军已做好打击准备,但目前局势仍笼罩在诸多不确定性之中。特朗普此前曾在今年8月、10月初及其他多个时点撤回对伊朗发动袭击的威胁,而如今袭击可能性再次上升,部分原因在于各方已尝试通过其他途径争取伊朗让步,特朗普团队中的部分成员也正重新转向支持军事打击。过去一周,超过10架美国军用运输机抵达以色列南部的内瓦提姆空军基地和乌夫达空军基地,似乎是在为一场重大军事行动做准备。另有报道称,美国正向以色列及其他阿拉伯盟友调运防空系统和拦截弹。不过,目前美国在该地区的兵力仍少于此前一些时期的部署规模。但这可能只是部署的开始。美国与以色列对于此类军事行动的具体目标仍存在分歧。(金十)

  • 币安:目前提现量已逐步趋于稳定,提款规模占资产管理规模的比例非常小

    11月2日,据官方消息,币安已于2026年11月1日14:00(东八区时间)起分阶段恢复提现服务。截至20:36(东八区时间),首批涵盖的全部15个网络与资产均已恢复提现。提现量在最初短暂激增后已回落,并如预期逐步趋于稳定,充值量则持续保持较高水平。 11月1日14:00至23:30(东八区时间)期间,我们共处理了46.49亿美元的提现及10.1亿美元的充值,净流出约36.4亿美元。根据截至2026年10月28日最新的储备证明数据,这相当于平台1,710亿美元资产管理总额(AUM)的2.1%。我们已于10月31日08:00(东八区时间)完成新一轮储备证明快照,并启动零知识证明(ZKP)计算。更新后的报告预计将于明日在储备金证明网页站公布。 我们的团队正继续对其余网络与资产进行严格测试。我们深知,安全、可靠地提取资金对您至关重要,并将尽快公布下一阶段的具体安排。请放心,目前市场状况稳定。

  • 币安:目前提现量已逐步趋于稳定,提款规模占资产管理规模的比例非常小

    11月2日,据官方消息,币安已于2026年11月1日14:00(东八区时间)起分阶段恢复提现服务。截至20:36(东八区时间),首批涵盖的全部15个网络与资产均已恢复提现。提现量在最初短暂激增后已回落,并如预期逐步趋于稳定,充值量则持续保持较高水平。 11月1日14:00至23:30(东八区时间)期间,我们共处理了46.49亿美元的提现及10.1亿美元的充值,净流出约36.4亿美元。根据截至2026年10月28日最新的储备证明数据,这相当于平台1,710亿美元资产管理总额(AUM)的2.1%。我们已于10月31日08:00(东八区时间)完成新一轮储备证明快照,并启动零知识证明(ZKP)计算。更新后的报告预计将于明日在储备金证明网页站公布。 我们的团队正继续对其余网络与资产进行严格测试。我们深知,安全、可靠地提取资金对您至关重要,并将尽快公布下一阶段的具体安排。请放心,目前市场状况稳定。

  • 币安:目前提现量已逐步趋于稳定,提款规模占资产管理规模的比例非常小

    11月2日,据官方消息,币安已于 2026 年 11 月 1 日 14:00(东八区时间)起分阶段恢复提现服务。截至 20:36(东八区时间),首批涵盖的全部 15 个网络与资产均已恢复提现。提现量在最初短暂激增后已回落,并如预期逐步趋于稳定,充值量则持续保持较高水平。 11 月 1 日 14:00 至 23:30(东八区时间)期间,我们共处理了 46.49 亿美元的提现及 10.1 亿美元的充值,净流出约 36.4 亿美元。根据截至 2026 年 10 月 28 日最新的储备证明数据,这相当于平台 1,710 亿美元资产管理总额(AUM)的 2.1%。我们已于 10 月 31 日 08:00(东八区时间)完成新一轮储备证明快照,并启动零知识证明(ZKP)计算。更新后的报告预计将于明日在储备金证明网页站公布。 我们的团队正继续对其余网络与资产进行严格测试。我们深知,安全、可靠地提取资金对您至关重要,并将尽快公布下一阶段的具体安排。请放心,目前市场状况稳定。

  • 币安恢复ETH、USDT、USDC、BNB 提现,后续资产逐步开放

    11月1日,币安在 X 平台发布提现更新公告,已恢复部分资产与网络的提现服务: - 以太坊网络:USDC、USDT、ETH - BNB 智能链(BSC):USDC、USDT、BNB 币安表示,完成安全检查之后,会分阶段继续开放更多资产与网络的提现,后续进展将通过币安官方渠道对外发布。

  • BTC突破78000美元

    行情显示,BTC突破78000美元,现报78000.01美元,24小时涨幅达到0.97%,行情波动较大,请做好风险控制。

  • SUI突破2美元

    行情显示,SUI突破2美元,现报2.01美元,24小时涨幅达到7.49%,行情波动较大,请做好风险控制。

  • Web3数据和AI公司Validation Cloud完成1000万美元新一轮融资

    Web3数据和AI公司Validation Cloud宣布从True Global Ventures获得1000万美元融资,该公司计划利用这笔资金扩展其AI产品,实现对Web3数据的无缝访问。 据介绍,该公司的产品平台由三个部分组成:质押、节点API以及数据和AI。在质押方面,Validation Cloud的质押资产已超过10亿美元。Validation Cloud的一些客户包括 Chainlink、Aptos、Consensys、Stellar和Hedera。