1.区块链概述
区块链
是利用块链式数据结构来验证
和存储
数据,利用分布式节点共识算法来生成和更新数据,利用密码学的方式保证数据传输和访问的安全,利用由自动化代码组成的智能合约来编程和操作数据的,一种全新的分布式基础架构和计算范式。
通过对等网络Peer-to-Peer(P2P)
技术、共识算法、哈希算法、公钥算法、分布式账本、智能合约等技术的组合为解决网络的信任问题找到了较好的解决方法
1.1 分布式账本
1.1.1 中心化和去中心化
对等网络模式
:是指每个节点地位相等,而且具备服务器和客户端的双重功能,既能作为服务器节点为其他客户提供服务,也能作为客户端向其他节点请求资源。这是一种去中心化的服务模式。
P2P网络根据其去中心化的程度大致可以分为
去中心化
、半中心化
、中心化
三种
半中心化也称为混合式结构,吸取了中心化和去中心化的优点,节点分为能力较强的超级节点和普通节点,早期的集中目录式结构对等网络采用中心化结构,将资源索引放在中心节点,具体资源分布式存放在各节点
1.1.2 分布式账本
账本
:是所有金融系统中的交易记录,区块链实际上是提供分布式存储的数据库,它将数据写入数据库,这个过程称为记账。
分布式记账:全网同一,全网共享,区块链账本是一本公开的分布式账本,全网每个节点记录了全网所有节点的交易历史,各节点的账本完全一致,难以篡改。
交易:操作
记账:操作记录
1.1.3 区块链账本
区块链中的每个区块可以理解为一页账本页,一个区块是多笔交易记录组成,每个账本页的记录内容有一定格式。
区块一般包括有
- 区块头:类似协议报文头部,区块头部一般是固定长度,不同的区块可以设计不同的头部
区块头部主要包含前区块哈希值、时间戳、版本号、随机数有的也称为难度位
,默克尔树根植等组成
- 区块体:一般是由该区块所包含的交易数量和交易内容组成。
区块链是将前一区块的杂凑值作为指针将区块连接在一起的。
构成区块以及区块链的核心技术是杂凑函数
:哈希函数是将任意长度的消息压缩到某一固定长度的消息摘要函数。也被称为单向散列函数、杂凑函数、杂凑算法等,它是密码学中的一种保证数据完整性的方法,杂凑函数具有单向性,抗碰撞性,可验证性等特点。
1.2 共识机制
共识
:是达成同步一致的过程
共识机制是区块链可靠运行的核心支撑,目前的各类共识机制很难做到同时兼顾系统交易吞吐量和可扩张性
分类方法
- 将其是否存在恶意破坏节点导致不一致,分为拜占庭算法和非拜占庭算法。
拜占庭算法考虑恶意节点或者故障节点的分布式一致性算法
非拜占庭算法,不考虑人为故障的分布式一致算法。
现有的区块链共识机制可以分为选举类,证明类,随机类,联盟类和混合类5种类型
1.3 实用拜占庭容错(PBFT)
假设整个系统内的所有节点为3n+1个,故障节点必须小于等于n个。节点被分为主节点和从节点。
算法流程:客户请求,主节点序号分配,节点间相互交互,节点互相确认序号并执行客户端请求,节点分别响应客户端。
所谓相互确认序号就是在确认请求的合法性,如果出现恶意节点误报请求,那么通过实用拜占庭容错算法就能够发现。
缺点
- 扩展性较差,依赖于参与节点的数量
- 去中心化的程度弱,PBFT算法仅适用于系统节点固定的联盟链或者私有链环境,不适用于完全去中心化的公有链节点
- 容错率较低,恶意或者故障节点必须少于1/3的系统总节点数量
共识速度较其他共识机机制较快,可以实现秒级共识。
1.4 工作量证明算法(POW)
节点
在每轮共识中通过完成某项难以解决
但是易于验证
的任务来竞争记账权,在每轮竞争中获胜的节点就获得记账权。例如比特币所使用的PoW
共识算法俗称为挖矿,就是计算一个给定难度的哈希值的输入值,谁先计算出满足要求的随机数,谁就获得了记账权,由于挖矿需要耗费大量的算力,为了鼓励矿工参与争夺记账权,比特币采用特有的激励机制,奖励获取记账权的节点一定额度的比特币。
挖矿就是给定
H(x)
值的条件,例如小于某个固定值,求输入x,节点获得了记账权就意味可以由记账节点打包以生成区块,比特币系统一般将区块生成时间控制为10分钟。
软分叉问题
如果同时生产出两个新区块,这时候区块链就存在软分叉问题,分叉是指同一个时间段内全网不止一个节点算出了随机数,这时候这多个节点在网络中同时广播它们各自打包好的合法临时区块,某节点如果同时收到多个针对同一前续节点的后续临时区块,则该节点会在本地区块链上建立分支,但是这只是暂时的。
区块链会采用最长合法原则,等到下一个区块被生成,也就是下一个区块被生成,也就是下一个工作量证明被挖出的时候,这个区块被添加到哪条链上哪条链被证实是最长的,那么它就变成了合法链。通常一笔交易在区块上链后又有5个新连接的区块,也就是这笔交易得到了6次确认之后,才认为确实上链了。
POW算法的缺点如下:
- 资源浪费,挖矿行为造成了大量的资源浪费。
- 共识时间长,由于存在软分叉的问题,上链确认时间比较长, 每秒只能进行7笔交易。
- 51%算力的攻击,如果恶意节点掌握了全网超过了50%的算力,那么对这个网络来说就会造成破坏。
工作量证明具有完全去中心化的优点,节点可以在不需要认证身份的条件下自由加入和退出网络。
1.5 权益证明(PoS)
权益证明机制的运作方式是矿工必须拥有一定数量的代币才能获得竞争记账的权利,PoS
的挖矿是以货币的持有量为基础的,如果仅靠代币量来决定记账权,就会出现掌握代币量最多的节点控制记账权的情况。
常见的权益证明机制根据每个节点拥有代币的多少和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。
PoS算法的缺点
- 记账权不够随机。掌握代币量多的节点,获得记账权的几率较其他节点大,容易失去公平性。
共识时间较PoW要短,降低了资源浪费率。
1.6 股份授权证明(DPoS)
首先由全体节点投票选举出一定数量的节点代表,由节点代表来代理全体节点确认区块,维持系统的有序运行,节点代表轮流生成区块,如果在给定的时间内无法生成区块,则将权限交给下一个时间片对应的节点代表,全体节点可以通过投票随时罢免和任命新代表,实现实时民主。
DPoS算法的缺点为:
- 记账不够随机,类似PoS选取固定数量的代表节点记账存在中心化的隐患,无法实现完全去中心化
共识时间较短,股份授权证明机制可以大大缩小参与验证和记账节点的数量,从而达到秒级的公式验证。
1.7 共识机制的基本步骤
- 选取记账节点:从全体节点中选取具有记账权的节点
- 生成区块:由记账节点按照一定的策略将一段时间的交易打包到一个区块中,并向全网进行广播
- 区块的验证:全网节点收到新打包的区块之后,分别进行数据的完整性、正确性验证和发送者身份信息验证等内容验证,如果验证通过,则反馈信息,如果打包区块得到全网大部分节点验证认可,则可以作为新区块添加到区块上
- 上链记账:记账节点将新区块添加到从创始开始迄今为止最长的一条主链上。完成一次完整的共识操作和区块生成上链的过程。
1.8 非对称(公钥)密码体制
如果Alice想和Bob签署一项协议,需要Alice
进行数字签名,Alice
可以使用自己的私钥对信息进行运算,将这个加密后的信息进行运算,发送给Bob,Bob收到后利用Alice的公钥对信息进行验证,因为Alice
只有自己知道,因此可以证明Alice
的身份,其他人是无法伪造Alice
的操作的。
为了降低其运算时间,在进行数字签名的时候,会先使用哈希函数对需要签名的信息进行哈希运算。
当Alice
付给Bob
比特币的时候,先会使用Alice
自己的私钥进行签名,以保证这笔交易确实是Alice
付给Bob的,还会使用Bob
的公钥进行加密,这样的话只有Bob
的私钥才能进行解密。
1.9 智能合约
通俗来讲,区块链上的智能合约就是能够自定义逻辑的程序代码,部署于区块链的网络节点上,利用智能合约可以根据实际的应用需求开发适用于各种场景的区块链应用程序DApp
。
实际上,智能合约就是一段应用程序,但是这段应用程序是部署在区块链之上的,只所以能够产生与运行在传统信息上的传统程序所无法达到的用程序保证约定自动执行,用程序算法代替人的仲裁和执行合同
,是因为其运行的区块链系统环境具有各节点内容一致,不可篡改,多方验证,多方共识的特点,这点环境特点是传统信息系统所不具备的。
也就是说是一套程序代码可以运行在整个区块链程序之中。
- 脚本智能合约:以比特币为代表的脚本型智能合约,使用基于堆栈的脚本语言,只能够在有限的执行环境中进行简单的处理
- 图灵完备型智能合约:图灵完备型智能合约,其典型代表是以太坊和超级账本,所谓图灵完备是指能用该类编程语言模拟任何图灵机,图灵完备的智能合约能够使用任意数量的变量,编写出各种复杂逻辑,与脚本型智能合约相比,具有强大的开发能力。
- 可验证型智能合约:主要应用于安全性和效率要求较高的商业交易场合,所提出的编程语言Pact是非图灵完备的可验证智能合约系统,可以直接编写运行在
Kadena
区块链上。
智能合约是部署在节点或者区块链上的一段代码,通过事件触发后自动执行合约条款,运行结果会输出到区块链中。
- 缺点:能够及时响应,准确执行,受人为干扰较小
- 目前其功能还较弱,交互性还比较差,调试运行环境与经典程序相比
1.10 区块链的典型工作流程
1.11 相关概念
双重支付:分布式系统的一致性问题,双重支付也称为双花,就是一笔钱被重复使用了两次
- 时间戳:每个区块头会有一个时间戳记录该区块的生成时间,从而可以区分交易产生的先后顺序
- 签名机制:主要是对施行双花行为的用户进行追责。
- 最长合法原则:只能有一笔会被认可。
UTXO与交易记录
一条交易主要记录了交易输入和交易输出的部分
- 交易输入分为发币交易
CoinBase
输入和普通交易输入,在一个比特区块记录的多笔交易中,第一笔一般是一个称为发币交易的特殊交易,其付款方是比特币系统,也就是新区块生成的时候,系统所奖励的比特币,也就是通常所说的挖矿奖励,普通交易包括前交易Hash
、前交易输出索引、签名和公钥(通常称为解释脚本) - 交易输出包括利用收款人公钥加密后的输出金额和输出地址等,输出地址是收款人的公钥通过杂凑和编码后的乱数,交易输出实际上代表了资金的转移,需要有收款人的私钥才能解密,以及为比特币设定类似花费条件这样的锁定脚本.
传统金融交易的核心是建立在用户的账户上的
比特币系统的交易与传统基于账户的思维完全不同,在比特币系统中没有传统账户或者钱包的概念,只有UTXO
未花费交易输出的概念。
简单来说,这个看起来很复杂的UTXO就是一条链表, 这个遍历这条链表,查看链表上每个节点的状态,来看自己是否花了这个节点上别人给自己的钱。
- 任何一笔交易的输入总额与交易输出总和相等,每笔交易所有的资金来源,每笔交易所有的资金来源自以前系统某几个用户的
UTXO
未花费金额,也就是交易输出 - 比特币交易中没有我们熟悉的钱包或者账户的概念,个人的资产实际上就是通过追溯个人所有的未花费记录来计算出
UTXO
的值。 - 为了保证输入的真实性,付款人需要用自己的私钥对输入信息进行签名,收款人会用付款人公钥进行验证
- 输出地址实际上是收款人的公钥,只有拥有收款人的私钥才能进行解密,才能获得比特币
2. 区块链的分类
根据节点进入区块链网络是否需要许可,区块链可以为公有链、私有链、联盟链。
2.1 公有链
公有链是一种完全去中心化的区块链,节点是没有准入门槛的, 所有节点都可以随时进入或者退出网络,全程不需要任何身份认证和授权,因此也被称为非许可链,每个节点享有同样的权利和义务,完全对等,信息完全公开透明,所有节点都有权参与公式,都可以存储一份完整的区块链账本。都可以获知链上的所有信息。
公有链的记账节点一般通过共识算法产生。共识机制一般使用工作量证明PoW或者权益证明PoS,或者两者混合的方式的共识机制。
- 完全去中心化:在陌生节点建立共识,形成完全对等的网络
- 匿名性:节点可以任意进入网络,不需要进行任何的约束和证明,用户具有匿名性。
- 激励性:为了保证对等节点愿意为网络做出贡献,公用链一般都设置有激励机制,多数通过发币来激励节点参与共识,每个节点获得的奖励与其在共识过程中所做的贡献成正比。
比特币和以太坊都是采用公有链的架构的,目前基于区块链的各种虚拟代币基本上衍生自比特币,因此采用公有链形式。
2.2 私有链
私有链的读写权限和记账权限由组织进行规定,由于节点需要进行身份认证和权限分配,因此是一种许可链。它是半中心化结构,因此可以用拜占庭容错或者非拜占庭容错的共识机制。
与公有链相比,其主要价值是利用区块链技术提供不可篡改、可追溯、自动执行的高安全可靠性的运行平台,主要用来在组织内部进行审计追踪,共享数据等
2.3 联盟链
联盟链是基于私有链和公有链之间的一种许可链,一般由多个不同的组织构成。
区块链上的读写权限和记账权由联盟链规则决定,其记账节点一般由系统选定,参与共识的节点较公有链少很多。因此不采用工作量PoW证明,较多采用Raft,PBFT等共识算法
- 部分去中心化,联盟链只需要进行注册即可,因此是一种部分去中心化结构
- 成员管理:对于成员的进入和退出,操作行为等会进行认证,授权,监控,审计等
- 数据不公开:联盟链的数据仅局限于联盟内部机构及其授权用户有权限访问
- 交易速度快:联盟链的成员有限,容易达成共识,其交易速度快
- 不需要特殊激励:记账节点一般是提前选好的,而且系统是部分中心化的,因此不需要激励机制
3. 区块链的特点
- 对等性:整个区块链采用无中心或者弱中心的架构,采用分布式、传输、验证等方式
- 开放性:在去中心的区块链系统中
常见于公有链
,节点可以随机加入和提出区块链,系统具有最大限度的开放性,在私有链和联盟链中,其开放性体现在节点之间的数据共享 - 可信性:区块链的可信性是由共识、杂凑、非对称密码技术、分布式记账等多种技术配合的结果
- 可靠性:使用分布式高冗余的架构保障数据安全和可靠性,以增加系统存储空间和通信复杂度为代价
- 功能性:智能合约的可编程为上层应用提供灵活的开发空间,开源的区块链系统使其为各种应用提供合适的功能
- 匿名性:公钥作为用户地址在一定程度上保护了用户的隐私,但并不完全
4. 区块链的典型系统
4.1 比特币的优势
- 防止通胀:定期调整挖矿的难度,保证平均出块时间
- 匿名性:复杂的计算保证用户隐私,也保证了随进随出。
- 完全去中心:机制保证在没有第三方机构下平稳运行
- 永久记录:高昂的交易篡改代价保证了交易的安全、准确。
4.2 比特币的劣势
- 高能耗
- 低存储和交易效率
- 半隐私
- 价格波动大
- 应用场景有限
- 监管困难
4.3 以太坊的概念
- 利用智能合约进行管理:官方推荐Solidity
- 以太坊虚拟机:沙盒,使得智能合约代码与外界完全隔离
- Gas燃料:用于代码运行计费,防止无限循环
- 以太币:激励机制,由挖矿、交易费和账户转账获得
- Ghost协议:用于处理分叉,选择主链以及如何奖励矿工
- 账户:包括外部用户以及智能合约用户
- 区块:包括区块头,uncle区块列表和交易列表
- 共识方法:PoW共识以及PoW+PoS混合共识和Pos共识
4.4 超级账本Hyperledger Fabric
- 多种角色划分:Client/peer/Order
- 增加用户身份和权限管理:增加MSP构建PKI/CA机制实现用户身份证明和准入
- 支持可插拔的模块化架构
- 实现多通道的Channel实现数据隔离
- 独立进行排序和生成区块的操作
- 支持多种语言的SDK
- P2P网络的区块链网络
- 支持多种编程语言的链码
- 支持多种DBMS
- 两种交易类型