Sui开发者必读:MOVE语言及技术特性_SUI:Transaction Service fee

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

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

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

Move

常规知识

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

包是不可变的,有漏洞的包代码可以永远调用,解决方案是在对象层面添加保护。

数据:80%的机构投资者认为加密货币将在10年内超越传统投资工具:4月26日消息,加密货币交易所 Bitstamp对23个国家约5,000名机构投资者和23000名个人投资者的一项调查发现,80%的机构投资者和54%的散户投资者认为加密货币将在十年内超越传统投资工具。此外,77%的机构和69%的散户表示信任股票,70%的机构和67%的散户表示信任加密货币。新兴国家约80%的个人和机构表示信任加密货币,而在发达国家,这一比例仅为 62%。数据还显示,散户和机构投资者对包括稳定币、NFT及区块链网络的DeFi投资工具的信任度约为60%。(Blockworks)[2022/4/26 5:12:31]

如果将包从P升级到P',依赖于P的其他包和客户端将继续使用P,而不是自动更新到P'。因此,依赖于包和客户端的代码都必须更新以明确地指向P'。

期望被依赖包扩展的包,可以通过提供符合所有版本标准的接口,来避免每次升级时破坏它们之前的扩展。以Wormhole跨链桥为例,通过Wormhole作为桥梁发送消息,要想生成发送消息的扩展包,可以使用任意版本Wormhole包中的prepare_message指令来生成MessageTicket,而发送消息的客户端代码必须将该MessageTicket传递到最新版本包中的publish_message。

声音 | 观点:数字汇款接近960亿美元,传统提供商收取的费用为加密货币打开大门:在劳动力追随资本的全球化世界里,汇款行业在数量和用户两方面都在不断增长。银行和转账公司等传统服务提供商一直在收取高额服务费,这为替代数字平台和去中心化加密货币创造了机会。根据市场数据提供商Statista收集的数据,到2020年,通过互联网进行的数字汇款,跨境转账的总交易价值已达到近959.6亿美元,同比增长超过21%。同时,汇款市场这一部分的用户数量估计为850万(同比增长20.5%)。两项指标预计到2023年将增加,交易量将超过1,430亿美元,用户将达到1,320万。该报告的作者指出,汇款通常是定期进行的,大多数用户群体并不倾向于经常更换其资金转帐服务提供商。该行业由银行,邮局等已建立的服务提供商和Western Union和Moneygram等汇款处理商主导。Statista指出,他们收取的较高费用为另类平台开辟了道路,这些平台已通过优化数字基础架构的使用设法降低了成本。(News.Bitcoin)[2020/2/14]

public函数不能删除或更改,但public(friend)函数可以。您可以自由地使用public(friend)或仅自己可见功能,除非您要将现在的库函数永远公开。

声音 | 中国平安副董事长:区块链将帮助传统金融降本增效,进一步提升竞争力:中国平安副董事长孙建一在接受《证券日报》的采访时表示,在人工智能、区块链和云技术的帮助下,传统金融能够实现降本增效,强化风险、强化体验,提升金融的竞争力等一系列目标。(证券日报)[2019/10/2]

不能删除struct类型、不能添加新字段或通过升级新功能。添加新类型时请谨慎思考,一旦添加后将永远存在!

使用vector支持的集合,最多不超过1000个数据项。

使用动态字段支持的集合用于任何允许第三方添加的集合、更大的集合和未知大小的集合。

SuiMove对象最大为250KB——任何创建更大对象的尝试都将导致事务中止,请确保您的对象没有不断增长大过vector支持的集合。

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

声音 | 中国网络节目服务协会何薇:区块链等电子存证比传统方式更加便捷:据人民网消息,中国网络视听节目服务协会知识产权顾问何薇认为,相较于通过公证书取证的传统方式,新兴的时间戳和区块链等电子存证、取证方式更加便捷、高效,不但能大大缩短当事人准备诉讼的时间,也能极大程度降低当事人举证、质证等诉讼成本;同时,也更加顺应我国新一轮司法改革的方向,即采取更加便民、高效的互联网审判方式。[2018/12/4]

不需要小幅度优化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支持多种签名方案进行交易签名,包括包括本机多重签名。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金宝趣谈

ADA代币发行的三个最新趋势_WEB:CRYP

代币设计的创新落后于更大的生态系统;研究人员将重点一直放在扩展、智能合约优化和其他更多技术主题上,而代币设计似乎是事后才想到的.

[0:15ms0-3:557ms