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

所有评论

推荐阅读

  • 欧盟将对美国的贸易反制措施暂停6个月

    市场消息:欧盟将对美国的贸易反制措施暂停6个月

  • 去中心化操作系统 OpenMind 完成 2000 万美元融资,Pantera Capital 领投

    智能机器去中心化操作系统 OpenMind 宣布完成 2000 万美元融资,Pantera Capital 领投,Coinbase Ventures、Digital Currency Group 和 Ribbit 等参投。 据悉,这家初创公司正在开发一款名为 FABRIC 的“硬件无关”操作系统,旨在支持“智能机器融入日常生活”。该协议为支持人工智能的机器人提供了一种通信和协调的方式。

  • 加强个人境外收入监管 境外买卖股票收入也要缴税

    《金融时报》刊文,据了解,近期有纳税人收到了税务部门通知,告知其需要依法办理境外所得申报并缴纳相应税款。“根据我国个人所得税法,个人股票交易所得属于财产转让所得,应当适用20%的税率按次征收。其中,个人在境内二级市场的股票交易所得暂免征收个人所得税;在境外直接进行股票交易所得没有免税规定,需要在取得所得的次年申报纳税。”吉林财经大学税务学院院长张巍解释说。为了更加合理的征收,我国税务部门在征管时,允许纳税人按照纳税年度盈亏相抵,但不允许跨年互抵。依法纳税是每个公民应尽的义务。个人未申报或者未如实申报境外所得,除了会被税务机关要求补缴税款外,还会被加收滞纳金,情形严重的还可能被稽查部门立案检查,将面临税务处罚。纳税人如果发现自己此前申报个税时,存在少报、漏报境外所得的,要及时补正。

  • 美国SEC文件显示特斯拉批准向马斯克授予9600万股股票奖励

    美国SEC文件显示:特斯拉(TSLA.O)批准向马斯克授予9600万股股票奖励,马斯克将按每股23.34美元的价格购买已获授股票。

  • Binance Alpha:持有至少 200 币安 Alpha 积分的用户可申领 1000 个 DARK 代币空投

    据官方公告,Binance Alpha 是首个上线 DarkStar(DARK)的平台,Alpha 交易将于 2025 年 8 月 4 日 20:00(UTC+8)开始。 交易开始后,持有至少 200 个币安 Alpha 积分的用户可申领 1000 个 DARK 代币空投。先到先得。若活动未结束,则分数门槛将每小时自动降低 15 分。 请注意,申领空投将消耗 15 个币安 Alpha 积分。用户需在 Alpha 活动页面于 24 小时内确认申领,否则视为放弃领取空投。

  • 香港《稳定币条例》正式生效:储备资产须全额覆盖流通面值

    8月1日,香港《稳定币条例》正式生效,建立起稳定币发行人牌照制度,完善香港对虚拟资产活动的监管框架。大湾区国际资讯科技协会会长杨德斌表示,如今国际上稳定币的发展已经达到一定规模。香港在这个时点推出《稳定币条例》,是在监管方面与时俱进的体现。与国际标准接轨,中国香港在制定稳定币相关规定时也力求与全球其他国家和地区的标准接轨。根据香港《稳定币条例》,持牌人必须确保其发行的指定稳定币的储备资产的市值,始终不低于该类稳定币尚未赎回且流通中的面值。持牌人应考虑储备资产的风险状况,确保有适当的超额抵押以覆盖市场风险。

  • 分析师:降息预期升温与SEC新政共振,市场情绪回暖

    Kronos Research 首席投资官 Vincent Liu 表示,在宏观不确定性与机构买盘交织下,当前市场呈现「谨慎乐观」情绪。恐惧与贪婪指数趋向「贪婪」,鲸鱼买入与降息预期正推动交易员重新配置风险资产。 投资者正关注将于 8 月 12 日公布的美国 7 月 CPI 数据,作为下一轮加息或降息决策的关键指标。尽管美联储在 7 月 FOMC 会议上维持利率不变,鲍威尔表示 9 月降息仍取决于经济数据,但 CME 美联储观察数据显示,市场预期有逾 80% 概率将下调 0.25 个百分点。 此外,Liu 认为美国 SEC 启动的「Project Crypto」或将在中长期利好市场。该项目将通过明确代币分类与引入 DeFi 创新豁免机制,降低监管不确定性、推动 DeFi 增长,并增强市场信心。

  • 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。

  • Kontos:融合AI与链抽象技术,打造智能化全链交易新范式

    Kontos的愿景在于简化用户体验,提升交互效率,形成一个基于AI驱动的全链交易平台,彻底改变用户与区块链网络交互的方式,为用户提供一个无缝、智能和以用户为中心的交易体验。