当前位置:首页 行业动态 正文

智能合约语言Move的技术特性

2023-05-05

Sui是一款基于第一性原理的公有链,它的目标是为创作者和开发者提供一个开发平台,让他们可以在Web3中容纳下一个十亿用户。Sui上的程序是以 Move Smart合同语言为基础的,并且可以横向扩展,这使得开发者可以以更快、更低的成本来支持更多的程序开发。

常识性知识

了解更多关于软件包升级的细节,并且写一些易于升级的代码。

软件包不能改变,带有漏洞的软件包代码永远都会被调用。

如果一个程序包希望被一个依赖程序包所扩展,那么它就能提供一个与所有版本一致的接口,从而避免在每一次升级过程中对其以前的程序包造成破坏。以 Wormhole跨链桥为例,以 Wormhole为桥梁进行消息传递,为了产生一个发送消息的扩展包,可以在任意一个版本的 Wormhole包中使用prepare_message指令生成一个消息 Ticket,而发消息的客户必须把这个消息 Ticket传给最新版本的Publish_message。

如果软件包从 P级升级为 P级,其它依赖 P级的软件包及客户机仍将使用 P级,但不会自动升级为 P级。因此,既要依靠软件包,也要依靠客户机,这两种代码都必须被更新,以便清楚地指向 P’。

公共功能无法删除或者改变,但是公共功能(朋友)可以。你可以随意使用公共(朋友)或者只有你自己才能看到,除非你想让现有的库函数永远是公开的。

无法移除 struct类型,无法增加新的栏位(虽然你可以增加动态栏位),也无法升级新的特性。当你添加一个新的类型的时候,仔细的想一想。

使用向量支持的集合(例如向量、 VecSet、 VecMap、 PriorityQueue),使数据项不超过1000个。

SuiMove对象的最大值是250 KB,如果你试图创建一个更大的对象,你的事务就会被终止。

对于任何允许第三方添加的集合,较大的集合,以及未知大小的集合,使用动态字段支持的集合,例如表,标签,对象标签,对象表,链接表。

如果你的 functionfunction需要从呼叫方获得支付,比如 SUI,那么用 fund (支付:支付)来代替 fundom (支付和支付,金额:u64)。这样,呼叫方就能知道确切的付款金额,而不必依赖函数 f提取正确金额,这样就更加安全了。

不需要对 gas消耗进行轻微的优化。用 Sui计算支出费用时,要用进位法计算最近的桶,这样只需要很大的波动就可以使 gas发生变化。尤其是,如果你的交易已经达到了最低成本,那么你的交易将无法再降低成本。

署名

任何开始一个交易(例如,一个客户发布,一个客户呼叫)的服务客户端命令都可以接受一个序列-输出标志来输出一个基本64交易以进行签名。

永远不要签署两个同时发生的交易,涉及到同一个独享体,或者是单独使用独享体,或者是等一个交易完成之后再发送下一个。违反这一规则将使客户机变得模糊不清,并在当前 epoch终止之前锁定两次交易中的独享对象。

Sui支持用于交易签名的多个签名方案(signature schemes),包括本地多个签名。