Move 语言的特点
Move 是 Meta(原 Facebook)为其稳定币项目 Diem(原 Libra)开发的编程语言,Diem 的愿景是作为一款全球性的数字原生货币,集稳定性、低通胀、全球普遍接受和可互换性于一体。其愿景决定了 Move 是为金融而生的编程语言。
Move 的特点主要有以下五个方面:
将资产作为一等公民编程(First-class Resources)
通过静态调用、虚拟机沙盒等确保其安全性
可验证性
灵活性
合约可组合性
(一)将资产作为一等公民编程(First-class Resources)
Move 语言通过 Resource 为数字资产定义。Move 语言中数字资产以被特殊定义的代码 /resource/ 表示和存储。
Move 语言抽象了资源(Resource)的四个属性:可复制、可索引、可丢弃、可存储,通过这四个属性的不同组合,用户可以方便的定义出任何类型的资源。
Move 规定资源(Resource)会存储在由所有者的帐户控制的模块里,经过验证的所有者以 / 签名者 / 表示,这些资源的所有者具有最高决定权,只有所有者能够决定资源(Resource)的存储和转移。
资源(Resource)的设计让数字资产转移不是账户间余额数值的简单加减,而是存储位置间的移动,避免重入和双花攻击。
重入和双花攻击是黑客攻击常见类型。重入指的是黑客抓住项目方转账模式的漏洞,制造恶意合约,在接受转账的同时再次调用项目方转账函数,在不改变账户余额的情况下不断提走资金。双花攻击则更好理解,用同一笔钱多次完成支付。
资源(Resource)确定数字资产仅在存储位置之间转移,避免了重入。不凭空产生或销毁数字资产,避免了双花攻击。
(二)通过静态调用、虚拟机沙盒等确保其安全性
Move 语言采用静态调用,静态调用指程序 A 在调用程序 B 时,在运行之前就已经确定调用的对象,在运营过程中不改变调用对象。
静态调用提升了运行的安全性。动态调用过程中,恶意用户可以通过制造恶意合约,调用项目方函数,从而完成攻击。静态调用解决了动态调用存在的问题,增强网络运行的稳定性。
Move VM 是 Move 编程语言的虚拟机沙盒,虚拟沙盒让采用 Move 语言的区块链具备确定性,合约调用被放在同一个沙盒当中,在此过程中合约的状态的安全性主要要通过编程语言内部的安全性进行隔离,而非依赖虚拟机进行隔离。
(三)可验证性
Move 编程语言采用形式化验证。简而言之,形式化验证是用数字工具分析的手段证明程序的安全性。此前提到的静态调用、虚拟机沙盒能够提升验证的安全性。
(四)灵活性
Move 的灵活性体现在可以通过 transaction 脚本来自由组合各种 transaction 来实现不同的功能,一个脚本可以调用多个 transaction。
Move 通过面向泛型编程,保障了合约的扩展性,增加了代码的复用能力。(注:泛型编程是一种专注于对算法及其数据结构进行设计的编程方式,它使得这些算法即数据结构能够在不损失效率的前提下,运用到最为通用的环境中。)
(五)合约可组合性
Move 语言的合约可组合性源自于其 Module(模块)的设计,基于 Module 间的组合只需要对 Module 进行升级和优化,所有使用过这个 Module 的其他合约都会自动使用最新的版本,加速使用 Move 语言的智能合约升级优化的速度。
Module 相当于给这些智能合约提供了统一的兼容空间,智能合约就像乐高玩具的各个部分,通过任意组合产生新的产品。