以下文章是自己看书与知乎链接 这个主题下答主的回答的结合
简介智能合约
智能合约是什么,这个术语是跨领域法律学者尼克·萨博(Nick Szabo)提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。”换成更加通俗的描述就是“智能合约是一个在计算机系统上,当一定条件被满足的情况下,可以被自动执行的合约。”
智能合约一定要在区块链技术之上实现吗?答案是否定的。举个大家都熟悉的例子,就是信用卡的自动还款服务,我们就可以把它理解成一种智能合约。在具体的时间(信用卡还款日),当还款条件被满足(储蓄卡余额比信用卡还款金额要多的情况下),计算机系统会自动完成这笔交易(用最初设定的储蓄卡为信用卡还款)。然而这些服务仍是运行在传统的计算机系统之上,而这些系统并没有利用区块链技术。
既然传统计算机技术就可以实现自动交易的合约,那为什么这些应用没有广泛应用呢?那是因为还有一个问题没有被解决,那就是信任问题。我们知道,在现实世界中,合约是写在纸上的,签印之后人们才认为它生效;在计算机世界中,合约是记录在代码里的。那数字化的合约,会不会有合约被篡改之类道德风险,抑或是被黑客攻击的技术风险呢?答案是很高的。回到我们前面讲的自动还款的例子,如果是银行的官网提供这项服务,大家也许能够愿意接受,因为很多人是愿意相信银行的。但是同样的服务,搬到淘宝上新开的店铺,或者其他的网站上,从技术来讲其实也并不是那么难,但是会有人选择这种服务吗?因为人们不会信任提供服务的人,因为他们太容易做坏事,而且一旦出现纠纷,举证也是件非常困难的事情,最重要的证据都保存在对方的计算机系统中,他们想改点什么还不容易么。
那区块链技术又何德何能,能有什么过人的地方,可以赢得用户的信任。这就要从区块链技术的几个基础的特性讲起,我们经常讲,区块链技术给我们带来了一个去中心化的,不可篡改的,高可靠性的系统。首先是不可篡改,这样就不需要担心合约的内容会被更改;其次是高可靠行,我们不用担心系统在条件被满足时不执行合约;然后就是去中心和给我们带来的全网备份,完备的记录完全可以支持支持事后的审计。这样的系统,我们不再需要去相信和我们签订合约的对方,只需要相信区块链系统会把剩下的事完成就可以了。这就是区块链技术带来的革命性变化——去信任。正是在去信任的环境下,智能合约才大有用武之地。
现在,比特币网络、以太坊网络以及国内的井通网络等一系列区块链社区都提供了公开的智能合约编程的接口。已经有众多的创业公司基于这些公开的接口,开始开发智能合约的业务了。
智能合约与区块链的关系
尼克•萨博关于智能合约的工作理论迟迟没有实现,一个重要原因是因为缺乏能够支持可编程合约的数字系统和技术。区块链技术的出现解决了该问题,不仅可以支持可编程合约,而且具有去中心化、不可篡改、过程透明可追踪等优点,天然适合于智能合约。因此,也可以说,智能合约是区块链技术的特性之一。
如果说区块链1.0是以比特币为代表,解决了货币和支付手段的去中心化问题,那么区块链2.0就是更宏观的对整个市场去中心化,利用区块链技术来转换许多不同的数字资产而不仅仅是比特币,通过转让来创建不同资产的价值。区块链技术的去中心化账本功能可以被用来创建、确认、转移各种不同类型的资产及合约。几乎所有类型的金融交易都可以被改造成在区块链上使用,包括股票、私募股权、众筹、债券和其他类型的金融衍生品如期货、期权等。
智能合约看上去就是一段计算机执行程序,满足可准确自动执行即可,那么为什么用传统的技术为何很难实现,而需要区块链技术等新技术呢?传统技术即使通过软件限制、性能优化等方法,也无法同时实现区块链的特性:1是数据无法删除、修改,只能新增,保证了历史的可追溯,同时作恶的成本将很高,因为其作恶行为将被永远记录;2是去中心化,避免了中心化因素的影响。
基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。
智能合约工作原理
基于区块链的智能合约包括事务处理和保存的机制,以及一个完备的状态机,用于接受和处理各种智能合约;并且事务的保存和状态处理都在区块链上完成。事务主要包含需要发送的数据;而事件则是对这些数据的描述信息。事务及事件信息传入智能合约后,合约资源集合中的资源状态会被更新,进而触发智能合约进行状态机判断。如果自动状态机中某个或某几个动作的触发条件满足,则由状态机根据预设信息选择合约动作自动执行。
智能合约系统根据事件描述信息中包含的触发条件,当触发条件满足时,从智能合约自动发出预设的数据资源,以及包括触发条件的事件;整个智能合约系统的核心就在于智能合约以事务和事件的方式经过智能合约模块的处理,出去还是一组事务和事件;智能合约只是一个事务处理模块和状态机构成的系统,它不产生智能合约,也不会修改智能合约;它的存在只是为了让一组复杂的、带有触发条件的数字化承诺能够按照参与者的意志,正确执行。
基于区块链的智能合约构建及执行分为如下几步:
1、多方用户共同参与制定一份智能合约;
2、合约通过P2P网络扩散并存入区块链;
3、区块链构建的智能合约自动执行。
下面详细描述步骤1“多方用户共同参与制定一份智能合约”的过程,包括如下步骤: (1)首先用户必须先注册成为区块链的用户,区块链返回给用户一对公钥和私钥;公钥做为用户在区块链上的账户地址,私钥做为操作该账户的唯一钥匙。
(2)两个以两个以上的用户根据需要,共同商定了一份承诺,承诺中包含了双方的权利和义务;这些权利和义务以电子化的方式,编程机器语言;参与者分别用各自私钥进行签名;以确保合约的有效性。
(3)签名后的智能合约,将会根据其中的承诺内容,传入区块链网络中。
下面详细描述步骤2“合约通过P2P网络扩散并存入区块链”的过程,包括如下步骤:
(1)合约通过P2P的方式在区块链全网中扩散,每个节点都会收到一份;区块链中的验证节点会将收到的合约先保存到内存中,等待新一轮的共识时间,触发对该份合约的共识和处理。 (2)共识时间到了,验证节点会把最近一段时间内保存的所有合约,一起打包成一个合约集合(set),并算出这个合约集合的Hash值,最后将这个合约集合的Hash值组装成一个区块结构,扩散到全网;其它验证节点收到这个区块结构后,会把里面包含的合约集合的Hash取出来,与自己保存的合约集合进行比较;同时发送一份自己认可的合约集合给其它的验证节点;通过这种多轮的发送和比较;所有的验证节点最终在规定的时间内对最新的合约集合达成一致。
(3)最新达成的合约集合会以区块的形式扩散到全网,如下图所示,每个区块包含以下信息:当前区块的Hash值、前一区块的Hash值、达成共识时的时间戳、以及其它描述信息;同时区块链最重要的信息是带有一组已经达成共识的合约集;收到合约集的节点,都会对每条合约进行验证,验证通过的合约才回最终写入区块链中,验证的内容主要是合约参与者的私钥签名是否与账户匹配。
图2 合约区块链示意图
下面是步骤3“区块链构建的智能合约自动执行”的过程,包括如下步骤:
(1)智能合约会定期检查自动机状态,逐条遍历每个合约内包含的状态机、事务以及触发条件;将条件满足的事务推送到待验证的队列中,等待共识;未满足触发条件的事务将继续存放在区块链上。
(2)进入最新轮验证的事务,会扩散到每一个验证节点,与普通区块链交易或事务一样,验证节点首先进行签名验证,确保事务的有效性;验证通过的事务会进入待共识集合,等大多数验证节点达成共识后,事务会成功执行并通知用户。
(3)事务执行成功后,智能合约自带的状态机会判断所属合约的状态,当合约包括的所有事务都顺序执行完后,状态机会将合约的状态标记为完成,并从最新的区块中移除该合约;反之将标记为进行中,继续保存在最新的区块中等待下一轮处理,直到处理完毕;整个事务和状态的处理都由区块链底层内置的智能合约系统自动完成,全程透明、不可攥改。