在sui中, move 语言如何确保安全?

G-XBT
发布于 阅读 537

1,move 语言是如何保障安全的?

这个问题说难回答,也不难,说容易回答也不容易,要想回答这个问题?我们需要先回答如下的一个问题?
1.1 世界上什么东西最容易形成共识,对就是对,错就是错?
这个东西就是数学。也只有数学,才能够做到描述一个东西。而这个东西,让全人类看起来,丝毫没有误差,和疑问。从某种意义上来说,数学才是全人类的用来写智能合约,写法律最好的语言。
1.2 什么是安全?
没有歧义 == 安全。
1.3 数学如何没有做到没有歧义?
很简单,也很难,通过严格的定义,就可以做到没有歧义。但是世界万物,很难被严格定义,或者根本不可能被严格定义。能被数学严格定义,只有人造物,比如数字,集合,群,几何。

2, move 是如何做到减少歧义的?

"类型安全"。需要完全一致的类型,才能调用相应的操作。"所有权机制"。"默认不可变"。
“拥有可定制化struct结构”。struct拥有能力约束。通过key,stroe,copy,drop,可以组合多种不同的受限,但是满足需求的struct结构。这个本质上,限制了struct的能力,缩小了struct可能出现的范围,进一步减少了,歧义的可能性。
“外部执行环境限制”。1,只能改变自己拥有的对象。对象的方法,只能被拥有对象地址调用。2,对象只能被相同模块下的方法改变。想要改变对象,就必须实现在模块里定义改变对象的方法,如果没有定义相应的方法,那么对象就是不可变的,包括转移,如果没有自己定义transfer方法,那么对象也不可以转移。3,在A模块是无法重写,或者重新定义模块B。A模块只能使用B模块开放的public方法,也就是说,你无法做到直接在A模块里,直接转移B模块的对象,或者定义一些改变B模块下对象状态的方法,这是做不到的。
“形式化证明”。通过数学来验证程序的执行的对错。
 通过以上的几点,就基本可以组合出,安全的move了。 比如,建立众筹合约,大部分人存钱,admin取钱。金库共享对象,拥有存钱功能,任何人可以调用。我们只要定义admin 作为一个对象,而这个对象拥有控制取钱这个功能,那么就只有admin 可以把钱给取出来。因为admin 对象首先肯定是有限个,并且是指定的,甚至只能在初始化时候的建立。其次,只有admin,定了方法可以转移金库的钱,而拥有admin对象的,只有指定的地址。除此之外,就没有办法了。
标签: 每日闲话
评论