智能合约1
最近我在看智能合约相关的东西,在理解一个事务之前最好先了解下这个事务的概念,看了一些文章,我将我的理解写一下:
合约:
先去掉智能,讲合约,在我们的概念中,合约指的是两个或以上的人或机构共同定义的一些条款。和我们平常讲的合同的概念差不多(不知道我的理解对不对)。
那么加上智能后的合约,就是在某些条件满足的情况下,自动签属和生效的合约。所以有人将智能合约称为“预言机”。就是将来在某些情况会发生的情况。
相逢区块链
那么智能合约和区块链之间是什么关系呢?其实智能合约的理念产很早就被提出来了,最早可以追溯到1994年,几乎与互联网同时出现。(当时只是有这个理念),由于当时没有天生的能够支持可编程交易的数字金融系统,这是一种极具前瞻性的理念。
提出智能合约概念的是广泛赞誉的密码学家尼克萨博。随着比特币的出现和应用,让这个理念有了实现的机会。
我们现在合约的签属需要一个可信任的机构进行认证,并且一式两份或多份,防止一方修改,而区块链技术天生就是一个可复制、共享的账本(每个结点都会有一份),一经验证,永久有效。所以解决了信任的问题。那么谁来记录这个合约的执行呢?就要用到区块链中的共识算法了。现在比较常用的有POW(工作量证明),POS(股权证明),DPOS(委任权益证明),PBFT(实用拜占庭容错算法)。所以一个可信任,可共识的P2P网络账本就达成了一个实现合约的条件。
触发条件
那么如何触发一个智能合约的执行呢?因为智能合约是工作在区块链账本上的,所以触发条件就是一个交易(或称事件)发生的时候,智能合约就会对这个合约执行条件进行验证,如果条件满足,则合约执行生效,并记录在区块链账本上。如果不满足,则合约执行失败。
我们举个例子:
我跟你打一个赌,如果明天下雨,算我赢,如果明天没下雨,就是你赢了。然后我们在打赌的时候就把钱放进一个智能合约控制的账户内,第二天过去了,赌博的结果出来了以后,智能合约就可以自动根据收到的指令自动判断(if ..else)输赢,并进行转账。将记录自动记录在区块链账本上。谁也不能赖账反悔。
这只是个让大家理解的例子。其实智能合约就是一个IFTT(If This Then That)——如果满足这个条件,就执行那个逻辑。
所以我们的定义就是:
智能合约是由事件(交易)驱动的、有逻辑条件判断的、运行在区块链账本之上的、且能够保管账本上资产的程序。
应用举例
我们了解了智能合约的定义,那么和我们普通人有什么关系呢?
我们现在人经常在网络上购物,包括一些电子书或软件,而这些东西我们购买下来后,只是从一个服务器上下载了下来,我们还可以二次利用,并且商家服务器上还存在着一份一模一样的东西,所以我们只是购买了一个拷贝。只是拥有了使用权,所有权还是商家,如果利用智能合约,我们就可以确权,将这个软件的一些信息存在区块链账本上,我们就拥有了所有权。和我们实物交易一样。
除了购买虚拟物品,实际物品的购买也会有变化,比方说我们买一辆车,经常需要签属一堆文件(交易合同)来确认这辆车已经属于你,而且文件有丢失的可能。
如果这辆车的信息存在区块链上,并且这辆车的交易合同和其他信息包括所有权信息已经写成了一个智能合约,我们只需要进行链上交易,就会自动执行智能合约,将这辆车自动确权,转移到你的名下,并且终生有效,是不是方便了很多。
甚至对我们平常借款还账问题都会是个好的解决方式,比如两个人约定好日期将多少币转到某个地址,可以通过智能合约自动执行。
智能合约构建及执行
1、多方用户共同参与制定一份智能合约;
1)首先用户必须先注册成为区块链的用户,区块链返回给用户一对公钥和私钥;公钥做 为用户在区块链上的账户地址,私钥做为操作该账户的唯一钥匙。
2)两个以两个以上的用户根据需要,共同商定了一份承诺,承诺中包含了双方的权利和义务;这些权利和义务以电子化的方式,编程机器语言;参与者分别用各自私钥进行签名;以确保合约的有效性。
3)签名后的智能合约,将会根据其中的承诺内容,传入区块链网络中。
2、合约通过P2P网络扩散并存入区块链;
1)合约通过P2P的方式在区块链全网中扩散,每个节点都会收到一份;区块链中的验证节点会将收到的合约先保存到内存中,等待新一轮的共识时间,触发对该份合约的共识和处理。
2)共识时间到了,验证节点会把最近一段时间内保存的所有合约,一起打包成一个合约集合(set),并算出这个合约集合的Hash值,最后将这个合约集合的Hash值组装成一个区块结构,扩散到全网;其它验证节点收到这个区块结构后,会把里面包含的合约集合的Hash取出来,与自己保存的合约集合进行比较;同时发送一份自己认可的合约集合给其它的验证节点;通过这种多轮的发送和比较;所有的验证节点最终在规定的时间内对最新的合约集合达成一致。
3)最新达成的合约集合会以区块的形式扩散到全网,每个区块包含以下信息:当前区块的Hash值、前一区块的Hash值、达成共识时的时间戳、以及其它描述信息;同时区块链最重要的信息是带有一组已经达成共识的合约集;收到合约集的节点,都会对每条合约进行验证,验证通过的合约才回最终写入区块链中,验证的内容主要是合约参与者的私钥签名是否与账户匹配。
3、区块链构建的智能合约自动执行。
作者:区块链研习社比特币源码研读班,black