从区块链2.0也就是以太坊的区块网络,咱们接触到了智能合约。智能合约并不是一个新的词语,其实在1995年的时候,有一个叫尼克的人,他就提出了网络安全智能合约的这个概念。只是当时由于网络环境比较差,网络条件不成熟,导致这个概念并没有在网络中被执行起来。
智能合约的概念
到底什么是智能合约呢?咱们先一起来看一下它的定义:智能合约是一种旨在以信息化方式传播验证,以及执行合同的计算机协议。它首先是一种计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转,这就是智能合约的一个定义。
智能合约的信任机制
通过区块链的普及,咱们了解到智能合约,目前它是提供了一种方式,这种方式的安全性要比传统合约的安全性更高,而且它在担保合约交易的成本上,要比传统合约的成本低很多。智能合约并不一定要依赖于区块链,而且在区块链之前智能合约这个概念已经有了。只不过现在区块链的发展非常适合智能合约,就是智能合约更加适合在区块链上来实现。这个得益于区块链本身的一些特性,比如说区块链的去中心化,数据不可篡改性,可追溯性和它的匿名性等等。
综合起来就是一句话:区块链给予了智能合约最好的一个运行的环境。这得益于智能合约的特性,它的特性就是信任机制。
智能合约演变过程
其实在区块链里面智能合约的热潮,是从区块链2.0以太网为代表的区块链网络掀起来的。接下来我们通过一张图来给大家描述一下,从比特币网络到以太网网络,智能合约是怎么样演变出来的。我们看一下区块链的这个结构:
咱们从区块链架构的演变过程来看一下,智能合约在整个区块链网络中它的一个作用。在比特币网络中,一些接口的调用或者是一些执行都是通过脚本来执行的。咱们再看右边的这幅图,右边的这幅图是以太坊的结构网络架构,咱们可以看出来,智能合约架设于App和DAPP之下,也就是说DAPP通过智能合约,才能够去调用网络上面的一些数据。
智能合约如何在区块链中被执行
为了更方便大家理解,我对这个智能合约在这个地方的作用,做了一个详细的说明。我认为,智能合约就是区块链环境里面可执行的代码集。再进一步的理解,就是最上面的DAPP通过RPC接口触发智能合约,然后智能合约进行一个执行。当然你要执行智能合约,首先你肯定是要发布智能合约,发布智能合约的时候需要消耗一定的通证,而消耗通证的数量是根据智能合约的难度来决定,就是说这个智能合约的处理逻辑越长、越多,那么你消耗的通证就越多。发布完智能合约以后,你需要通过DAPP,通过RPC接口去调用你的智能合约,对智能合约进行触发。
具体这个合约应该怎么样去写,它有些怎么样的规范,咱们在这节课上就不讲了。咱们在以后的课程中再给大家讲解一下,这个智能合约的书写规范也好,用些什么样的语言来开发,或者怎么样写。从刚才发的这幅图上,还有几个概念也一并说一下:
第一个概念就是那张图中间的那个箭头,叫图灵完备;
第二个概念就是右边这幅图智能合约EVM这个概念;
第三个概念就是DAPP。
图灵完备
首先说一下第一个概念:图灵完备。说到图灵完备的时候,我们必须提到一个人,这个人叫艾伦图灵。图灵是英国的一个数学家,他对人类最大的一个贡献就在于他设计了图灵机。不知道大家之前有没有听过图灵机,图灵机是一种抽象的计算机模型,它主要是用于替代人类用纸和笔运算的过程,也就是说通过图灵机可以做任何计算的逻辑运算。接下来全部通过一幅图,我在网上找了一幅图,咱们来了解一下这个图片及它的一个工作流程。
从这幅图上咱们大概说一下,这中间的方盒子,咱们可以把它理解为图灵机,一种抽象计算的模型。最长的这一溜,其实可以看作一条纸带。每个纸带上都有输入一些参数,通过一条一条纸带往后传输,每过一段纸带,这段纸带的参数就进入图灵机,图灵机经过一些逻辑运算,把最后的结果再返回输出到纸带上,当输出完毕以后,这个纸带往前走一格,这样咱们就能很好的理解图灵机的概念了。这样的话,咱们对图灵完备这个概念就比较好理解,就是说他符合图灵机运算的逻辑,通过一系列操作数据的规则(比如说一些指令、编程语言)可以计算出一些结果,而计算结果的这个过程咱们就叫图灵完备。
说到这里大家有一个疑问,上图中通过比特币网络的脚本也能进行执行,那么它为什么不是图灵完备的?这个地方咱们做一个区分。
比特币脚本语言不是图灵完备的,具有一定的局限性,它没有循环语句和复杂的条件控制语句。由于语言存在这种局限性,我们也就没办法使用这种语言写一些死循环或者一些能够导致DOS攻击的恶意代码,从而也就避免了比特币网络受到DOS攻击。每一个全节点,都会对交易进行验证。具有这种局限性的脚本语言,使人们无法把这种验证机制看成一个攻击比特币网络的缺陷。而以太坊网络中,使用了智能合约,而智能合约呢,它里面包含一些复杂的循环和条件控制语句,相对脚本更智能,但是也可能有死循环或者是被攻击,各有利弊。
而MAI公链的正是基于这样的考虑,在检测智能合约的时候,使用了人工智能的方式,通过过滤掉每一个开发者发布的智能合约的每一个漏洞,尽量去把这些漏洞过滤掉,使MAI公链在安全性方面可以得到保障。
EVM
EVM是一个合约虚拟机,它用于执行智能合约,存在于每一个挖矿节点中。当一份智能合约被触发的时候,智能合约虚拟机就会执行智能合约中的操作。
DAPP(分布式应用),区块链新物种,去中心化App。
咱们再说一下第三个概念,DAPP的概念,DAPP是一个分布式的应用,但是好多人会认为DAPP就是智能合约,其实他俩是有一定的区别的。咱们可以这样理解,智能合约其实相对来说是一个服务器的一个后台,智能合约是用来实现功能的,它是一串代码,用户使用起来非常的不方便。如果想实现跟用户友好的交互,就需要做一个前台页面,前台页面通过IP接口和后台对接,比如说APP,网页等用这个都是可以的。
其实一个完整的DAPP至少包含三部分:第一部分,你制作好的网页必须部署到服务器上;第二个你必须拥有一个完整的智能合约;第三个就是你的网页和你的智能合约必须要有完善的交互的过程。这三个的组合体我们才能称之为一个完整的DAPP。
很多的用户,对一个应用是不是分布式的应用,拿捏得不是很清楚,这个地方咱们给大家提出几个判别条件,怎么样区分一个应用是不是分布式的,符合以下几个条件的应用可以认为是一个DAPP(分布式应用):
1.DAPP必须要运行在分布式网络上;
2.参与者信息被安全存储,隐私得到很好的保护;
3.通过网络节点去中心化操作;
4. 应用必须完全开源、自治,且没有一个实体控制着该应用超51%的通证;
5.应用的数据必须加密后存储在公开的区块链上。
通过以上这五点,咱们就可以区分出来一个应用,他到底是一个去中心化应用,还是一个伪的去中心化的应用。
通过智能合约的概念,以及智能合约在区块链网络里被执行的一个过程,咱们可以看到,智能合约是怎么样被应用的。
通过人工智能过滤智能合约的局限性
但是现阶段智能合约在使用上面还是有些局限性的。比如说智能合约在编写上,对开发者要求特别的高,开发者必须特别的严谨,如果一旦出现智能合约的漏洞,就会带来很多的损失,比如说前段时间以太坊硬分叉,造成了损失。虽然最后丢失的币都追回来了,但是也造成了一个硬分叉,这样的做法是得不偿失的。
另外一点,智能合约在法律的问题上也是一个考虑的重点,比如说你写的一些智能合约,合不合乎人类的规范,合不合乎法律。比如说前段时间,出现了一个追杀特朗普的智能合约,这个智能合约虽然在功能上没有任何问题,但是在人道主义方面,它就不符合法律的规范。随着区块链的发展,我觉得智能合约的这些局限性,在很大程度上是可以被解决的,比如通过人工智能对智能合约的审查,就可以很大部分的把智能合约的局限性过滤掉。