智能合约语言Move你对其了解有多少
扫描二维码
随时随地手机看文章
6 月 18 日,Facebook 高调公布了 Libra 白皮书,在全球范围内引发热议,Libra 还发布了技术白皮书,详细介绍了其新开发的智能合约语言 Move 。
Move 横空出世, 尤为吸人眼球。有人评价,这才是智能合约语言应有的模样,被很多人誉为 Libra 最大的创新。
简单地讲,比特币是对货币的编程,以太坊是对应用的编程,而 Libra 是对资产的编程,Move 就是对这门资产编程的语言。
所以,要搞懂 Move,先弄清楚什么是 Libra 。
1. 什么是 Libra ?
Libra 在英文中是“天秤座”的意思,天秤座象征着平衡与公正。根据 Facebook 公布的项目白皮书,Libra 是“货币”和与其对应的金融基础设施的综合体,形象地讲,可以被看作同时具有支付宝和跨境支付的功能,未来的 Libra 可能具有国内支付、跨境支付、货币、证券和金融服务等一系列功能。
Libra 白皮书的技术方案中,采用的智能合约语言就是 Move ,是为操作数字资产而生的智能合约语言。李笑来对 Facebook 的 Move 语言的评价,却与众不同:Facebook 又犯傻,用得着专门设计个 Move 语言吗?
设计 Move 语言真的是多此一举吗?
现实世界的资产数字化过程中面临着两方面的困难:稀缺性和权限控制。
所谓稀缺性就是不允许用户随意复制资源;权限控制通俗地讲,就是你只能花自己的钱,不能花别人的钱,这在已有的区块链编程语言中得不到良好的支持,一旦出现问题,对于资产将是灾难性的,需要通过创建一个新的智能合约语言来解决此类问题。
这个智能合约语言之所以叫 Move ,表示区块链上的币从一个账户转移到另一个账户时,也就是实现资产的 Move ,即移动,而不是简单的 Copy,这样做的好处是,杜绝了像以太坊之前出现的各种合约记账的错误与漏洞。
还有人联想,可能与 Facebook 的格言 Move Fast and Break Thing 对应,达到了一语双关的效果。
2. Move 语言有什么特点?Move 语言的主要设计目标是灵活性、安全性和可验证性。
1、安全可靠
概括地说,Move 作为一种新的编程语言,作用是为 Libra 区块链提供安全可编程的基础。提交给 Libra 区块链的每个交易,都使用以 Move 编写的交易脚本进行编码。
简单来说,Move 有三大功能:发行数字货币、Token 和数字资产; 灵活处理区块链交易; 验证器管理。
区块链项目的智能合约语言,安全性是第一位的,不然,你被黑客攻击了 ,就等于把资产拱手送人,还拿走不谢,甚至会害用户家破人亡,所以,Move 设计的核心诉求就是安全性 。
在 Move 语言中,所有的合约执行路径都能在编译的时候确定,然后可以进行非常充分地分析、验证。Move 合约在运行前,都会被一个验证器进行校验,这个验证器可以检查出各种类型错误,而且合约执行的时候,还一边运行,一边被检查,所以,Move 合约相对安全。
2、记账不容易出错
传统的编程语言,包括以太坊智能合约语言中,对于数字资产的记账方式,是有可能出错的,因为它们就好比你们单位墙上的标语,人人都可以念,导致记账是有可能重复的。比如,过去几年里的各种记账漏洞搞得大家对智能合约的未来丧失信心。
而 Move 合约采用资源类型,数字资产只能被消耗,不允许复制资源,目的是防止意外重复和丢失。就像你手上的蛋糕,吃掉一块,就少一块,这样一来,数字资产就像资源一样,不能被复制,不能凭空消失。例如某个公司搞营销活动,就可以在 Libra 中通过 Move 合约产生和验证优惠券的资产,还可以使用和转让。
3、成本更低
在 Move 语言中,一个
3. Move 和以太坊的 Solidity 语言有哪些区别?以太坊的 Solidity 语言,功能强大并且非常灵活,具有良好的适应性和扩展性,但它的硬伤是存在安全风险。安全问题是虚拟数字货币的基本要求,也是最大的痛点。
Move 语言,主打安全牌,针对以太坊智能合约中容易出安全漏洞的语言进行了大量的修改,额外添加了一层保护,可以避免很多 Solidity 的漏洞。
Move 语言比以太坊的智能合约语言严密,可以在编译的时候发现编程的低级错误,而不是拖到运行期才爆出漏洞,这样保证智能合约在执行中不会发生低级错误。
Move 语言会阻止代表其他用户发布数据,因此用户需要确认所发布的所有内容,使他们能够完全控制选择共享的信息。
4. 小结虽然,Move 看起来还不够细腻和成熟,但 Facebook 敢于创新,独家设计出真正适合金融应用的智能合约语言,甚至可能会成为区块链的“编程范式”的一个良好的开始。
Move 让智能合约开发者拥有了更大的选择自由,在安全的前提下,未来的区块链世界将会变得更加丰富多彩,值得每一个人拭目以待。