智能合约3.0

摘要: 本文主要谈了智能合约的演变和展望,从传统合同-谈到智能合约1.0->2.0->3.0,分析了各阶段智能合约解决方案的不足性,最后重点论述智能合约3.0需要具备的要素和已有解决方案的优势和独特的应用场景。

现实中合同是写在纸上,要签字盖章才能生效,由于文字的多种含义常常会带来合同双方的不同理解,大家为此而产生不少纠纷;如果把纸上合同变成程序代码,问题就简单很多,因为代码不会产生多义问题,这种代码我们称为智能合约。

然而计算机代码是可以修改的,所以智能合约只有结合区块链才可解决多方信任问题,因为区块链具有去中心化、不可篡改、高可靠等特性;

智能合约的工作流程需要经历构建、存储、执行三个过程,可用于用户之间的任何交易行为。协议中明确了双方的权利和义务,开发人员将这些权利和义务以电子化的方式进行编程,代码中包含会触发合约自动执行的各种条件。

一、智能合约1.0 –比特币脚本及其局限性

脚本的本质上是众多指令的组合,比特币在交易中使用的脚本系统几乎和汇编语言类似,一般人比较难以理解;它是基于堆栈的、没有LOOP语句、没有状态机,opcodes分为常量、流程控制、栈操作、算术运算、位运算、密码学运算、保留字等若干类,还包括3个内部使用的伪指令。

 由于语言限制,开发能力非常有限,白皮书中也阐述了其具体的局限性:

1. 缺少图灵完备性
      最主要是缺失LOOP语句,这样设计虽然避免无限循环,但是也给程序设计带来了很大障碍。

    2. UTXO脚本不能为账户的取款额度做精细的控制
      这是由于UTXO的不可分割性造成的。

    3. 缺少状态,
只有已花费和未花费状态,没有给合约的其他内部状态留出空间,这使得实现多阶段的期权合约变得非常困难。

4. 无法通过脚本看到区块链的数据

  例如区块Hash、随机数 等,这缺陷使得脚本语言无法很好地跟交易沟通。

二、智能合约2.0 –以太坊智能合约虚拟机及其缺陷

   由于以太坊的出现大大晚于比特币,虽然明显受到比特币系统的启发,但在整个功能定位和设计架构上却做了很多更广更深的思考和尝试,同时避免了比特币脚本的缺陷,为带来真正意义上的智能合约打下坚实的基础。
   根据以太坊官方提供的设计原理说明,EVM的设计目标主要针对以下方面

  1. EVM的设计目标
    简单:操作码和数据类型尽可能的少,虚拟机的结构尽可能少;
    结果明确:在规范语句中,没有任何可能产生歧义的空间,结果应该是完全确定的。此外,计算步骤应该是精确的,以便可以测量Gas的消耗量;
    节约空间:EVM组件应尽可能紧凑;
    专为区块链设计:在VM上构建的应用应能处理20字节的地址,以及32位的自定义加密值,拥有用于自定义加密的模数运算、读取区块和交易数据与状态交互等能力;
    安全友好:不容易被黑客利用,很容易地建立一套Gas消耗成本模型的操作,并且易于优化。
  2. EVM的一些特性
    区分临时储存和永久存储:Memory,存在于VM的每个实例中,并在VM执行结束后消失; Storage,存在于区块链状态层;

        采用基于栈(Stack)的架构
       机器码长度为256比特,即32字节;
       使用了可变、可扩展的内存大小;

       栈的大小没有限制;

      1024调用深度限制;

      指令执行计费机制

   3.EVM的缺陷

   <1>. 采用256bit整数导致计算速度慢
     目前大多数的处理器主要支持32 bit,64bit 整数运算,对256bit还无能为力,因此运算速度会大打折扣

   <2>. 缺少标准库和工具库

