1、区块链特点
- 去中心化
- 数据可追踪
- 数据不可篡改
- 公开透明
- 集体维护
去中心化的好处:
- 降低了网络的安全风险,避免因中心节点被攻击而使整个网络崩溃
- 使中心化公司的权力分散化,避免了数据垄断的出现
2、区块链结构
它是由数据块和“链”组成的,数据上传所形成的数据块,会按时间顺序链接在一起,形成链式的结构。
数据块包括区块头+交易+区块尾
区块头包括:生成时间、实际数据(即区块体)的哈希、上一个区块的哈希
3、区块链的核心技术
-
分布式存储,一种将数据分散存储到多个地方的数据储存技术,而且存储的数据可在多个参与者之间共享,人人可以参与,并具有相同的权力,一起记录数据,主要起到了数据储存的功能
-
共识机制,一种协调大家处理数据的机制(即挖矿原理),主要起到了数据维护的作用
-
智能合约,一种旨在以信息化方式传播、验证或执行合同的计算机协议,主要起到了数据执行的作用
-
密码学,一种特殊的加密和解密技术,包括哈希算法、公钥私钥、数字签名等等,以此来保证整个系统的数据安全,并且证明了数据的归属
当一笔数据产生后,会由共识机制进行数据维护,通过分布式储存记录在链上,然后交由智能合约去执行,最后由密码学保障整个体系的安全
3.1 分布式存储
分布式存储就是把数据分散到多个数据库中,共同储存数据,哪怕其中的一个出现问题,其他的数据库也能够顶替它继续运行,保证整个公司产品的正常工作。
区块链使用的去中心化数据库,它是由一个个数据库连接起来,形成一个大的分布式数据库,每个数据库权限相同,都可以查看、储存所有的数据。
好处:
- 避免了单点故障,降低了网络遭到黑客攻击或信息丢失的几率
- 防止数据都集中在中心化巨头手中,数据被用于作恶
3.2 共识机制
共识机制就是一种每个节点都必须遵守的规则。这个规则内容要包含两点,第一是解决分布式存储中,每个节点怎么记账的问题;第二是解决不同节点间,如何交换信息、达成共识的问题。
3.2.1 PoW共识机制
工作量证明机制,当一笔交易产生后,每一个想要记账的节点,都需要依靠自己的计算能力与他人竞争、争夺记账的权力。每过大约10分钟的时间,就会进行一轮算力竞赛,参与的节点通过算力不断寻找一个随机数Nonce。谁先找到满足一定条件的Nonce值,且通知全网、获得认可,谁就能获得记账的权力。最终,获得记账权的人,他所打包的区块会连接到区块链的链上,同时他处理的数据,也会被全网的其他节点记入各自的小账本中。
PoW机制在比特币网络中,就是比特币的挖矿原理,它会给获得记账权的节点一定的比特币作为奖励,从而激励更多的人加入进来。
缺点
- 浪费大量资源
- 处理性能较低
3.2.2 PoS共识机制
权益证明机制。PoS提高了节点处理数据的门槛,它规定:虽然每个人都可以自由地加入进来成为节点,但只有满足一定条件的节点,比如抵押一定数量的代币,才有资格成为验证节点,也就是候选人。成为候选人后,系统会通过算法,选择一部分人作为出块节点,每隔一段时间,会重新选择,选取过程中,算法会保证选取的结果不能被操纵,也不能被预测,从而避免网络被某一节点所控制。
缺点
- 初始的代币分发比较模糊,如果初始代币分发不下去,就很难形成之后的股权证明
- 选举算法存在被攻击的可能
- 容易造成强者恒强的局面,谁的代币越多,谁就越容易获得更多的代币
3.3 智能合约
智能合约就是一种把我们生活中的合约数字化,当满足一定条件后,可以由程序自动执行的技术。可以减少对信任中间人的需求,降低仲裁和执行成本。
优势
- 去掉了中介,可以完全依托技术让用户之间自主建立合约
- 透明公平,智能合约会用代码将条件写得清清楚楚,并记录在区块链上,整个过程完全由程序执行,连包括编写这个代码的开发者都不能篡改
- 灵活,让用户之间可以自由地建立合约,哪怕是与一个陌生的外国人,也可以通过智能合约建立联系
3.4 密码学
区块链中的密码学主要分成两个部分,一个是哈希算法,一个是非对称加密。
3.4.1 哈希算法
哈希算法就是一种特殊的函数,通过压缩映射,可以把任意长度的输入变换成固定长度的输出(256比特)。
哈希算法有三个特点:
- 单向性:在哈希函数中,由输入可以得到输出,但通过输出却几乎不可能反推回输入
- 抗篡改:对于任意一个输入,哪怕是很小的改动,比如一个标点符号,其哈希值的变化也会非常大
- 抗碰撞:对于大部分的输入,都能得到一个独一无二的输出。注意,这里只能说出现碰撞的概率极低,但不意味着不存在碰撞,因为现存的任何一种哈希算法在概率学上都是无法证明不会发生碰撞的。
3.4.2 非对称加密
加密与解密过程用的不是同一个秘钥,私钥加密的内容,通过公钥可以解密读取出来,反之通过公钥加密的内容,也可以由私钥解密读取出来。
主要用于数字签名,防止身份被冒充。
4、区块链的分类
- 公有链,指全世界任何一个人都可以读取、都可以发送交易且交易能够获得有效确认的共识区块链。
- 私有链,指写入权限完全在一个组织手里的区块链,所有参与到这个区块链中的节点都会被严格控制,只向满足特定条件的个人开放
- 联盟链,指有若干组织或机构共同参与管理的区块链,每个组织或机构控制一个或多个节点,共同记录交易数据,并且只有这些组织和机构能够对联盟链中的数据进行读写和发送交易。它的去中心化程度适中、可以说是多中心化的,其在效率方面比公有链强、比私有链弱。
5、双花
就是一笔钱被重复花了两次。
5.1 记账前双花
由于处理方在记账时因为同步存在延迟的问题,导致同一笔钱,被反复花了两次。
防范方式:
不以付款者的交易记录为依据,只有确认自己账户上钱到账才交付商品,即等记账后,再完成交易。或者借助UTXO的账户机制。
UTXO的账户机制:
只记录交易本身,而不记录交易的结果。整个过程中,它会把牵扯到的账户资金、交易地址,转账资金、资金来源等信息全部记下。以此就能够追踪到每一笔交易的最初来源。
当节点在处理一笔交易的时候,会先通过UTXO模型检验交易资金存不存在,然后追溯这笔交易的源头,确定没问题后,就会通过共识机制进行全网广播,记录到链上。
如果有人想要用同一笔钱支付两次,区块链网络只会确认先接受到的那一笔,之后那笔交易,节点会在查询UTXO时发现,这笔资金已经被支付出去,并不存在于你的账户中,从而拒绝交易。
5.2 记账后双花
当有人掌握了全网51%以上的算力时,就能够将刚刚记过的账页作废,把里面的一笔花费恢复成没被花掉的状态。
防范方式:
等待更多确认以及时间戳防伪。51%的算力要作废最新账页,其成功概率是51%,但作废连续两个新账页的概率就是51%*51%=26%,作废3个的概率是13.3%,作废6个的概率只有0.46%了。如果攻击者没有掌握51%的算力,只掌握20%的算力,那么攻击成功的概率就只有0.0064%了。
时间戳:
就是能表示其他的数据在某个特定时间之前已经完整存在、 并且可以验证的一种数据,一般是一个字符序列,能唯一地标识某一刻的时间,提高了区块链的不可篡改性,起到数据验证的作用。
工作原理:
-
节点会先对区块中的信息进行哈希加密,生成一个信息摘要,也就是哈希值。
-
生成好之后,节点会发送一个时间戳的请求,给相关的时间戳服务器,然后时间戳服务器会从中提取该哈希值以及数据的时间信息。
-
时间戳服务器会对这些提取到的哈希值以及时间信息进行签名,也就是再次加密,打上时间烙印,生成时间戳。
-
生成的时间戳数据和交易信息绑定之后,再返回系统。
6、提高效率的方案
6.1 侧链
侧链就是建立一条新的区块链,能够一对一的和原有的一条链产生联系,资产可以在两条链之间进行转移,进而弥补原来那条链中的某些不足,原有那条独立的区块链就叫做主链,而新产生以主链作为依靠的链,就叫做侧链。
一般来说,一条链上的资产,只能在这条链当中进行流通,侧链之所以能让链与链之间实现资产的转移,是通过了双向锚定的方式才得以实现,就是一方要以另一方的行动为标准。
以比特币为例,当比特币想要转移到它的侧链上时,就会在比特币的主链上将相应数量的比特币进行锁定,然后再将等量价值的侧链代币进行释放。
资产的锁定与释放的方式:
- 通过第三方机构进行单一托管,就是找一个可信任的第三方机构来锁定、监管双方资产
- 找很多可靠的人进行联盟托管的模式,每次资产转移时的锁定与释放,都要多人的验证
6.2 跨链
跨链是侧链的升级版,跨链除了能解决效率、扩展性问题以外,更主要的是,它可以解决互操作性问题。
跨链的方式:
- 用公证的方式来实现跨链,利用Interledger协议,以这个协议作为统一的支付标准,进而可以让不同的记账系统通过第三方“连接器”或“验证器”的方式,实现互相的价值传输
- 以中继的方式,通过建立一条新的链,让这条新链,和其他链产生联系,就好像是很多链有了共同的一条侧链,于是各个链就能以这条新链作为中介,间接实现跨链的功能
- 分布式私钥控制的方式,相当于建立了一个区块链世界里的银行,去中心化网络掌握用户私钥的同时,用户也掌握代理自身资产的部分私钥,大家可以自由地在里面兑换各个链上的资产
- 以哈希锁定的方式,需要跨的两条链都支持闪电网络,两条链将资产都暂存到通道中的临时账户,然后通过哈希锁定技术,将双方的资产进行锁定
6.3 闪电网络
相当于搭建了个侧链,主链就只用记录分配的最终结果,至于中间的交易,则通过闪电网络的方式处理,以此分担了主链交易的压力。因为所有在通道内的交易都是链下的,只需智能合约来执行,不用要通过全网确认,所以能大大提升用户之间交易的处理效率
侧链起到一个资产记录副本的作用,每笔交易,都会通过类似智能合约的功能,记录在这个副本里,就相当于是这个共享钱包中所存资金的重新分配,直到交易结束,就可以关闭这个支付通道,把这一系列交易所导致资金分配的最终结果,反馈到主链上,经过全网广播,记录到链上。
6.4 隔离见证
隔离见证的工作原理,就是把关于交易信息的数据留下,然后把非交易信息的数据从基本结构剥离出来,转移到新的数据结构中。
通过链上隔离见证与链下闪电网路结合的方式,能更全面地解决效率和可扩展性问题。
6.5 分片技术
将一条链划成一个个的区域,一个区域就叫做一个分片,每个分片承担专职的功能,而节点也会分散到各个分片上,处理相应的工作。
交易会划分到各个分片上同时进行处理,每个节点处理的只是网络中的一小部分交易,从而提升这条链的处理效率。
7、FLP和CAP原理
7.1 FLP原理
不要浪费时间去为异步通信的分布式系统设计在任意场景下都能实现共识的算法,这样的算法不存在。
因为在实际异步通信的分布式系统环境下,可能存在通信故障、延迟或者节点本身出现失效的情况,异步系统无法保证在有限的时间内完成一致性。
7.2 CAP原理
CAP原理定义了分布式计算系统的三大特性:
- 一致性:共享数据副本之间呈现出统一且实时的数据内容
- 可用性:所有的数据操作总会在一定时间内得到响应
- 分区容错性:通常由于网络间连接中断而导致网络中的节点相互隔离无法访问时,被隔离的节点仍可正常运行
三大特性无法同时实现,设计中需要弱化其中某个特性,从而保证另外两个特性。
8、分布式系统
8.1 分布式系统的一致性
对系统内的所有计算节点给定一组操作,按照约定的规则协议,节点之间对于操作后的最终处理结果达成某种共同认可的状态
8.2 达成一致性的要求
- 收敛性:一致的结果必须在有限的时间内能完成
- 一致性:不同节点最终完成决策的结果是相同的
- 有效性:决策的结果必须是某一个节点提出的方案
在实际工程中,一版采用弱一致性,即在未来某个时刻达到一致性状态
9、区块链的分层模型
-
数据层
-
网络层
-
共识层
-
合约层
-
应用层
9.1 数据层
9.1.1 数据结构
区块及链,区块包括区块头和交易
区块
区块头
Merkle树
在构造Merkle树时,首先要对数据块计算哈希值,然后将数据块计算的哈希值两两配对(如果是奇数个数,最后一个自己与自己配对),计算上一层哈希,再重复这个步骤,一直到计算出根哈希值。
因此Merkle树大多用来进行完整性验证,比如分布式环境下,从多台主机获取数据,只要验证Merkle树根哈希一致即可。树中任一节点的变化都会导致两两配对后的根哈希值变化。
9.1.2 数据模型
- 交易输出模型:记录交易过程
- 账户模型:不记录交易过程,只记录余额状态
9.1.3 数据存储
分布式存储
9.2 网络层
区块链数据通过网络层进行校验、存储等。
9.2.1 点对点网络
每个节点都可以充当服务提供方和服务获取方,少量节点的故障不会影响整个网络的服务提供。节点越多服务质量越高,但数据一致性越难以保障。
分布式哈希表
用于维护网络中的节点清单和节点能够提供的服务清单,是P2P网络的核心技术。
以Kademlia协议实现,每个节点维护一张哈希表,表中将网络的节点按照距离进行分组,每个分组下会有若干节点,因此每个节点只保存一部分资源的索引信息,当网络中的资源有变更时,不需要全网广播,只需要更新相关节点。
9.2.2 数据传播
每个节点都向其直连的节点发送区块数据,直到触达全网节点。
9.2.3 数据校验
比特币的数据校验内容:
- 工作量证明检查
- 区块头中Merkle根的值是否与本区块交易信息计算出来的值一致
- 区块大小是否在限制范围内
- 除了第一笔以外的交易不能是铸币交易
- 交易的合法性
9.3 共识层
保证所有节点中的数据完全相同,并且能够对某个提案达成一致
主流的共识机制:
-
BFT(拜占庭容错)
节点总量n >= 3*异常节点数+1
-
PoW(工作量证明)
寻找一个随机数,使得该随机数和特定数字的哈希满足一定条件
-
PoS(权益证明)
根据用户持有货币的币龄的高低来分配记账权,效率更高但容易产生马太效应
-
DPoS(委托权益证明)
限制参与共识的节点数量,降低消耗和成本
9.4 合约层
9.4.1 智能合约
一种以数字化手段传播,验证或执行合同的计算机协议。
9.4.2 可中止性
智能合约一旦部署无法撤回,所以智能合约必须是可终止的。
9.5 应用层
区块链系统的应用层封装了各种应用场景和案例,类似于PC端的应用程序
区块链的四类应用:
分布式账本、价值传输网络、通证激励体系、资产数字化
10、比特币
比特币是区块链的首个应用。
10.1 供应量
所有比特币都是通过新区块的挖矿奖励形式发行,共2100万枚
所有比特币被挖出后,记账奖励只有挖出的区块中包含的交易付给记账节点的交易费
10.2 难度调整
为了保持每10分钟一个的出块速度,比特币网络在每挖出2016个区块后进行一次挖矿难度调整。
10.3 记账方式
- UTXO:比特币来龙去脉的详细记录,一个交易输出要么被使用,要么未被使用,而不能只使用部分
- 工作量证明:调整随机数以获取符合要求的哈希值
- 最长链原则:如果出现意外分叉成多条链,选择最长链记账
10.4 比特币钱包和比特币地址
采用椭圆曲线乘法,可以从私钥计算出公钥。
采用特定的哈希算法,可以从公钥计算出比特币地址。
10.5 比特币升级
-
意外分叉
由于意外从某一区块开始向下形成多个分支,但之后又会按照协议收敛,最终只留下最长的主链
-
软分叉
向前兼容的区块链协议升级,新协议不违背旧协议的所有相关规定。没有分成两条链的风险
-
硬分叉
不具备向前兼容性的区块链协议的升级,旧节点无法验证新产生的区块,原本的一条链会被永久的分成两条链
如有不对,烦请指出,感谢~