撰文:SuiNetwork
本文将为开发人员在SuiNetwork上的最佳实践做快速参考。
Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。Sui主网已于2023年5月3日正式上线。
本文将为开发人员在SuiNetwork上的最佳实践做快速参考。
Move
常规知识
阅读有关包升级的详细信息并编写对升级友好的代码。
包是不可变的,有漏洞的包代码可以永远调用,解决方案是在对象层面添加保护。
如果将包从P升级到P',依赖于P的其他包和客户端将继续使用P,而不是自动更新到P'。因此,依赖于包和客户端的代码都必须更新以明确地指向P'。
数据:Sui网络总交易量突破1亿笔:7月12日消息,据suiscan数据,Sui网络总交易数量达1.26亿笔,过去24小时增长1719万笔,目前Sui网络总账户数为155万个。[2023/7/12 10:49:44]
期望被依赖包扩展的包,可以通过提供符合所有版本标准的接口,来避免每次升级时破坏它们之前的扩展。以Wormhole跨链桥为例,通过Wormhole作为桥梁发送消息,要想生成发送消息的扩展包,可以使用任意版本Wormhole包中的prepare_message指令来生成MessageTicket,而发送消息的客户端代码必须将该MessageTicket传递到最新版本包中的publish_message。
public函数不能删除或更改,但public(friend)函数可以。您可以自由地使用public(friend)或仅自己可见功能,除非您要将现在的库函数永远公开。
Sui基金会发布代币释放时间表,预计将于2030年4月释放完毕:6月29日消息,据官方消息,Sui基金会发布了代币释放详细计划。Sui主网于2023年5月3日上线。SUI代币长期流通供应量为100亿枚。在主网启动时,大约有5%的代币在流通,其余的代币将按照拟议的时间表释放。预计所有代币将于2030年4月释放完毕。Sui基金会表示,时间表可能会根据需要进行更改,以保持Sui网络的健康。
据此前消息,Sui基金会表示,已按计划逐步增加SUI代币供应以增加生态系统流动性。Sui基金会没有在币安或其它平台出售“锁定”和”非流通”质押SUI所产生的奖励或任何其他代币,所有内部代币分配仍受制于锁定期和其他转让限制。[2023/6/29 22:07:15]
不能删除struct类型、不能添加新字段或通过升级新功能。添加新类型时请谨慎思考,一旦添加后将永远存在!
OKX Web3钱包已首发接入Sui主网:据OKX官方消息,OKX Web3钱包已于5月3日17:00(HKT)接入Sui主网,是首个支持Sui主网的多链钱包。用户可前往OKX Web3钱包查看自己在Sui链上资产,支持使用App端进行Sui资产管理和交易,并领取相关活动奖励。此外,OKX Web3钱包将陆续推出Sui质押、DEX支持Sui主币兑换等产品功能,用户可使用OKX Web3钱包一站式体验公链。[2023/5/3 14:40:33]
使用vector支持的集合,最多不超过1000个数据项。
使用动态字段支持的集合用于任何允许第三方添加的集合、更大的集合和未知大小的集合。
SuiMove对象最大为250KB——任何创建更大对象的尝试都将导致事务中止,请确保您的对象没有不断增长大过vector支持的集合。
Sui基金会举办的Sui Builder House香港站活动已收官:金色财经报道,由Sui基金会举办的Sui Builder House香港站活动已收官,为期三天,其中最后一场活动Sui Demo Day旨在为Sui生态中的新老项目提供展示项目的平台,共吸引了超过40个团队报名参赛。本次Demo Day分为NFT和游戏、基础设施和开发工具、DID&治理和社交、DeFi和支付四个主要赛道。[2023/4/17 14:07:36]
如果您的函数f需要来自调用者的付款,例如使用SUI,请使用funf(payment:Coin)函数而不是funf(payment:&mutCoin,amount:u64)函数。这对调用者来说更安全,因为他们可以准确地知道具体支付数额,并且不需要依靠函数f来提取正确的数额。
不需要小幅度优化gas消耗。在Sui上计算花费成本时,使用四舍五入的方法计算出其最接近的bucket,因此只有非常剧烈的波动才会导致gas的变化。特别是,如果您的交易已经在最低成本范围内,那就不能更便宜了。详情请参照下图。
遵循Move编码惯例来获得统一的式样。
可组合性
使用display标准自定义您的对象在钱包、应用程序和浏览器中的显示方式。
避免使用「自我转移」功能——任何时候都有可能,从当前函数返回obj,而不是写入transfer::transfer(obj,tx_context::sender(ctx)),这允许调用者或可编程交易块使用obj。
测试
使用sui::test_scenario`模拟多次交易和多位发送者的测试场景。
使用sui::test_utilsmodule通过assert_eq测试获得更好的纠错消息,通过print调试打印,以及通过destroy进行test-only销毁。
使用suimovetest--coverage计算测试时代码覆盖的信息,使用suimovecoveragesource--module查看以红色突出显示的未覆盖行。如果可行,建议将覆盖率设置为100%。
应用程序
为了获得最佳性能和数据一致性,应用程序应该在同一个全节点上提交写入和读取请求。在TSSDK中,这意味着应用程序应使用钱包的signTransactionBlockAPI,然后通过调用应用程序全节点上的execute_transactionBlock来提交交易,而不是使用钱包的signAndExecuteTransactionBlockAPI。这确保了先写后读的一致性——从应用程序的全节点读取将立即反映事务的写入,而不是等待checkpoint。
为了降低延迟,如果您的应用程序需要知道交易已确认,但不需要立即查看交易效果或读取交易写入的对象/事件,请使用带有"showEffects":false和"showEvents":false的executeTransactionBlock。
应用程序应该将频繁读取的数据本地缓存,而不是从全节点频繁抓取。
尽可能地使用可编程交易块来组合现有的链上功能,而不是发布新的智能合约代码。可编程交易块允许大规模批次处理和异构组合,进一步降低已经很低的gas费。
应用程序应该将对gas预算、gas价格和coin选择权留给钱包,这将为钱包提供了更大的灵活性,并且钱包有责任试运行交易以确保交易不会失败。
签名
永远不要签署两笔触及同一独享对象的并发交易,要么单独使用独享对象,要么等待一笔交易结束后再发送下一笔交易。违反此规则可能会导致客户端模棱两可,从而同时锁定两个交易中涉及的独享对象,直到当前epoch结束。
任何发起交易的suiclient命令都可以接受--serialize-output标志以输出要签名的base64交易。
Sui支持多种签名方案进行交易签名,包括包括本机多重签名。
来源:橡果商业评论,作者:豚豚,编辑:赵翔 图片来源:由无界AI工具生成ChatGPT问世至今,互联上讨论声绵延不绝。有人说AI会替代基础性工作.
1900/1/1 0:00:001.?EigenLayer简介:LSDfi,以太坊再质押市场,引入了再质押概念官网:https://www.eigenlayer.xyz/总融资:?6450?万美金.
1900/1/1 0:00:00DAO在加密领域获得了极大的关注和投资,其中有几个DAO在各自的国库中管理着数十亿美元。然而,并不是所有DAO的参与者都有着高尚的目的.
1900/1/1 0:00:005月9日消息,专注于数字资产的金融服务和投资管理公司GalaxyDigital公布一季度财报,一季度营收为1.4674亿美元,净收入1.34亿美元,收入主要归因于数字资产收益和未实现的投资收益.
1900/1/1 0:00:00来源:新智元ChatGPT爆火之后,谷歌和微软两巨头的AI大战战火,已经烧到了新的领域——服务器芯片。如今,AI和云计算都成了必争之地,而芯片,也成为降低成本、赢得商业客户的关键.
1900/1/1 0:00:001.金色观察|不到一个月37.5万倍如何抓住下一个PEPEPEPE在短短21天内上涨375,000倍之后,改变了许多人的生活。你也可以通过Meme币改变你的生活.
1900/1/1 0:00:00