前言
从2008年11月1日基于区块链技术的第一个应用“比特币”面世至今,区块链技术已经经历了10年零3个月的发展,在这期间,区块链技术不断革新,不断创新,不断发展,直到2018年,区块链技术在全球引起广泛关注,吸引了众多的项目方以及项目投资人,在金融领域更是炙手可热,不得不说区块链技术是一个划时代的创新。时至今日,区块链技术依旧盛行,笔者将通过这篇文章对区块链领域的一些基本概念、核心技术、安全性问题做以简要的介绍,希望对各位读者有益!
区块链简介
时常听别人说起区块链,那么到底什么是区块链呢?
区块链可以简要定义如下:
区块链(BlockChain)是一种分布式共享数据库(数据分布式存储和记录),利用去中心化和去信任化的方式集体维护一本数据簿的可靠性技术方案。
当然,如果要细化的话,也可以从以下两个角度来深入理解:
数据角度
区块链是一种几乎不可能被更改的分布式数据库。这里的“分布式”不仅体现在数据的分布式存储,也体现在数据的分布式记录(由系统参与者共同维护)。
技术角度
区块链并不是一个单一的技术,它融合了多种技术(密码学、经济学、博弈论等众多技术),这些技术以新的结构组合在一起形成了一种新的数据记录、存储和表达的方式。
区块链发展史
前传
1970年,密码学民用化,很多一线极客开始萌生保护个人隐私是自由社会的重要基石的想法,并开始付诸实践。
1973年,英国数学家和密码学家Clifford Cocks在英国政府通信总部(GCHQ)工作期间发明了一种公钥密码算法。
1978年,麻省理工学院研究人员Ron Rivest、Adi Shamir、Leonard Adleman共同发明RSA非对称加密算法,即可用于数据加密,也可以用于签名,类似于Clifford Cocks的发明。
1982年,对分布式和并发系统的理论和实践做出了重大贡献的美国计算机科学家Leslie Lamport提出了著名的拜占庭将军问题(Byzantine Generals Problem),吸引了大批科学家开启这个领域的探索。
1985年,Neal Koblitz和Victor miller,首次将椭圆曲线应用于密码学,建立以公钥加密的算法
1989年,现代密码学奠基人之一大卫·乔姆(David Chaum)创建的一个叫DigiCash的数字货币系统,使用户能够做出无法追踪的匿名交易。可惜过于超前,在1998年被迫破产,那时候电商刚刚起步。
1991年,计算机大牛菲利普·齐默曼(Philip R.ZimmerMann)开发了一个加密方面的产品,它能允许用户安全地存储文件和BBS上发表信息,而这些电子文档不会遭到泄露或篡改,处于这一目的,他找到了公钥和对称加密算法之间的平衡点,也就是今天的PGP(Pretty Good Privacy)
1992年,英特尔高级科学家Tim May发起密码朋克邮件列表组织。同年Eric Hughes开发了Crypto匿名邮件列表,这一年可以说是“密码朋克”元年。
1996年,道格拉斯·杰克逊推出了一种叫E-Gold的数字货币。
1997年,Jim Choate和Lgor Chudov建立Cypherpunks Distributed Remailer(密码朋克分发服务器)
1998年,华裔密码朋克戴伟(Wei Dai)提出了匿名的、分布式的电子加密货币系统B-money,被认为是比特币的精神先导。
1999年,肖恩·范宁与肖恩·帕克创立了Napster,添加了点对点网络技术开发,从此诞生了应用的P2P协议。
2005年,哈尔芬尼设计了工作量证明及时(POW)的前身"可复用的工作量证明(RPOW)",RPOW是一个发行代币的系统的原型,代币可以与其他人交易,以换取计算密集型工作,它的灵感部分来自于Bit-Gold。哈尔·芬尼后来帮助中本聪运行比特币系统。
诞生
2008年,一个自称是中本聪的人发表了一篇叫《比特币:一种点对点的电子现金系统》的论文,在论文中,他正式提出区块链概念。
2009年,中本聪在位于芬兰赫尔辛基的一个小型服务器上挖出了第一个区块——“创世区块”,并获得了50个比特币报酬,比特币网络开始出现,比特币正式诞生。
2010年,第一个比特币平台成立,新用户暴增,价格暴涨。在这一年,加文·安德烈森加入到比特币系统开发,成为核心成员。同年7月,世界第一家比特币交易平台MT·GOX在东京创立,11月,比特币市场达到100万美金,12月12日中本聪最后一个帖子出现后,就消失了。之后加文·安德烈森以首席科学家的身份接管了比特币网络。
成长
2011年,全网计算速度达900Ghash/SEC,但很快又下跌了40%,挖矿进入显卡时代。
2012年,首家在欧盟法律框架下进行运作的比特币交易所-法国比特币中央交易所诞生,这是世界首家官方认可的比特币交易所。
2013年,世界各国政府开始关注比特币,美国德州联邦法官裁定比特币为合法货币,受美国证券委员会监管;德国政府将比特币归类为“货币单位”和“私人资金”,可购买实物。加拿大启用世界首台比特币ATM,该设备有美国Robocoin公司制造
2014年,被称为“下一代加密货币与去中心化应用平台”的以太坊通过ICO众筹开始得以发展。
2015年,coinbase交易所开启,美国第一家合规化的交易所上线。区块链概念在世界创业圈深入人心。
2016年,英国脱欧,比特币成为避险投资,微软加入专注区块链的数字贸易商会,腾讯华为加入金融区块链合作联盟,比特币迎来新的一波减半。
爆发
2017年,比特币几起几落,价格疯狂上涨,为期已久的以太坊在这一年正式上线,价格一路飙升,称为仅次于比特币的第二加密货币。
2018年,区块链创业飙升为新一年的创业风口,行业开始出现井喷,资本、媒体和创业者疯狂涌入,像潮水一样把区块链吹捧成百年一遇的大风口,一场轰轰烈烈的造富运动(割韭菜)拉开了帷幕。
区块链的特征与分类
特征
开放、共识
任何人都可以参与到区块链网络,每一台设备都能作为一个节点,每个节点都允许获得一份完整的数据库拷贝。节点间基于一套共识机制,通过竞争计算共同维护整个区块链。任一节点失效,其余节点仍能正常工作。
去中心化、去信任化
区块链由众多节点共同组成一个端到端的网络,不存在中心化的设备和管理机构。节点之间数据交换通过数字签名技术进行验证,无需互相信任,只要按照系统既定的规则进行,节点之间不能也无法欺骗其它节点。
交易透明性、匿名性
区块链的运行规则是公开透明的,所有的数据信息也是公开的,因此每一笔交易都对所有节点可见。由于节点与节点之间是去信任的,因此节点之间无需公开身份,每个参与的节点都是匿名的。
不可篡改、可溯源
单个甚至多个节点对数据库的修改无法影响其他节点的数据库,除非能控制整个网络中超过51%的节点同时修改,这几乎不可能发生。区块链中的每一笔交易都通过密码学方法与相邻两个区块串联,因此可以追溯到任何一笔交易的前世今生。
分类
目前已知的区块链及时应用大致有三类:
(1)公有链
公有链公开透明。全世界任何个体或团体都可以在公有链上读取、发送交易,且交易能够获得该区块链的有效性认证,是每个人都能参与器共识过程的区块链,如下图所示。
(2)联盟链
联盟链半公开,参与区块链的节点是预先指定好的,这些节点之间通常有良好的网络连接等合作关系,每个区块的生成会由所有预选记账人共同决定,其他节点可以交易,但没有记账权。通常为某个群体或组织内部使用,如下图所示:
(3)私有链
私有链则完全封闭,参与的节点仅在有限范围,数据的范围以及使用由严格的管理权限。仅采用区块链技术进行记账,记账权并不公开,且只记录内部的交易,由公司或者个人独享,如下图所示:
公有链VS私有链VS联盟链
公有链、联盟链、私有链互有优势,也各有局限。公有链很难实现的很完美,联盟链、私有链需要找到在现实社会中有迫切需求的应用需求和场景。至于具体选择那套方案就要看具体需求,有时使用公有链会更好,但有时候又需要一定的私有控制,适合使用联盟链或私有链。
(1)各自的优势和弊端
A.公有链作为一种完美分布式的区块链,数据公开、访问门槛低,用户参与程度高,一遇应用推广,便于产生网络效应。但系统的运行却依赖于内建的激励机制,存在决策太过困难,技术更新困难,且容易遭到攻击,效率较低,交易费用越来越高等弊端。
B.联盟链为部分意义上的分布式区块链,因参与节点的预先指定,验证效率高,仅需极少成本即可维持运行,提供了高速交易处理的同事,降低了交易费用,有很好的扩展性,数据可以保持一定的隐私性。但是这也意味着在共识达成的前提下,参与节点可以一起篡改数据。
C.私有链最大的好处就是加密审计,发生错误时也能追踪错误来源。且在特殊情况需求下,运行着私有链的机构或公司可以很容易地修改该区块链的规则、还原交易、修改余额等。这一点似乎略有违背区块链的本质,但是却适用于一些特殊的场景需求。例如,全国土地登记,要实现这个功能就必须要使用私有链,毕竟,试图奖励一个不受政府控制的土地登记机构,在实践中是不会被政府承认的。另外,由于私有链验证者是内部公开的,交易的成本会很低,并且不存在部分验证节点共谋进行51%攻击的风险。
(2)三者的区别
三者的区别可以用下表来进行简要的总结:
区块链网络
节点网络
任何机器都可以运行一个完整的比特币节点,一个完整的比特币节点包括如下功能:
1.钱包,允许用户在区块链网络上进行交易
2.完整区块链,记录了所有交易历史,通过特殊的结构保证历史交易的安全性,并且用来验证新交易的合法性
3.矿工,通过记录交易及解密数学题来生成新区块,如果成功可以赚取奖励
4.路由功能,把其它节点传送过来的交易数据等信息再传送给更多的节点
区块链交易过程
Step 1:所有者A利用他的私钥对前一次交易(比特货来源)和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单
要点:B以公钥作为接受方地址
Step 2:A将交易单广播至全网,比特币就发送给了B,每个节点都将受到交易信息纳入一个区块中
要点:对B而言,该枚比特币会即时显示在比特币钱包中,但直到区块确认成功后才可用。目前一笔比特币从支付到最终确认成功,得到6个区块确认之后才能真正确认到帐。
Step 3:每个节点通过解一道“计算难题”,从而去获得创建新的区块权利,并争取得到比特币的奖励。
要点:节点反复尝试寻找一个数值,使得将该数值、区块链中最后一个区块的Hash值以及交易单三部分送入SHA256算法后能计算出散列值X(256位)满足一定条件(比如前20位均为0),即找到数学难题的解。由此可见,答案并不唯一
Step 4:当一个节点找到解时,它就向全网广播该区块记录的所有盖有时间戳的交易,并有全网其他节点核对。
要点:时间戳用来证实特定区块必然于某特定时间是的确存在的。比特币网络采取从5个以上节点获取时间,然后取中间值的方式作为时间戳。
Step 5:全网其他节点核对该区块记账的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块链。
要点:每个区块的创建时间大约在10分钟。随着全网算力的不断变化,每个区块的产生时间会随算力增强而缩短、随算力减弱而延长。其原理是根据最近产生的2016年区块的时间差(约两周时间),自动调整每个区块的生成难度(比如减少或增加目标值中0的个数),使得每个区块的生成时间是10分钟。
区块链数据结构
创世区块
比特币区块链的第一个区块,创建于2009年,我们称之为“创世区块”。它是比特币区块链里所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。
每一个节点都知道创世区块的哈希值、结构、被创建的时间和里面的一个交易。因此,每个节点都把该区块作为区块链的首区块,从而构建了一个安全的、可信的区块链的根。
下图是比特币创始人中本聪留下的一句话。
“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks” 这句话正是泰晤士报当天的头版文章标题。
区块
区块作为区块链的基本结构单位,由包含元数据的区块头和包含交易数据的区块主体组成。
区块头包含三组元数据:
1.用于连接前面的区块、索引自父区块哈希值的数据;
2.挖矿难度、Nonce值(随机数,用于工作量证明算法的计数器)、时间戳;
3.能够总结并快速归纳校验区块中所有交易数据的Merkle(默克尔)树根数据。
区块链系统大约每10分钟会创建一个区块,其中包含了这段时间里全网范围内发生的所有交易。每个区块中也包含了前一个区块的ID(识别码),这使得每个区块都能找到其前一个节点,这样一直倒推就形成了一条完整的交易链条。从诞生之初到运行至今,全网随之形成了一条唯一的主区块链。
新区块生成过程
在当前区块加入区块链后,所有矿工就立即开始下一个区块的生成工作。
1.首先把在本地内存中的交易信息记录到区块主体中
2.之后在区块主体中生成此区块中所有交易信息的 Merkle 树,把 Merkle 树根的值保存在区块头中
3.把上一个刚刚生成的区块的区块头的数据通过 SHA256 算法生成一个 哈希值填入到当前区块的父哈希值中
4.把当前时间保存在时间戳字段中
5.难度值字段会根据之前一段时间区块的平均生成时间进行调整以应对整个网络不断变化的整体计算总量,如果计算总量 增长了,则系统会调高数学题的难度值,使得预期完成下一个区块的时间依然在一定时间内
区块链核心技术
区块和链
区块链上可能出现的信息安全与不信任问题提现在两方面:
一、试图更改之前某个区块上的交易信息
二、试图控制新区块的生成
解决这两个问题的关键都在于解数学题背后所代表的巨大计算能力的保证。
1.更改某区块的交易信息
因此,恶意节点如果想要成功修改交易信息,只有重新计算被更改区块后续的所有区块,并且追上网络中合法区块的进度之后这个长度的区块链分叉被提交给网络的其他节点,才有可能被认可。在当前全网巨大计算能力的背景下,一个恶意节点想要重新计算多个区块并且追上全网的情况很难出现。
2.控制新区块的生成
试图控制新区块的生成,则需要恶意节点率先得出数学题的解并且得到认可。由于区块中的交易由该节点决定,因此恶意节点可以永远不然某个交易得到认可。
理论上控制新区块的生成是可能的实现的:当恶意节点的计算能力高于网络中所有其他节点的计算能力的总和时,也就是恶意节点占据了全网51%的计算能力,恶意节点就可以控制新区块的生成,这种攻击被称为51%攻击。然而,在现实中,一个节点的计算能力超过其它所有节点的总和时非常困难的。
数学原理
比特币的所有权通过数字密钥、比特币地址和数字签名来确定,其中数字密钥由用户生成并存储在文件或数据库中,称之为“钱包”。
钱包中不包含比特币,只包含密钥。一个用户的数字密钥是完全独立于比特币协议的,由用户的钱包生成并自行管理,无需区块链或网络连接。
每笔交易需要一个有效签名才会被存储在区块中。只有有效的数字密钥才能生成有效签名,因此拥有了密钥就相当于用于了对账户中比特币的控制权。
密钥是成对出现的,由一个私钥和一个公钥组成。其中,公钥是公开的,相当于传统货币交易场景中的银行账号,用来接收比特币;私钥仅限于拥有者可见并使用,用于支付时的交易签名,以证明所有权。
私钥是一个随机选出的数字,通过不可逆的加密函数(椭圆曲线运算)产生一个公钥,之后再通过公钥,使用哈希函数生成一个比特币地址。比特币地址是由数字和字母构成的字符串,可以与任何人分享。
分布式结构
区块链的分布式结构使得数据并不是记录和存储在中心化的电脑或主机上,而是让每一个参与数据交易的节点都记录并存储下所有的数据信息。为此,区块链采用了开源的、去中心化的协议来保证数据的完备记录和存储。
传播
区块链的每一笔交易信息由当个节点发送给全网所有节点。因此,信息拦截者无法通过拦截某个信息传播路径而成功拦截信息,因为每个节点均收到了该信息。另外采用非对称加密的加密算法,只有拥有该交易信息的私钥才可以打开信息读取内容,保证了信息安全性。
记录
区块链构建了一整套协议机制,让全网络的每个节点在参与记录数据的同时,也参与验证其他节点记录结果的有效性。只有当全网大部分节点(甚至所有节点)都确认记录的有效性时,该数据才会被写入区块。
存储
在区块链的分布式结构的网络系统中,参与记录的网络节点会时时更新并存放全网系统中的所有数据。因此,及时部分节点遭到攻击或被破坏,也不会影响这个数据系统的数据更新和存储。
证明机制
区块链的证明机制也就是其证明算法,通过某一种证明算法以证明区块的正确性和拥有权,以使各个节点达成共识。目前z主流的区块链的证明机制有三种:
工作量证明机制————Proof Of Work(POW)
权益证明机制————Proof of Stake(POS)
股份权益证明机制——Delegated Proof-of-stake(DPOS)
其中,比特币使用的就是工作量证明机制。
可以看到,比特币使用的工作量证明机制存在几个缺陷:
首先,技术垄断和算力集中导致了中心化。因此,普通个体是不可能挖到矿,矿池则应运而生。
其次,矿工与持币者的利益错位。矿工不一定是比特币持有者,因此会出现“矿工利益”和“持有者利益”不同的情况。比如,“双花”的情况下,挖矿的人会获利,而持币者利益必将受到损失。
再者,巨大的成本消耗必将带来通胀。目前比特币的通胀率大概为年化13%。比特币的数量是有上限的,因此随着产量减半,在价格不变的情况下,算力至少下降一半,而网络安全性就会下降。在不损害网络安全性的前提下,则有必要维持高通胀率。
区块链核心问题
分叉问题
同一时间段内全网不止一个节点能计算出随机数,即会有多个节点在网络中广播它们各自打包好的临时区块(都是合法的)。
某一节点若收到多个针对同一前续区块的后续临时区块,则该节点会在本地区块链上建立分支,多个临时区块对应多个分支。该僵局的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。其他分支将会被网络彻底抛弃。故,分叉问题,谁长听谁的。
双花问题
双花问题是指一笔交易数字现金在交易中被重复使用的现象。我们以比特币为例,中本聪在《比特币白皮书》第五小节中是这样描述的,运行比特币的步骤如下:
1.新的交易向全网广播;
2.每一个节点都将受到的交易信息纳入一个区块中;
3.每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
4.当一个节点找到了一个工作量证明,它就向全网进行广播;
5.当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
6.其他节点表示他们接受该区块,而接受的方法则是跟随在该区块的末尾,制造新的区块以延长该链条,并将该区块的随机散列值视为新区块的随机散列值。
也就是说,交易发生的一刻起,比特币的交易就被盖上了时间戳,而当这笔交易数据被打包到一个区块中后,就算完成了一次确认;在连续进行6次确认之后,这笔交易就不可逆转了;在比特币中,每一次确认都需要“解决一个复杂难题”,也就是说每一次确认都需要一定的时间。
在这种情况下,当我试图把一笔资金进行两次支付交易的时候,因为确认时间较长,后一笔交易想要与前一笔交易同时得到确认几乎是不可能的,而这笔资金在第一次交易确认有效后,第二次交易时就无法得到确认。区块链的全网记账需要在整个网络中达成共识,双花问题是无法产生的。
分布式系统核心问题
一致性问题
在分布式系统中,一致性是指对于系统中的多个服务节点,给定一系列操作,在协议保障下,试图使得他们对处理结果达成某种程度的一致。
如果分布式系统能够实现“一致”,对外就可以呈现为一个功能正常的,且性能和稳定性都要好很多的“虚处理节点”
例如:某影视公司旗下有西单和中关村两个影院,都出售电影票,票一共一万张。那么,顾客到达某个电影院买票的时候,售票员该怎么解决是否该卖这张票,才能避免超售呢?当电影院个数更多的时候呢?
这个问题在人类世界中,看起来似乎没有那么难,你看,英国人不是刚刚靠“投票”达成了“某种一致性”吗?哈哈哈~~~
注意:一致性并不代表结果正确与否,而是系统对外呈现的状态是否一致,例如,所有节点都达成失败或者成功的状态的一致性。
共识算法
要保障系统满足不同程度的一致性,往往需要通过共识算法来达成。
共识算法解决的是对某个提案让大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个时间发生的顺序、某个键对应的值.....等等,可以认为任何需要达成一致的信息都是一个提案。
CAP
CAP原理最早由Eric Brewer在2000年,ACM组织的一个研讨会上提出猜想,后来Lynch等人进行了证明。该原理被认为是分布式系统领域的重要原理。
CAP原理,即分布式系统不可能同时确保一致性(Consistency)、可用性(Availablity)、和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。
一致性:任何操作都是原子的,发生在后面的事件能看到前面事件发生导致的结果。
可用性:在有限的时间内,任何非失败节点都能应答请求。
分区容忍性:网络可能发生分区,即节点之间的通信不可保障。
比较直观的理解,当网络可能出现分区的时候,系统是无法同时保证一致性和可用新的。要么,节点收到请求后因为没有得到其他人的确认就不应答,要么节点只能应答非一致性的结果。
好在大部分时候网络被认为是可靠的,因此系统可以提供一致可靠的服务;当网络不可靠时,系统要么牺牲掉一致性,要么牺牲掉可用性。
拜占庭问题与算法
拜占庭问题更为广泛,讨论的是允许存在少数节点作恶(消息可能被伪造)场景下的一致性达成问题。拜占庭算法讨论的是最坏情况下的保障。
中国将军问题
拜占庭将军问题之前,就已经存在中国将军问题:两个将军要通过信使来达成进攻还是撤退的约定,但信使可能迷路或被敌军阻拦(消息丢失或伪造),如何达成一致。根据不可能原理,这个问题无解。
拜占庭问题
又叫拜占庭将军(Byzantine Generals Problem)问题,是 Leslie Lamport 1982 年提出用来解释一致性问题的一个虚构模型。拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军(系统中的多个节点)需要通过信使来传递消息,达成某些一致的决定。但由于将军中可能存在叛徒(系统中节点出错),这些叛徒将努力向不同的将军发送不同的消息,试图会干扰一致性的达成。
拜占庭问题即为在此情况下,如何让忠诚的将军们达成行动的一致性。
区块链涉及的安全技术
Hash算法
哈希算法是区块链中保证交易信息不被篡改的单向密码机制。哈希算法接收一段明文后,以一种不可逆的方式将其转化为一段长度较短、位数固定的散列数据。
它有两个特点:
1.加密过程不可逆,意味着我们无法通过输出的散列数据倒推出原本的明文是什么;
2.输入的明文与输出的散列数据一一对应,任何一个输入信息的变化,都必将导致最终输出的散列数据的变化。
在区块链中,通常使用SHA-256(完全散列算法)进行区块加密,这种算法的输入长度为256位,输出的是一串长度为32字节的随机散列数据。区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。区块链的哈希值能够唯一而准确地标识一个区块,区块链汇总任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块中的信息没有被篡改。
公钥和私钥
在区块链的话题中,我们还经常会听到这样的词汇————公钥、私钥。这就是俗称的不对称加密方式,是对以前的对称加密方式的一种提高。在我们的交易过程中,经常会使用到公钥与私钥,图解如下:
- 交易的原始数据包括“转账数额”和“转入钱包地址”,但是仅有这些是不够的,因为无法证明交易的生成者对“转出钱包地址”余额有动用的权利。所以需要用“私钥”对原始数据进行签名。
- 生成“转出钱包公钥”,这一过程与生成“钱包地址”的第2步是一样的。
- 将“转出签名”和“转出公钥”添加到原始交易数据中,生成了正式的交易数据,这样它就可以被广播到比特币网络进行转账了。
##时间戳
区块链中的时间戳从区块生成的一刻开始就存在与区块中,它对应的是每一次交易记录的认证,证明交易记录的真实性。
时间戳是直接写在区块链中的,而区块链中已经生成的区块不可篡改,因为一旦篡改,生成的hash值就会发生变化,从而变成一个无效的数据。每一个时间戳都会将前一个时间戳也纳入其随机数hash值中,这一过程不断重复,依次相连,最后生成一个完整的链条。
##Merkle树结构
区块链利用Merkle数的数据结构存放所有叶子节点的值,并以此为基础生成一个统一的Hash值。Merkle数的叶子节点存储的是数据信息的hash值,非叶子的节点存储的是对其下面所有叶子节点的组合进行hash计算后得出的hash值。
同样的,区块链中任意一个数据的变更都会导致Merkle树结构发生变化,在交易信息验证比对的过程中,Merkle树结构能够大大减少数据的计算量,毕竟,我们只需要验证Merkle树结构生成的统一hash值就ok了。
区块链的优点
完全分布式:任意节点宕机不会导致网络崩溃。
去信任性:每一笔交易都由全网节点共同背书,所以不需要知道对方的身份,可以接受对方的交易。
解决了数字货币的“双花”问题
降低交易成本:因为不需要查清对方的信用,也就不需要征信,所以大大降低交易成本
提高了可靠性和不可篡改性:只有全网51%的节点被攻破才能篡改账本,作假成本极高,需要很大的算力,
瞬间公证、清算、审计、财务公开:由于所有数据全网都有,所以随时随刻可以清算、审计,完全公开,这解决了人类财务体系的痛点。
私密性:由于不需要对方的信用,所以可以匿名交易,交易的数据也可以加密,所以交易的私密性可以得到保障。
区块链的局限性
性能与容量问题:
1.去中心化程度与共识机制效率的矛盾:去中心化程度越高,共识机制效率越低,交易时延越长,交易吞吐越低,因此两者必须平衡。
2.账本存储容量和处理性能的矛盾:账本规模的增长,会带来节点的硬件资源门槛的提高。
安全性局限
1.51%攻击:需要引入大量节点,如果节点太少,51%攻击很容易。
2.私钥与终端安全:私钥存储在用户终端本地,如果私钥被窃取,就会出现资金损失。
3.共识机制安全:PoW、PoS的共识机制是否真正安全,缺乏严格的证明和试验。
区块链应用的分类
区块链1.0应用:数字货币
区块链2.0应用:智能合约+数字货币,例如:跨境支付、反洗钱、证券发行与交易、数字化资产等。
区块链3.0应用:扩展到金融行业以外其他行业
1.隐私数据存储:区块链的高冗余存储、去中心化、高安全性和隐私保护等特点,使其特别适合存储和保护重要隐私数据。
2.防伪溯源:善款进入系统后,整个生命周期都将记录在区块链上,没有人工拨付等环节,每一笔款项的去向很难人工更改。这样就可以促进公益捐款全过程的开放和透明。
3.身份认证:区块链数字身份识别证书
4.能源管理:去中心化网络,让网内用户在其屋顶太阳能发电超过需求时,可卖给社区的邻居,可以彼此互通有无,并以区块链虚拟货币来结算。
5.投票:开源在线投票。
PS:
因为最近比较忙,而这篇文章也是赶了好久完成的,所以如果有纰漏之处还请各位多多见谅!后期如果有时间、有机会的话,定为大家分享更多与区块链相关的技术与知识,例如智能合约安全审计系列、钱包、交易所、以及公链安全性技术问题的研讨,敬请期待!谢谢各位的阅读!
参考:
【1】《图说区块链》
【2】《人人都懂区块链》
【3】《区块链技术指南》