本文将为开发人员在SuiNetwork上的最佳实践做快速参考。
Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。Sui主网已于2023年5月3日正式上线。
本文将为开发人员在SuiNetwork上的最佳实践做快速参考。
Move
常规知识
阅读有关包升级的详细信息并编写对升级友好的代码。
包是不可变的,有漏洞的包代码可以永远调用,解决方案是在对象层面添加保护。
Mysten Labs推出Bullshark Quests,首个任务奖励池包括500万枚SUI:7月7日消息,Mysten Labs宣布推出Bullshark Quests,这是一种为Bullsharks持有者赚取SUI奖励(和其他福利)的新方式。Mysten Labs已启动第一个 Quest,奖励池包括500万枚SUI,Bullshark持有者可以根据他们与Polymedia、Mini Miners、DeSuiLabs和Ethos Wallet应用的参与度来竞争奖励。[2023/7/7 22:23:05]
如果将包从P升级到P',依赖于P的其他包和客户端将继续使用P,而不是自动更新到P'。因此,依赖于包和客户端的代码都必须更新以明确地指向P'。
期望被依赖包扩展的包,可以通过提供符合所有版本标准的接口,来避免每次升级时破坏它们之前的扩展。以Wormhole跨链桥为例,通过Wormhole作为桥梁发送消息,要想生成发送消息的扩展包,可以使用任意版本Wormhole包中的prepare_message指令来生成MessageTicket,而发送消息的客户端代码必须将该MessageTicket传递到最新版本包中的publish_message。
The Easy Company 在 Sui Network 上正式发布首款社交加密钱包:金色财经报道,社交加密钱包 The Easy Company 宣布与 Sui 开发团队 Mysten Labs 合作开发的首款社交加密钱包 Easy 已正式在 Sui Network 上推出,该钱包已登陆 iOS 和安卓操作系统的应用商店,除了支持用户与 Sui 社区成员联系之外,还可以兑换 SUI 代币,以及获取 Sui 生态系统新闻和实时更新内容。Easy 钱包由来自 Airbnb、迪士尼、苹果、微软、谷歌、Nuance 和 iHeartMedia 的消费者网络和移动专家团队设计和构建,该公司在今年一月完成了由 Lobby Capital、Relay Ventures 等投资机构参投的 1420 万美元种子轮融资。(prnewswire)[2023/5/13 15:01:01]
public函数不能删除或更改,但public(friend)函数可以。您可以自由地使用public(friend)或仅自己可见功能,除非您要将现在的库函数永远公开。
Sui联合创始人:Sui已支持Groth16 zkSNARK算法:11月19日消息,Sui Network联合创始人Kostas Kryptos发推称,Sui欢迎零知识证明,用户现已可以其交易事务中附加Groth16 ZKP证明,由于我们的后端结合了Arkworks和BLST,因此这样做可以提升2倍的验证性能速度。”与此同时,Kostas分享的Sui Github界面显示关于Groth16的模块已于今日提交。
注:Groth16是zkSNARK的典型算法,系Groth在2016年发表的一篇论文中提出,目前该算法在ZCash,Filecoin,Coda等多个项目中均有应用。[2022/11/19 13:24:11]
不能删除struct类型、不能添加新字段或通过升级新功能。添加新类型时请谨慎思考,一旦添加后将永远存在!
使用vector支持的集合,最多不超过1000个数据项。
动态 | 加密金融服务提供商Bitcoin Suisse计划今年获得银行牌照:据Cryptonews消息,瑞士加密金融服务提供商Bitcoin Suisse计划在2020年获得银行牌照,这是其为首次公开募股(IPO)造势计划的一部分。该公司去年7月提交了许可证申请,并希望在2020年获得监管机构的批准,这是其中期IPO战略的一部分。Bitcoin Suisse创始人兼董事长Niklas Nikolajsen谈到了上市的重要性,声称该公司目前的金融资产基础“不足以满足”对其服务的需求。该公司首席执行官Arthur Vayloyan则表示,公司希望从投资者那里筹集4100万美元。目前该公司拥有价值约5650万美元的净资产,但希望在今年中期将这一数字翻一番。[2020/1/9]
使用动态字段支持的集合用于任何允许第三方添加的集合、更大的集合和未知大小的集合。
SuiMove对象最大为250KB——任何创建更大对象的尝试都将导致事务中止,请确保您的对象没有不断增长大过vector支持的集合。
如果您的函数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支持多种签名方案进行交易签名,包括包括本机多重签名。
最近几年兴起的Web3技术给许多传统企业带来了新的启发,这其中不乏一些全球商业巨头。耐克公司作为当今年轻一代的文化偶像,自然不会错过尝新的机会.
1900/1/1 0:00:00毫无疑问,随着主流行业开始承认Web3的潜力,Web3是当今最热门的话题之一。然而,其中一个角度似乎没有得到很多报道,那就是Web3架构.
1900/1/1 0:00:00Words3是一款基于MUD开发的全链上游戏,游戏最早已于去年11月上线。然而Words3在经过了首次测试后很长一段时间都没有再进行公开试玩,据传团队正基于当时还处于开发过程中的MUDV2对游戏.
1900/1/1 0:00:00近两年的加密领域有几个关键叙事,其中之一就是L2的兴起。L2只用了很短的时间就吸引了数十亿的TVL,仅Arbitrum上的交易量就可以与主网以太坊相媲美.
1900/1/1 0:00:00零知识技术是密码学的一个分支,可以为许多Layer1区块链项目解决扩容和隐私问题。区块链可以利用零知识证明技术提升交易吞吐量,在验证用户身份的同时保护用户数据隐私,实现复杂的计算,并让企业既可以.
1900/1/1 0:00:00BillGates2023年3月21日发表于盖茨个人博客 在我一生中,我两次见证了令人惊叹的革命性技术的面世.
1900/1/1 0:00:00