在此声明,仅做分享,绝不存在倡导炒币行为
目录
- 区块链概念
- 区块链基础知识
- 交易(Transaction)
- 区块(Block)
- 链(Chain)
- 公私钥
- 区块链存储结构
- 简单理解
- 区块结构Block
- 区块头
- Merkle根
- nonce
- 区块链原理
- 区块链架构
- 区块链特点
- 分布式账本—不可篡改性、去中心化
- 非对称加密和授权技术—匿名性、安全性
- 共识机制—开放性、自治性
- 智能合约—不可逆性、强制性
- 区块链网络类型
- 公有区块链网络
- 私有区块链网络
- 许可区块链网络
- 联盟区块链
- 区块链为什么会出现
- 目前存在的问题-三元悖论
- 1.追求“去中心化”和“安全性”则无法达到“可扩展性”
- 2.追求“可扩展性”和“安全性”则无法完全 实现“去中心化”
- 3.追求“可扩展性”和“去中心化”则必须 牺牲“安全性”
- 区块链应用
- 1. 金融
- 2. 医疗
- 3. 内容社交平台
- 4. 慈善
- 5. 教育
- 6. 版权保护
- 7. 投票
- 参考
区块链概念
区块链定义:
区块链可以借由密码学,串接并保护内容的串联交易记录(又称区块)。在区块链中,区块内容具有难以篡改的特性,每一个区块都包含了前一个区块的加密散列、相应时间戳记以及交易数据(通常用Hash树计算的散列值表示)。用区块链串接的分布式账本能让交易双方有效地记录交易,且可永久查验。
区块链基础知识
交易(Transaction)
就是每次对账本的操作导致账本状态的一次变化,就是一笔交易。交易内容包含源账户、目的账户、调用的方法信息、是否共识、合约类型。
区块(Block)
记录一段时间内发生的所有交易和状态结果等,是对当前账本状态的一次共识,比如默认500毫秒生成一个区块或者每500笔交易生成一个区块。区块内容包含区块编号、区块hash、父hash、写入时间、交易数等信息。
链(Chain)
由区块按照生成的顺序连接而成,是整个账本状态变化的日志记录,在区块链中又分为公有链和私有链以及联盟链,顾名思义,私有链就是私人节点,不是所有人都能参与的区块链,公有链是所有人都能参与的,并且会根据算力的不同而产生分支,而联盟链则是由经过授权的不同的角色一起参与,类似一种环形链,不会产生分支。(注:准入机制是有一个投票算法,联盟中的各个成员都有一定的投票权来决定是否允许新的节点加入到联盟链中来。)
公私钥
区块链中的密钥分为公钥(public key)和私钥(private key)两种,公钥与私钥是通过一种算法得到的一个密钥对(即一个公钥一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。一般使用私钥对交易进行签名,使用公钥对签名进行验证(私钥可以生成公钥,而公钥无法倒推私钥,此为平台特性)。
区块链存储结构
区块链采用了特定的“块—链”存储结构,从区块链(Blockchain)字面上看可以从两个词区块(block)和链(chain)来理解:
逻辑上它是一个链式(chain)结构,每个结点上就是一个区块信息(block),区块里面则存储了交易的信息。
简单理解
区块链是一个分布式的、点对点传输的数据存储技术,它的数据结构可以简单的分为区块头和区块体。
区块头中有使用前一个区块的哈希来维持链式结构,使用merkle根来归纳区块中的交易信息,同时节点可以使用merkle树进行快速验证交易。
nonce和难度目标值是在打包区块时矿工进行挖矿的。矿工一旦找到一个合适的nonce,就能得到挖矿奖励。
区块体则主要是包含了成百上千的交易信息。一个交易被发送到区块链网络中后,就会被打包到区块中。
区块结构Block
区块数据结构主要包括为区块头和区块体两部分。其中区块头包含父区块哈希值、merkle根、难度目标和nonce值等信息;而区块体则包含了交易哈希列表。
区块头
区块的哈希值是通过区块头中的信息进行计算的。这个哈希值是区块的标识符,可以通过这个哈希值找到对应的区块(当然也可以通过区块高度来查询,但区块分叉时,区块高度有可能会对应多个区块)。
我们知道当前区块中包含来前一个区块的哈希值,但自己本区块的哈希值是不存储当前区块结构中的,而是由节点接收到区块信息后计算出来,然后存储在一个独立的索引数据库中的,这样可以方便检索。
Merkle根
要理解Merkle根,就要先了解Merkle树。 Merkle树是一种哈希二叉树。
由于在一个区块里面包含很多交易信息(以哈希值来表示),这些交易信息就是通过Merkle树进行表示的。
那么要怎么得到这颗树的呢?
Merkle树是自底向上构建的。假设区块中有A、B、C、D 4个交易信息,那么将这个4个交易信息分别哈希之后,构成Merkle树的叶子节点。
# TxA 表示A交易信息(其它类似)
# 计算出A交易的哈希值HA后
# 把其当作Merkle树的叶子节点
HA = hash(TxA)
HB = hash(TxB)
HC = hash(TxC)
HD = hash(TxD)
A节点的哈希与B结点的哈希又组成了它们父节点的哈希值HAB
# A节点与B节点又组成了它们父节点的哈希`HAB`
HAB = hash(HA+HB)
HCD = hash(HC+HB)
最后HAB节点与HCD节点又组成了根结点的哈希HABCD
HABCD=hash(HAB+HCD)
而HABCD就是Merkle根,它归纳总结了所有的交易信息。
通过上面计算就可以得到一颗Merkle树了。
有人可能要问了,这是二叉树,如果区块中的交易个数为奇数,那么如何计算呢?那就将最后一个交易复制一份然后就可以组成满二叉树了。
这个Merkle树有什么用呢?
首先要知道在一个区块里面是包含了成百上千个交易的,而通过Merkle树就可以将这些交易信息归纳成一个哈希值(即Merkle根),而且在区块头中存储这个Merkle根需要的空间非常小,只需要32个字节。
另外节点可以利用这个Merkle树快速的验证一笔交易是否在这个区块中。
这个过程是这样的:
只要能在这颗树上找到一个叶子节点到Merkle根的路径,就能证明这笔交易存在这个区块中。
结合下图来理解
如果一个节点要验证HK是否在包含在该区块中,只需要生成一个HL-HIJ-HMNOP-HABCDEFGH的路径(图中蓝色节点),这样HK可以跟HL可以生成HKL,类似得,HIJKL、HIJKLMNOP、HABCDEFGHIJKLMNOP(图中虚线节点)也可以通过验证路径进行计算,最后得到Merkle根,这样就可以对交易进行验证了。
假设一个区块里面有n笔交易,那么这颗树的高度就是log(n)+1。对于有成百上千个交易来说这个验证路径是非常高效的。
由于区块链的数据是点对点传输的,这个验证可以使节点在传输区块头以及一条验证路径信息后,就可以对区块中的交易进行验证,而不用下载整个区块数据,达到快速验证的效果。
最后由于一个区块是包含了上一个区块的哈希值,那么如果有节点对区块中的交易信息进行了篡改,这个区块若要得到其它节点的认可(即共识),就要维持这个链式结构,即该区块的后续区块信息也需要篡改(因为区块内容变动了,导致区块的哈希值也变化了)。
篡改后的区块要被大多数节点接受,理论上就需要控制51%的节点。对于存在大多数诚实节点网络来说,这几乎是很难做到的。而且一个区块有越多的后续区块,它被篡改的可能性就越小。因为需要篡改的区块越多,需要控制的节点算力就越大。
总结一下Merkle树的作用
● 归纳交易信息,节省空间
● 快速验证交易
● 保证数据安全
nonce
一个交易被发送到区块链网络中,需要被打包成一个区块,然后把区块发送到网络中,被共识后,存储于链上,这个交易就算完成了。
怎么打包区块信息呢?
这就需要寻找nonce值了。
nonce是一个随机数,但这个随机数不是随便给的,节点需要不停地寻找一个合适的随机数,使得这个区块的哈希值少于难度目标值。只要有节点寻找到了一个合适的nonce,就完成了一次挖矿,它就构建一个完整合法的区块,然后广播到点对点的网络中。只要其它节点认可(即共识)了这个区块,那么完成挖矿的节点就能得到挖矿奖励。这个也是鼓励节点参与到挖矿中,维护区块链的安全。
参与挖矿的节点就是矿工。
寻找nonce比拼的就是节点计算机的算力。谁的算力高找到nonce的速度就快。
难度目标值是区块链网络中为了调节挖矿难度而设置的,保证挖矿的速度在10分钟左右。每生成2016个区块后就重新计算一次难度目标。
新的目标难度值=旧目标难度值*(前2016个区块生成的实际耗时分钟/20160分钟)
这个挖矿算法就是PoW(Proof of Work),即工作量证明。这个过程非常消耗CPU(GPU),也非常耗电。所以目前也出现了很多其它的共识算法。
区块链原理
区块链技术可以认为是要解决互联网时代下的“拜占庭将军问题”,即在网络中的中心节点和信息传递通道都缺乏可信度的情况下,如何使网络中的各个节点达成共识。
区块链技术在去中心化、各节点无须事先信任的情况下,通过加密算法、共识机制和特定的数据存储方式,构建一个集体维护的可靠的数据模式,实现数字资产在网络节点之间的转移。
区块链架构
区块链系统一共有六层结构来构成,如下图,分别是:数据层、网络层、共识层、激励层、合约层和应用层。
- 数据层:封装了底层数据区块来存储底层数据,以及相关的非对称数据加密和时间戳等基础数据和基本算法;
- 网络层:则包括分布式组网机制、数据传播机制和数据验证机制等;
- 共识层:封装有各类共识机制算法,确定记账决定方式,这关系到整个系统的安全性和可靠性。目前较为知名的由共识层封装的共识机制有工作量证明机制(PoW,Proof of Work)、股份授权证明机制(DPoS,Delegated Proof of Stake)、权益证明机制(PoS,Proof of Stake)等;
- 激励层:在区块链技术体系中使用的经济手段,包括经济激励的发行以及分配,多出现在公有链中;
- 合约层:主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;
- 应用层:封装了区块链的各种应用场景和案例,如电商购物、新闻浏览、视频观看等。所有的二次开发应用都基于这一层面的,就类似于众多的APP基于IOS和安卓底层操作系统一样。
区块链特点
区块链技术具有去中心化、信息不可篡改、信息透明和可共同维护等特点,下面将分别进行详细阐述。
分布式账本—不可篡改性、去中心化
去中心化就是指网络中各个节点的地位相等,传输内容和交易数据不再需要通过某个中心节点进行,数据也不再存储在中心节点上,每一个节点都记录的是完整的账目,这样可以防止因中心节点权力过大而引起的风险。区块链模式中,每个节点都存储数据交易中所有的价值交换数据,取代了中央计算机存储所有信息的模式。
另一方面,由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的不可篡改性。
非对称加密和授权技术—匿名性、安全性
存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
共识机制—开放性、自治性
所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。
区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
以bit为例:采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能。
智能合约—不可逆性、强制性
智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。
以保险为例:如果说每个人的信息(包括医疗信息和风险发生的信息)都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔。
区块链网络类型
建立区块链网络有多种方法。区块链网络分为公有、私有、许可或由联盟构建。
公有区块链网络
公有区块链是任何人都可以加入和参与的区块链。缺点可能包括需要大量计算能力,交易的隐私性极低或根本没有隐私保护可言,而且安全性较弱。这些是区块链企业 用例 的重要考虑因素。
私有区块链网络
私有区块链网络与公有区块链网络相似,也是分散的对等网络。但是,在私有区块链网络中,由一个组织来管理网络,控制谁被允许参与网络、执行共识协议和维护共享账本。根据用例,这可以显著提高参与者之间的信任和信心。私有区块链可在企业防火墙后运行,甚至可在内部托管。
许可区块链网络
建立私有区块链的企业通常也会建立许可区块链网络。需要注意的是,公有区块链网络也可以授予许可。这会对被允许参与网络和执行交易的人员进行限制。参与者需要获得邀请或许可才能加入。
联盟区块链
多个组织可以共同承担维护区块链的责任。这些预先选定的组织决定谁可以提交交易或访问数据。当所有参与者都需要获得许可且对区块链负有共同责任时, 联盟区块链是企业的理想选择。
区块链为什么会出现
2008年由中本聪第一次提出了区块链的概念,他创造第一个区块,即:“创世区块”。
创世区块 – 原始区块链 ,是一种去中心化的数据库,它包含一张被称为区块的列表,有着持续增长并且排列整齐的记录。每个区块都包含一个时间戳和一个与前一区块的链接:设计区块链使得数据不可篡改 ———一旦记录下来,在一个区块中的数据将不可逆。
区块链的设计是一种保护措施,比如(应用于)高容错的分布式计算系统。
区块链使混合一致性成为可能。这使区块链适合:记录事件、标题、医疗记录和其他需要收录数据的活动、身份识别管理,交易流程管理和出处证明管理。
2009年1月3日,Bit的创始人中本聪在创世区块里留下一句永不可修改的话:
The Times 03/Jan/2009 Chancellor on brink of second bailout for
banks(2009年1月3日,财政大臣正处于实施第二轮银行紧急援助的边缘)
当时正是英国的财政大臣达林被迫考虑第二次出手纾解银行危机的时刻,这句话是泰晤士报当天的头版文章标题。
区块链的时间戳服务和存在证明,第一个区块链产生的时间和当时正发生的事件被永久性的保留了下来。
当时主要就是为了——解决金融危机的问题,建立一个不被任何组织和机构组织操控的,基于机器信任,代码信任的,去中心化的电子现金系统。
目前存在的问题-三元悖论
以太坊创始人Vitalik提出区块链技术“不可能三角”,是三个因素:
● 可扩展性
● 去中心化
● 安全性
也就是一个区块链的系统,不可能在同一时间,在这三个方面同时取得优化、最佳,它必须以牺牲其中若干个因素去换取在另外一个领域上的提升。也因此产生了区块链的不可能三角,也即“三元悖论”。
1.追求“去中心化”和“安全性”则无法达到“可扩展性”
Bit区块链技术便是一种极致追求“去中心化”和“安全”的技术组合。
1)从数据结构上,它采用拥有时间戳的“区块+链”的结构,在可追溯、防篡改上具备安全优势,也易于分布式系统中的数据同步。但是若需要对信息进行查询、验证,则涉及到对链的遍历操作,而遍历是较为低效率的查询方式。
2)在数据存储上,它的每一个节点都下载和存储所有数据包,利用强冗余性获得强容错、强纠错能力,使得网络可以民主自治,但同时也带来了巨大的校验成本和存储空间损耗。它并不像分布式数据库那样随着节点的增加可以通过分布式存储提高整体存储能力,而只是简单地增加副本。未来随着区块链技术所承载的内容增多,单个节点的存储空间将是个问题 。
3)在并发处理上,Bit区块链技术最终只允许一个“矿工”获得记账权建立一个交易区块,这种机制可以有效保证一个民主网络运行的安全和稳健,但其实质上是拥有所有数据的整个“链条”在进行串行的“写”操作。相比关系数据库将数据分为若干表,仅仅根据操作涉及的数据锁定若干表或表中的记录、其他表仍能并发处理相比,Bit区块链技术的串行操作效率远低于普通数据库。
4)在对内容的验证上,Bit区块链让每个节点都拥有所有的内容,同时对区块内的所有内容进行哈希,这增强了:民主性、隐私性、安全性。但是这种整体哈希的设计思路则意味着,不能以地址引用的方式存储数据,否则由于所引用地址上所存储的信息由于并未进行哈希校验而可能存在篡改。
因此,Bit区块链技术缺乏高效的可扩展性,在对大型内容的处理上存在效率问题。
2.追求“可扩展性”和“安全性”则无法完全 实现“去中心化”
从“共识机制”角度看:为了在确保“安全”的前提下解决Bit区块链技术所采用的工作量证明方式的低效性,权益证明(Proof of Stake)、股份授权证明(Dele⁃ gate Proof of Stake)等机制被采用。
但是无论是基于网络权益代表的权益证明,还是利用101 位受委托人通过投票实现的股份授权证明,实际上都是对“去中心化”的退让,形成了部分中心化。
同样在区块链技术的演化上,除了以*为代表的公有链技术外,又衍生了联盟链技术和私有链技术。
联盟链技术只允许预设的节点进行记账,加入的节点都需要申请和身份验证,这种区块链技术实质上是——在确保安全和效率的基础上进行的“部分去中心化”或“多中心化”的妥协。
而私有链技术的区块建立则掌握在一个实体手中,且区块的读取权限可以选择性开放,它为了安全和效率已经完全演化成为一种“中心化”的技术。
3.追求“可扩展性”和“去中心化”则必须 牺牲“安全性”
一个极端的案例便是:基于 P2P(Peer-to-Peer)的视频播放软件。
以往当在线观看人数增多时,基于中央服务器设计的视频服务器会因承载压力变大而速度缓慢。
为了提高效率,P2P 视频播放软件的设计使得一个节点在下载观看视频文件的同时,也不断将数据传输给别人,每个节点不仅是下载者同时也是传输者,使资源的分享形成不再依赖于中央服务器的“去中心化”模式。
同时,由于视频一秒有24 帧,少量图片的局部数据损坏并不影响太多的视觉感官,但是用于数据校验而出现的图像延迟则是不可接受的。于是 P2P 视频播放软件牺牲了“安全”性,允许传输的数据出现少量错误。
在这种去中心化的网络中,参与的节点越多,数据的传播越快,传播的效率越高。
当然这对于严谨的金融业来说,数据的错误是不可接受的,安全也是金融业所首要考虑的问题。
总之,从当前的技术条件来看尚无法实现“高效低能”、“去中心化”和“安全”三者皆得的区块链技术。但是若对其一个或若干个要求进行妥协,所产生的新技术 集合由于更符合实际需求,有可能它对实际应用的吸引 力反而增强。
区块链应用
区块链技术已经广泛应用于生活中各个领域,例如金融、医疗、内容社交平台、慈善、教育、版权保护、投票等。
1. 金融
区块链具有的信息透明、不可篡改的特点,在金融领域得到深入应用。各类金融资产如股权、债券、基金等都可以被融入区块链中,以“数字资产”的形式在区块链上进行存储和交易。跨境支付、数字货币、数字票据、支付清算、征信管理、证券交易和保险管理等方面也能从区块链技术中获益。
● 例如,传统的证券交易需要由证券公司、银行、中央结算机构以及交易所多方协同工作才能共同完成,导致效率低、成本高,容错率也很低,一个环节出现漏洞就会造成巨大的问题和损失。然而,在区块链技术应用在证券交易中后,各参与方便可独立地完成整个结算流程。
● 再比如,跨境支付是金融领域的重要组成部分,但效率低、速度慢。然而,在区块链点对点的技术应用到跨境支付领域后,汇款通道变得透明,交易历史数据可追溯,让收款方、汇款方都安心,也大大提高了效率和速度。
2. 医疗
区块链在医疗信息安全与隐私保护方面有着极其重要的应用。在当前中心化的信息管理系统下,各种黑客攻击和系统漏洞导致信息安全问题极大,而医疗领域存储着很多用户的私密资料,数据泄露问题一旦发生,就会造成极其严重的后果。因此,医疗领域需要森严的安全措施保护数据。
区块链的去中心化的特点则有针对性地解决了这个问题。去中心化的病人医疗健康信息数据存储与共享的建立大大有益于医疗行业。
3. 内容社交平台
目前,很多内容社交平台都是中心化的,如抖音、微博、微信公众号等,中心化的意思是中心决定节点,节点必须依赖中心,节点离开了中心就无法生存。因此,平台需要做的就是提供平台,然后用户通过平台为自己带来流量,进而利用流量获利。
区块链技术可以给内容社交平台注入新的血液,它利用分布式管理将平台去中心化,在新的去中心化系统中,每个人都是一个节点,任何人也都可以成为一个中心。这样平台可以将权力分散到用户身上,用户也可以贡献出自己的力量并获得平台的奖励和经济回报。
4. 慈善
人们捐赠爱心、传递善意是一件美好而伟大的事,但是层出不穷的慈善黑幕事件给这件美好的事情增添了污点。慈善体系的不透明为这类事情提供了契机,也引发捐赠者对这个行业的担忧。
区块链技术可以大大提高慈善领域的信息透明度,让捐赠者有权对慈善体系和流程进行监督,进而鼓励捐赠者放心捐助,形成良性循环,改善慈善事业。
如利用区块链技术建立公开透明的、不可篡改的信息体系,从善款的流向到受捐赠者的身份确认,建立慈善领域的监督问责机制,增加捐赠者对机构的信任和信心,同时也保护了捐赠方和受赠方的隐私。
5. 教育
教育系统中,学历认证一直十分重要,人工验证纸质版证书的效率低下,且纸质版证书有丢失的风险。区块链由所有参与者进行维护且不可篡改,使用区块链存储和保护学生的证明文件,可以简化流程并提高学历认证的效率。
学生的学历信息和档案记录等全部存储在区块链中,当学生需要证明自己学历和相关信息时,只需让对方加入链并看见自己的文件即可。同时,区块链具有去中心化的特点,证书不会因为中心机构关闭而消失,数据永远存在。
6. 版权保护
版权保护在中国一直是大家十分关注且亟待解决的问题。但是版权登记成本较高、效率低,以及版权保护的效率低、效果差的问题一直存在。将区块链技术应用到版权保护领域,对版权所有者和其版权产出的数据进行存储,可以实现对所有权的溯源,从而达到保护版权的目的。
更高效、便捷、有效的保障内容生产者权益的方式,能激励更多的创作者继续创造新的内容,创作者通过将作品记录于区块链,实现对原创作品的追踪,一旦发生纠纷或者盗用事件,可以尽快展开进一步的措施。
7. 投票
在部分国家,投票被用于进行总统选举。投票本着公平公正、少数服从多数的原则,但是由于系统透明度低,投票结果容易引起部分参与者的怀疑。区块链去中心化和透明化的特点正好可以有针对性地解决这个问题,使投票透明、真实性强。
参考
从数据结构的角度上看区块链到底是什么
逐层揭秘:区块链的运作原理、存在问题以及前景
终于有人把区块链讲明白了