简介:上一章咱们简单介绍了区块链技术的发展状况,并详细介绍智能合约的基础概念。能够说,区块链1.0时代(比特币)除了代币功能,与现实生活相去甚远。智能合约的出现,给区块链带来了惊天动地的变化,区块链也从一种帐本形式,变成了下一代计算网络的雏形。这一章咱们将聊聊智能合约的应用场景。编程
上一篇文章咱们聊过,尼克·萨博对智能合约定义已经说的很清楚,智能合约不是必定要用区块链来实现,好久以前就已经出现了:好比微信和支付宝的信用卡自动还款,您能够认为他是一种智能合约。当还款日到了,还款条件也知足(支付宝的余额宝、微信支付余额或者银行储蓄卡中余额充足),系统会自动进行还款,这些都是智能合约,也没有使用区块链技术。微信
既然传统的计算架构能够知足智能合约,为何区块链开始热炒智能合约了呢?最重要的缘由就是信任机制。看到这篇文章的读者应该已经对区块链技术有了必定的了解,咱们知道区块链解释的中心思想就是“去中心化”,在现实世界,合约是些在纸上的,只有双方签字画押以后,人们才确认生效;在计算机世界中,合约是记录在代码中的。那智能合约在银行、支付宝、微信等中心化的系统中,就两大问题:网络
1、黑客攻击的风险。回到刚才的例子,人们愿意相信银行的,可是一样的服务人们还愿意不肯意相信支付宝呢?毕竟这些证据都从高度保密的银行专向了支付宝系统中,他也有本身的“芝麻信用”,他会不会篡改呢?对不少人来说这里就要先存个疑问了。架构
2、中心化信息互通。“银行”-“支付宝”-“微信支付”每家都是中心化的、孤岛的,总不能期望央行、阿里巴巴和腾讯都打通吧,就算用户有这个意愿,各家也确定不想这么作,具体缘由你懂的:)post
那区块链技术又什么过人之处,能够赢得用户的信任呢?区块链
这里偏偏就是咱们刚刚提到两个中心化系统不能解决的问题。首先是不可篡改,这样就不须要担忧合约的内容会被更改,是数据没法删除、修改,只能新增,保证了历史的可追溯,同时做恶的成本将很高,由于其做恶行为将被永远记录,同时拥有高可靠行,咱们不用担忧系统在条件被知足时不执行合约;而后就是去中心化和给咱们带来的全网备份,完备的记录彻底能够支持支持过后的审计,避免了中心化因素的影响。微信支付
有了以上的特性,咱们再也不须要找一个中心化的组织来签定合约,区块链天然会帮助咱们完成其余的工做。这就是区块链带来的革命。智能合约的能量才被无限放大。.net
基于区块链的智能合约构建及执行分为以下几步:cdn
一、多方用户共同参与制定一份智能合约;blog
二、合约经过P2P网络扩散并存入区块链;
三、区块链构建的智能合约自动执行。
下面详细描述步骤1“多方用户共同参与制定一份智能合约”的过程,包括以下步骤:
首先用户必须先注册成为区块链的用户,区块链返回给用户一对公钥和私钥;公钥作为用户在区块链上的帐户地址,私钥作为操做该帐户的惟一钥匙。
两个以两个以上的用户根据须要,共同商定了一份承诺,承诺中包含了双方的权利和义务;这些权利和义务以电子化的方式,编程机器语言;参与者分别用各自私钥进行签名;以确保合约的有效性。
签名后的智能合约,将会根据其中的承诺内容,传入区块链网络中。
下面详细描述步骤2“合约经过P2P网络扩散并存入区块链”的过程,包括以下步骤:
(1)合约经过P2P的方式在区块链全网中扩散,每一个节点都会收到一份;区块链中的验证节点会将收到的合约先保存到内存中,等待新一轮的共识时间,触发对该份合约的共识和处理。
(2)共识时间到了,验证节点会把最近一段时间内保存的全部合约,一块儿打包成一个合约集合(set),并算出这个合约集合的Hash值,最后将这个合约集合的Hash值组装成一个区块结构,扩散到全网;其它验证节点收到这个区块结构后,会把里面包含的合约集合的Hash取出来,与本身保存的合约集合进行比较;同时发送一份本身承认的合约集合给其它的验证节点;经过这种多轮的发送和比较;全部的验证节点最终在规定的时间内对最新的合约集合达成一致。
(3)最新达成的合约集合会以区块的形式扩散到全网,以下图所示,每一个区块包含如下信息:当前区块的Hash值、前一区块的Hash值、达成共识时的时间戳、以及其它描述信息;同时区块链最重要的信息是带有一组已经达成共识的合约集;收到合约集的节点,都会对每条合约进行验证,验证经过的合约才回最终写入区块链中,验证的内容主要是合约参与者的私钥签名是否与帐户匹配。
(1)智能合约会按期检查自动机状态,逐条遍历每一个合约内包含的状态机、事务以及触发条件;将条件知足的事务推送到待验证的队列中,等待共识;未知足触发条件的事务将继续存放在区块链上。
(2)进入最新轮验证的事务,会扩散到每个验证节点,与普通区块链交易或事务同样,验证节点首先进行签名验证,确保事务的有效性;验证经过的事务会进入待共识集合,等大多数验证节点达成共识后,事务会成功执行并通知用户。
(3)事务执行成功后,智能合约自带的状态机会判断所属合约的状态,当合约包括的全部事务都顺序执行完后,状态机会将合约的状态标记为完成,并从最新的区块中移除该合约;反之将标记为进行中,继续保存在最新的区块中等待下一轮处理,直处处理完毕;整个事务和状态的处理都由区块链底层内置的智能合约系统自动完成,全程透明、不可攥改。
由此咱们能够了解在存证、溯源、数字资产等领域有着普遍的应用场景。
区块链2.0是更宏观的对整个市场去中心化,利用区块链技术来转换许多不一样的数字资产而不只仅是比特币,经过转让来建立不一样资产的价值。区块链技术的去中心化帐本功能能够被用来建立、确认、转移各类不一样类型的资产及合约。几乎全部类型的金融交易均可以被改形成在区块链上使用,包括股票、私募股权、众筹、债券和其余类型的金融衍生品如期货、期权等。
如今,以太坊网络以及国内的矩阵元等一系列区块链社区都提供了公开的智能合约编程的接口。
下一篇文章咱们将开始介绍智能合约开发最主流的语言Solidity的文档内容。若是你们有哪些疑问能够在博客里留言。
部份内容摘自〈区块链:从数字货币到信用社会〉(中信出版社)