在开发以太坊智能合约时,人们发现Solidity中根本没有标准库。只能不断的从一些开源软件中复制粘贴代码。首先这些代码的安全性无法保证,再加上人们会为了更小的Gas消耗而不断修改代码,这就有可能对他们的合约引入更严重的安全性问题。

  <3>. 难以调试和测试
   这个问题不仅仅是EVM的设计缺陷,也和其实现方式有关。EVM唯一能抛出的异常就是OutOfGas,并且没有调试日志,也无法调用外部代码。

 <4>. 不支持浮点运算

 <5>. 安全性差
  由于对数学运算的溢出没有做很好的处理,经常出现“一行代码损失几个亿”事(https://www.v2ex.com/t/448992)。并且由于没有做沙箱式的安全隔离处理,最近还有人称已完全攻破以太坊虚拟机的”核武器漏洞”(https://cloud.tencent.com/developer/news/282337)。

  <6>.计费不合理,应用代价大

EVM不仅使写出好的代码变得很困难,还令其变得非常昂贵。比如,在区块链上储数据需要耗费大量的gas。这意味着在智能合约中缓存数据的代价会非常大,因此往往在每次合约运行时重新计算数据。随着合约被不断执行,越来越多的gas和时间都被花在了重复计算完全相同的数据上;而且无法脱机模拟计算费用。

 <7>.只能做有限存储,没有考虑安全对接外部资源如IPFS

三、智能合约3.0

智能合约的执行的一致性必须是建立在区块链执行结果确定性上的,也就是说必须要有一个确定性的全序结果(Total order 或Linear order)。

目前已发出的公链很多都支持智能合约,但是你仔细分析其架构后,发现大多数都没有克服以上所说的以太坊的缺陷,更谈不上更好的延展了;

1. 号称区块链3.0的项目,智能合约部分还不如以太坊强

一些号称区块链3.0的项目(如DAG和分片项目)主要想解决TPS的问题,但是智能合约部分只能牵强附会,并没有很好地解决智能合约存在的问题和多样的需求。
   比如DAG就不适合智能合约,因为它的交易时长不可控、不存在全局排序机制,在其上很难建立起一致性的账户状态模型。

   分片技术和DAG一样也是着眼于解决TPS性能问题,而部分参与者却过于执着TPS的竞争,却忽视了安全性、一致性才是区块链的核心要素,分片技术还处于初级阶段,V神很早就提出来分片技术的构想,即使有强大的以太坊基金支持的情况下,到目前为止都没有发布一个分片版本出来,分片引起的状态不一致性和DAG一样的严重并且区块同步和存储上也是很大的问题。目前大家认为分片做得比较好的是Zilliqa,也许也是无法很好解决一致性问题的缘故,Zilliqa的白皮书已经声明它的智能合同语言不是图灵完备的,语言名字叫做一个Scilla,从来没听到过,更谈不上什么应用生态了,只能做btc那样的一些付款交易,所以可以说Zilliqa根本不支持智能合约

由于区块链应用主要是围绕智能合约展开的,因此作为下一代智能合约引擎(3.0)必须适应现实生活中的需求,如:多场景、多层次、可扩展、公开透明、安全稳定、可社区发展等。

从目前已公布的区块链智能合约支持信息来看,有且仅有Cypherium符合上面所说的智能合约3.0特征,因此在下面介绍给大家。

2. Cypherium虚拟机的一些特性

  <1>. 基于JAVA语言
Java 语言拥有世界上数量最多的程序员;
网络上有大量的第三方类库可供快捷开发使用;
已有提供很多功能强大的IDE,如IntelliJ Idea、Eclipse、VS Code等

具有高可移植性、支持浮点运算、CPU很容易进行优化处理。
已拥有很多杀手级应用

  <2>. 可进行分层计算

目前所有已知的链对智能合约都是统一部署、统一计算、统一共识处理,而现实生活中常常由于应用范围的不同,大家使用的计算终端的计算能力也很不同,其实这并不影响区块链对计算结果的一致性共识处理,Cypherium团队在设计时将智能合约的计算与计算结果的共识进行分离处理,可根据终端的计算能力进行分类计算,只对计算结果进行统一PBFT共识来保证一致性。

这样的设计使Cypherium链可适应更多的应用场景,将智能合约进行分层应用,如大型机可开发复杂的带有巨量计算的合约,PC节点可开发适合PC机运算的合约,手机可运行适合手机端的智能合约

<3>. 支持native 64-bit整数、定点数(fixed point representation)

Cypherium VM 已经根据不同的CPU类型对 64bit整数和定点数运算进行Native加速处理,从而提高智能合约的整体的运算速度

<4>. 支持运行时和编译时的安全性检查

以太坊智能合约的风险主要来自两个方面,一方面是智能合约语言本身设计上的缺陷导致的漏洞;另一个更重要的方面是由于编码人员对智能合约语言不熟悉造成的代码漏洞。为了避免这些问题,Cypherium VM 在编译和运行两个阶段都提供了安全检查机制,对缓冲区溢出、堆栈溢出、运算量过高、内存消耗过大的、不安全的外部请求等做检查处理,从而很大程序上保证了智能合约执行的可靠性和安全性,也很大程序上保证整个系统的稳健性。

检测合约 是否存在常见,第二个是验证合约 中用户给定的功能属性 满足性,第三个是合约 的功能正确性验证,第四个是对底层区块链平台核心代码检查。

<5>. 调用深度可调整,不再固定为1024

Cypherium提供了一个Call stack 深度的调整机制,用户可根据节点运行性能和面向用户群体的不同,进行适当的调整。

  <6>. GAS 计费机制透明

Cypherium只对运算强度、内存消耗、存储量做计费,并可提供外置工具行计算,用户不用接入网络也可清晰的计算出所消耗的GAS,如果遇到网络拥堵,用户可缴纳固定分级的优先费(暂且定位2的1,2,3,4,5,6次方6级别)进行排队靠前的优先处理,费用也是固定规则、公开透明的。

<7>. 智能合约可更新

所有相关账户投票同意的情况下,对已爆出漏洞的智能合约可以采取废弃机制,新部署的合约可继承现有合约相关状态和数据。

<8>. 可完全兼容以太坊所有智能合约

以太坊上已经成熟运行的智能合约可能有近百万了,为吸引这部分用户, Cypherium VM 提供一个完全兼容以太坊智能合约的机制,用户可不用做代码的任何改动,就直接部署到Cypherium链上,运行逻辑和结果和原来完全一致。

<9>. 安全性更高

Cypherium虚拟机的所有运算都做沙箱隔离处理,内部程序会时刻提供自身的运行状态给外部监控程序,一旦发现意外情况如受到攻击、出现死循环、出现巨额数字(常常是内存溢出),立即进行停止运算处理,很大程度上保证了节点正常运行和保护用户的链上资产不受意外损失。

同时我们对执行结果进行CoSi联合签名处理,使得执行结果状态数据在网络通信过程中无法篡改,从而有效地防止数据伪造,保证了结果的一致性校验。

  <10>. 自带跨链原子操作包

随着区块链应用的多样化,公链、联盟链、私链也愈来愈多,任何一个链即使再强大,如果不能与其他链进行通信都将成为一个孤岛,应用社区将无法活跃。    

Cypherium基于COSMOS和ILP生态,提供相关的开发包,用户可以很方便的在智能合约代码使用,甚至能在合约里可进行去中心化多币种交易,从而让Cypherium生态不再孤单、更加多样化、用户群体更加活跃。

  <11>.自带安全对接外部存储包

区块链里存储是非常昂贵的,目前IPFS方案能很好地解决这个问题。
IPFS是一个对等的分布式文件系统,它尝试为所有计算设备连接同一个文件系统。该系统利用区块链协议和网络基础设施的优势来存储不可更改的数据,同时可移除网络上的重复文件。
    当我们讨论 IPFS 这种底层的区块链技术时,就不得不提构建在 IPFS 上的FileCoin,它提供了一个给宿主和上传者交易的市场,通过市场可以调节存储的成本,上传者能够根据价格选择速度、冗余和成本,它将节点分为存储和检索两种类型,所有人都可以成为存储节点,将自己磁盘上额外的存储空间租赁出去,而检索节点则需要尽可能靠近更多的存储节点,也需要更高的带宽和更低的延迟,用户会支付最快返回文件的检索节点。
    Cypherium对接IPFS主要是指对接上面提到的检索节点,提供查询功能,这样使得Cypherium智能合约能够及时查到IPFS上的软件、音视频的各种状态,从而方便地进行相关交易。
<12>. 节点无需停机就可以进行虚拟机功能的升级

Cypherium团队在设计虚拟机的时候,将指令集、共识、签名、一致性校验等核心功能内置以外,大部分功能模块都进行外置处理,运行的时候根据需要去动态地寻找相关模块来进行调入执行,这样使得虚拟机的非核心功能升级变得非常容易,这个功能特别是对大型协同计算场景非常重要。

  <13>. 实现了功能组件化

目前的大部分区块链设计都是智能合约统一计算,而现实生活中常常是不同的合约对应的是不用的应用群体,如赌球合约常常只对应球迷和赌徒群体,期权合约常常只对应企业员工群体,不同的合约可以对应有不同运算能力的组件。
    Cypherium团队在设计的时候将计算和共识一致性进行了分离处理,只对运算结果负责, 这使得并不要求所有节点代码模块都一样,节点完全可根据自己的用户群体来选择相关的功能模块,这些功能模块在测试网上可以无许可运行,但是要想在正式网上运行,则必须通过Cypherium组织的官方认证。但是验证节点必须是全功能,这样才能保证执行结果的一致性。
    这样样用户可广泛参与虚拟机和智能合约功能开发,并能在测试网上发布,可形成功能组件买卖社区生态,从而使我们的功能越来越强大,带来用户的极致体验。

3.智能合约3.0独特应用场景展望
  区块链常规的应用场景非常多,在此不想再一一列举,支持常规应用肯定是没问题的,在此主要讲一下它可以支持独特应用部分

 <1>. 去中心化交易所
     充分利用其智能合约跨链特性,再加上一个订单记录数据库,通过APP接口完全可以开发一款去中心化交易所出来。

<2>. 软件、音视频 版权交易

    上面已经提到Cypherium可以查询到IPFS里的内容信息,这就为外部版权交易打好了坚实的基础,智能合约里可很方便地利用这些信息进行及时状态管理、查询和交易。

(3). 中大型协同计算(如比特币联合挖矿,气象计算,人工智能协同计算等)

   这部分在智能合约里进行还没有尝试过,Cypherium提供了一个全新的机会,让大家可以利用自己的算例进行协同工作,并自动进行费用的计算和收益的分配。

(4). 票据交易

   区块链可以解决票据真实性的问题。从票据发行即对全网所有业务参与方广播,当检验数字票据信息是否被转让或者篡改时,区块链可以提供无可争议的一致性证明。同时还可高效、便捷的实现票据价值流转,

而通过构造托管于智能合约的用户池,还可以创造出实时融资等新的业务场景。

票据常常带有支付系统的定制性,如指定某个银行托管等,这些都需要进行很复杂的定制处理,而Cypherium 的组件化、计算与共识分离的设计,能很好地适应这个复杂的定制处理。使其能更好跟实际业务对接,从而进一步杜绝票据背飞、打飞,同时也能消除目前票据市场的部分中介乱象。

你可能感兴趣的:(智能合约)