认识区块链
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
认识区块链
一、区块链的定义
本质定义:区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。
维基百科定义:区块链是一个分布式的账本,区块链网络系统无中心地维护着一条不停增长的有序的数据区块,每一个数据区块内都有一个时间戳和一个指针,指向上一个区块,一旦数据上链之后便不能更改。该定义中,将区块链类比为一种分布式数据库技术,通过维护数据块的链式结构,可以维持持续增长的、不可篡改的数据记录。
渐进方式定义:
①一个分布式的链接账本,每个账本就是一个区块;
②基于分布式的共识算法来决定记账者;
③账本内交易由密码学签名和哈希算法保证不可篡改;
④账本按产生时间顺序链接,当前账本含有上一个账本的哈希值,账本间的链接保证不可篡改;
⑤所有交易在账本中可追溯。
二、区块链的分类
公有区块链
公有区块链(Public Block Chains)是指:世界上任何个体或者团体都可以发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。公有区块链是最早的区块链,也是应用最广泛的区块链,各大bitcoins系列的虚拟数字货币均基于公有区块链,世界上有且仅有一条该币种对应的区块链。
联合(行业)区块链
行业区块链(Consortium Block Chains):由某个群体内部指定多个预选的节点为记账人,每个块的生成由所有的预选节点共同决定(预选节点参与共识过程),其他接入节点可以参与交易,但不过问记账过程(本质上还是托管记账,只是变成分布式记账,预选节点的多少,如何决定每个块的记账者成为该区块链的主要风险点),其他任何人可以通过该区块
链开放的API进行限定查询。
私有区块链
私有区块链(Private Block Chains):仅仅使用区块链的总账技术进行记账,可以是一个公司,也可以是个人,独享该区块链的写入权限,本链与其他的分布式存储方案没有太大区别。传统金融都是想实验尝试私有区块链,而公链的应用例如bitcoin已经工业化,私链的应用产品还在摸索当中。
三、区块链的运作机制
中本聪的论文中的介绍如图所示:
图1区块链运作机制图
区块链是由若干个有时间顺序、包含交易信息的区块从后向前有序链接起来的数据结构,每一个区块都包含了当前区块构成时间内所有的信息,并由一个Hash值进行封装和指向上一个区块。数据结构可以被视为一个垂直的栈,可形象化地描述为每一个区块就像一个箱子,每一个新的区块都堆在上一个区块之上,形成了一摞箱子,于是“高度”就可以表示区块和首区块的距离;“顶端”就是指最新的区块;区块头像是箱子的表面,封装了内部的交易信息,并标明父系区块链的位置。每一个区块头都可以找到其父系的区块,并最终回溯
到创世区块上。
以比特币为例说明。比特币开发了自身的区块链,客户端方面使用Google的LevelDB 数据库存储区块链元数据。每一个区块头均使用SHA256加密,生成一个Hash值,用于识别区块链的对应区块,其中包含了父区块的Hash字段。虽然每一个区块都只有一个父区块,但一个父区块可以暂时拥有多个子区块。这种一个出现多个子区块的情况称为“分叉”,暂时的情况被认为是软分叉,随着区块链的延续,短分叉会被去掉,只保留长分叉;而长期的分叉被称为硬分叉,源于程序的大幅修改造成版本不一致。比特币区块链区块存储上限的调整就是硬分叉。
不可篡改性在区块链上很明显。由于区块头要包含“父系区块Hash”的字段,所以任何父系区块的修改,都会引发子区块的改变,而子区块的改变将引发孙区块的改变,这种变化会一直传导到最新区块,并且这种改变是没有规律的,服从“雪崩效应”,这就意味着任何人想要更改之前区块的内容,将会耗费大量的算力来运算更长的链条,即实现“51%攻击”。这对于修改者来说,成本过于高昂,此外,即使实现了51%攻击,也只能抹除自己的交易信息,并不能修改整个程序和参数。这也是比特币安全性的一个关键特征。在比特币的区块链中,运算六个区块(1小时)的时候基本上已经能确认区块不再会篡改,超过六个区块后,位置越深越不会被篡改,在100个区块生成以后,区块已经能保证足够稳定(可以观察期间内的算力分布,不会出现长时间的51%算力集中),这使交易(包含新挖出的比特币的交易)被确认。而到了几千个区块(一个月)后,区块链将变成确定的历史,永远不会改变。
四、区块链的原理
主流的区块链记录均使用比特币的记录方法,以比特币为代表来介绍区块链的原理。一个区块主要是由两块构成:区块头和区块内容数据。区块内容数据是由紧跟区块头之后的构成区块主体的一长串交易。区块头有80个字节,每一笔比特币交易使用至少250个字节,每一个区块至少包含超过500笔交易,但每一个区块的储存上限为1M。也就是说,在每笔交易保证最少交易内容,维持250字节的记录量的情况下,每十分钟内产生的一个区块一共能记录的交易笔数为4000笔,换算到每秒是约7次,但通常比特币的区块链时间上要长于十分钟,每笔交易记录字节要多于250字节,这就导致实际的记录次数更少。在比特币大量交易的今天,交易记录频率过低一直受人诟病,为此比特币出现了扩容的需求。在2017年5月召开的Consensus 2017会议上,一些比特币公司和80%的矿工签订了SegWit2x,通过BIP91来激活隔离验证。在激活隔离验证之后,将通过硬分叉把区块大小上限从当前的1MB
增加至2MB,时间为2017年年底或者2018年年初。但无论是否扩容,区块的结构是不变的,表1描述了一下区块结构。
80个字节的区块头由三部分构成。第一组引用父系区块的Hash值,用于指向父区块,保证区块链的连接性;第二组是元数据,即计算难度、时间戳和Nonce,这直接与挖矿竞争有关;第三组是Merkle树根,用来有效地总结区块中所有交易的数据结构。下表详细列出区块头的数据内容。
区块的主标识符是其加密Hash值,通过SHA256算法对区块头进行二次Hash得到的数字指纹,并不包含在区块的数据结构中。主标识符可以唯一、明确的标识一个区块,任何节点都可以通过对区块头简单的运算验证该区块的Hash值。需要注意的是,由于区块标识符并不包含在区块的结构中,区块的哈希值可以作为区块元数据的一部分被存储在一个独立的数据库表中,以便作为目录用于索引和更快地从磁盘检索区块。
当然,找到指定的区块不仅通过Hash值目录来索引,还可以通过区块“高度”来确认。例如:比特币的创世区块的Hash值为:
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f所对应的区块为第1块,区块高度为0。但是,同用Hash值确认不同,区块高度并不能作为唯一标识来确定区块,原因是一个父区块暂时可以有多个子区块,只有子区块完全稳定以后,才能做