system: [SYSTEM]

user: 2. 区块链 2.1. 区块链的意义 区块链技术是密码学、计算机科学、经济学等多个学科发展到一定阶段后的产物，有效融合了多个学科的杰出成果。区块链技术的出现为解决人类社会的信任问题提供了有力工具，进而将人类社会带入群智时代。 区块链系统本身能产生信用，这种具有信用的产品不是来自第三方，而是来自程序(算法)，因为区块链记录信息的产生需要全网络节点确认，而一旦生成将永久记录，无法篡改。互联网的底层协议是TCP/IP协议，实现了信息的低成本高效率传播；区块链可认为是一种新的底层技术，建立了新的信用体系。区块链取代了目前互联网对中心服务器的依赖，使所有数据信息都被记录在一个云系统之上，理论上实现了数据传输中的数据自我证明，从深远意义上讲，这超越了传统和常规意义上需要依赖第三方的信息验证模式，降低了建立全球信用体系的成本。 区块链还创造了一种新的价值交互方式基于“弱中心化” [ 2 ] ，但这并非意味着传统社会里各种“中心”的完全消失，未来区块链将出现大量的“多中心”体系，以联盟链、私有链或混合链为主，区块链将会进一步提高“中心”的运行效率，并降低其相当一部分成本。 区块链是一种由多方共同维护，以块链结构存储数据，使用密码学保证传输和访问安全，能够实现数据一致存储，无法篡改，无法抵赖的技术体系。这种技术给世界带来了无限的遐想空间，全球对区块链的关注热度持续升温，全球主要经济体从国家战略层面开始对区块链技术及发展趋势进行研究。 可以这样说，第一次工业革命是蒸汽机的发明为标志，第二次工业革命是以电力的产生，第三次工业革命是电脑与互联网信息技术的出现，那么第四次工业革命将是区块链技术的诞生。 2.2. 区块链特点 基于区块链的系统和以往的其他系统有很多的不同之处，以区块链为核心的有以下几大特点： 1) 分布式的(Distributed)：区块链没有中心节点，数据分布式的存储在各个节点上，即使绝大部分节点毁灭了，只要还有一个节点存在就可以重新建立并且还原区块链数据。 2) 自治的(Autonomous)：区块链是一种去中心化的、自治的体系 [ 3 ] ，所有节点是对等的，每个节点可以自由的加入或者离开但不会影响整个区块链系统，并且当系统运作起来可自行产生区块并同步数据，无需人工参与。 3) 按照合约执行(Contractual)：区块链是完全按照合约执行的，各个节点都有运行规则，一旦不符合规则就会被抛弃，其中最重要的便是智能合约，智能合约是一种可程序化的合同条款、规则或规定。 4) 可追溯(Trackable)：区块链中的数据是公开透明的，不能被篡改 [ 4 ] ，并且相关区块之间有一定的关联性，因而和容易被追溯。 若我们把每一个区块看作是一个账本上面记录着所有的交易记录，那不同区块之间的联系也可以看作不同的交易，则其工作的原理如图1所示。 图1. 区块链原理图 区块链(blockchain)是由多个区块链链接而成的连表结构，除了首区块(“创世区块”)之外，每个区块都由前一个区块的输出脚本控制，如图1所示每个区块都可以看成一个账本上面都有对应的交易记录a， b， c...n，每个区块都由前一区块的输出脚本与后一个区块的输入脚本联系起来，此时我们可以形象的把输出脚本和输入脚本看作一把锁和钥匙之间的关系，只有正确的钥匙才能打开正确的锁，以区块1，区块2为例如果区块2输入脚本是区块1的正确的钥匙那么区块1，区块2之间的交易才有效，否则交易无效，交易有效之后交易b也会包含一部分交易a的信息，这时候我们就可以根据区块2溯源到区块1。 2.3. 共识机制 近几年区块链技术从1.0时代发展到2.0时代再到正在到来的3.0时代，其共识机制扮演着不可或缺的角色，整个区块链网络是靠区块之间的节点通过共识机制维持着稳定。现在主流的共识算法有以下几种 [ 5 ] ： 1) POW算法：工作量证明算法，是最早提出的一种共识机制，靠参与者(矿工)进行挖矿为区块链网络提供算力，随着矿工的人数增加整个网络就越稳定，系统会给矿工的付出给予一定的奖励机制，以比特币和早期的以太坊为代表。 2) POS算法：股权证明算法，是根据参与者持有整个系统的代币的数量和时间来确定记账权的算法。 3) PBFT算法：实用型拜占庭容错共识算法，是根据BFT (拜占庭容错)改进得到，此算法不像前两种算法会对发行代币，但PBFT具有极高的安全性，节点容错率和最终性。以Hyperledger的Fabric框架为代表。 本文溯源系统为长远打算选取的是根据POS改进得到的DPOS算法即股权授权算法，是在参与者里通过类似居委会选举制度，选举一部分人为代表人进行投票确定记账权，优化了POS算法中可能出现的中心化现象。 DPOS算法可分两部分：如何选择一群区块生产者及调度区块生产。选择过程要确保利益持有方拥有局面最终控制权，因为当网络非正常运行时，利益持有方的损失最大。由于选择过程本身对实际如何达成共识几乎没有影响 [ 6 ] 。 为更好的解释这个算法，假设有3个区块生产者 A，B和C。因为达成共识要求2/3 + 1多数来裁决所有情况，在这个简化的模型中假设生产者C是打破僵局的角色。在现实中，会有21个或更多的区块生产者。类似工作量证明，一般规则是链最长者胜出。任何时候，当一个诚实节点看到一个更长的有效链时，它都会从当前分叉切换到更长的这条有效链。当大多数生产者不合格时，DPOS还是可以继续行使功能的。这样，社区可以投票替换掉不合格的生产者，直到恢复100%参与率。 说到底，DPOS之所以有如此强大的安全性，是来自于其选择区块生产者和验证节点质量的算法。赞成投票过程可以确保一个人即使拥有50%的有效投票权也无法独自挑选指定哪怕一个生产者。DPOS的设计旨在优化强劲网络连接的诚实节点100%参与共识的机制。这使得DPOS能够在平均只有1.5秒的时间内以99.9%的确定性确认交易，同时以优雅和可检测的方式降级，从降级中恢复到正常也不过是小事一桩。 2.4. 数字签名 数字签名实际上就是非对称加密的算法，即生成公钥和密钥一对密钥，公钥是根据私钥生成的一个地址，所以用私钥对数据进行加密，只有拿到对应的公钥才能进行解密，私钥是只能自己持有，同时生成的公钥由交易发起方公布给交易对象，交易对象通过公钥解密才能看到区块中的信息，从而保证了数据的真实性和可追溯性。 当区块内的信息状态要发生转移时，为保证数据信息的安全性与真实性，区块链节点之间在共识机制的依托之下需要对区块信息进行签名，而交易方必须拿到对应的公钥才能解密才能看到真实的数据信息，验证过程由脚本语言控制其执行的原理如图2所示。 图2. 脚本执行图 我们可以将脚本看作是一个栈，栈是一个后进先出的容器，那么脚本执行过程我们亦可以看成是一个对栈的操作过程 [ 7 ] ，中间过程由相应的合约代码(规则)命令，要成功执行脚本关键点有两个，其一是公钥，公钥实际上就是一个地址，当产生一个交易时就会产生一个公钥，在确认交易合法性是需要出示公钥验证，验证合法交易才能继续。其二是私钥也称作交易签名，私钥也是交易时所必需的，但是私钥只有交易发起人自己拥有，具有唯一性，不可复制性，公钥是交易双方都可拥有的，所有在确保交易的合法性的时候需要公钥和私钥同时验证，均合后法交易才有效，反之无效。 所以脚本执行过程如图2所示第一步先将私钥公钥依次入栈，在通过OP_DUP命令复制栈顶元素，然后通过OP_HASH160命令对公钥进行hash算法加密，此过程保证了公钥的安全性，防止恶性攻击偷取公钥。 公钥加密后只有交易双方知道，所以当发起交易者想要进行交易时需要交易的另一方提供同样的公钥，因此第四步 就是交易的另一方提供的公钥，此时脚本需要通过OP_EQUALVERIFY命令验证此时两个公钥是否相等，相等则交易继续，否则交易不合法。最后一步就是通过OP_CHECKSIG命令检查栈顶元素是否执行签名校验操作，此时的签名一定需要发起交易这提供自己的私钥进行签名，若操作之后相等，则返回TRUE，否则返回FALSE。以上所有步骤执行完了也就说明区块之间的交易成功了也就是  图1的区块1到区块2的步骤完成了。很显然区块链的这种交易方式是具有极高的安全性，并且是可追溯的。