张明丨Libra:概念原理、潜在影响及其与中国版数(3)
分类:经典语录 热度:

Libra提供了长达26页的技术论文来论述Move语言的特点。想要了解Move语言的优势,必须首先了解以比特币和以太坊(Ethereum,其编程语言为Solidity)为代表的传统区块链所用语言存在哪些问题。


首先,货币对于传统语言来说并非一种特定的“资产”,而是像程序中的其他变量一样,是一组数据,存在被任意虚增和复制的可能。
现实中有价值的资产不仅数量严格受限,而且在转移和交易过程会受到严密监控,不存在诸如转移之后一方数量不减少,而另一方数量相应增加的情况。但在数字货币中,黑客曾多次利用整数溢出等漏洞大举复制资产,造成过数亿美元的损失。
更进一步而言,即便在数字货币的原生语言中将其强制定义为资产,以及在编译和运行过程中对转移及增加予以严格限制,但该语言编写的智能合约中可能会涉及用户自定义的其他类型资产,这样会失去语言的原生保护,从而需要开发者自行维护其安全性,这无疑大大增加了系统风险。


其次,传统区块链语言尚未在安全性和灵活性之间找到平衡点。智能合约是区块链技术的重要应用之一,允许用户利用区块链的可信性来自动完成一系列自定义动作。
一旦满足了某项预先设定的条件,该条件下的一系列后续动作将会不可撤销地执行。这些动作中可能会包含支付对价、权属登记、保险执行、租约执行等。
区块链在其中的角色,类似于现实合约中具有强信用的中间人(如进出口业务中银行的角色,或淘宝交易中支付宝的角色)。
智能合约的出现,可以使现实中各类交易的安全性和便利性极大地扩展。但如果出现问题,也将令使用者遭受重大损失。


为了适应这种便利性,很多传统区块链语言采用了类似于PythonRuby的动态类型语言模式。这可以大大简化编写程序的过程,因为无需给变量定义类型模式,也无需在编码期间就了解系统将如何具体运行。
这些都将在实际运行中再进行检查或直接动态指派(dynamic dispatch)。此类语言通常具备高度的易用性,开发者可以快速实现功能。但事实上,与传统的C/C++/C#/Java等静态类型语言相比,动态语言是把发现风险的工作从编译阶段推向了实际运行阶段。
上述类型定义错误和代码进入到无法预知分支的低级错误,在静态语言中通过编译和几个简单测试用例便可轻松暴露。对于一个必须高度可靠的交易系统而言,各类bug等到运行时出问题再去解决是无法容忍的。


为解决上述问题,Move的技术论文从四个方面介绍了Move的创新之处。


首先,Move定义了“一等资源”概念(First-Class Resources)。这一概念实现了上述“资产”的特点:
不能凭空消失或被复制,必须在各个存储间以“移动”的方式完成交易。不仅Libra货币,其他基于Libra区块链开发的智能合约也可享有这样的保护措施,从而较好地从根本上解决了上述问题。
同时,Libra也允许用户自定义一些可修改资源的关键行为(如创建、修改、销毁等),但这些行为在系统中高度受控,只能由定义该种资源的模块自身进行操作。


第二,灵活性。Move允许开发者像其他高级语言一样调用各种过程(procedures),或使用面向对象的诸多概念,以便完成大量复杂的计算或逻辑功能。
但为了兼顾安全性,其中摒弃了大量可能导致程序产生不可预知行为的引用或指针,从而使其更加符合线性逻辑,避免程序的非线性行为。


第三,安全性。当前其他语言在选择可执行编码层次时,为了照顾代码安全性,都会选择高级语言或汇编语言。
前者逻辑较为清晰,但验证安全性需要较为强大的编译器;后者则更多需要在运行阶段才能查出错误。
Libra选择了二者的折衷。其采用字节码(bytecode)的模式,介于高级语言和汇编语言之间,并引入了字节码验证器(bytecode verifier)。这一做法可以避免向区块链各个节点引入大计算量的编译器,也无需等到实际运行时才能发现代码问题,从而用较为低廉的成本换取了代码的安全性。


上一篇:骂黑心商家的经典语录 下一篇:把“不忘初心”贯穿于学习始终
猜你喜欢
各种观点
热门排行
精彩图文