区块链(Blockchain)最初于2008年被应用于比特币(加密电子货币)上,作为比特币交易的账本;区块链因比特币进入大众视野,发明者中本聪由此名声大振,然而其真实身份至今仍是一个谜,这在互联网时代是一件令人匪夷所思的事情;基于区块链技术的比特币成为了第一个解决了两军问题的电子货币,与传统货币不同的是,它不需要一个受信任的权威机构或是中心服务器。比特币被发明之后以极快的速度发展,从随处可闻的挖矿新闻就能略知一二,虚拟货币在全球掀起了一场风暴,其底层区块链技术成为各大机构和公司研究的对象。
区块链是什么
关于区块链,并没有一个统一明确的定义,有将其解释为一种分布式数据库,也有将其理解为一种去中心化的分布式账本,区块链虽然存储数据,但将其定义为数据库未免牵强,存储数据并不是它唯一关注的重点,而账本也仅是当我们提及比特币等电子货币的时候适用,比特币是区块链技术的一个应用,二者却并不等同。顾名思义,blockchain 是由块组成的一条链,Wikipedia 中的定义为:
A blockchain, originally block chain, is a continuously growing list of records, called blocks, which are linked and secured using cryptography.
区块链基于点对点的网络,由一系列加密数据块链接产生的,每一个区块都包含上一个区块的哈希值,时间戳,和交易数据,它被设计成不可修改,无法伪造(伪造代价巨大,几乎无法实现)。这让区块链生而适合一些特定场景,比如交易记录,医疗记录,物流跟踪,投票,文档、版权管理,产权转移等等;
区块链2.0的概念提出于2014年,指基于分布式区块链数据库的新型应用,区块链2.0已经不止于交易,而是使价值交换不需要一个强势的中间人作为信息和金钱的仲裁者;
去中心化
提到区块链,听到最多的词是去中心化;在各个网络节点中存储数据,区块链技术避免了中心化存储数据,它没有中心节点;中心化的数据提供更好的可控性,信息和数据可以被修改,而非中心化系统的每一个节点都有区块链的完整拷贝,数据质量由所有节点共同保证,没有一个权威节点存在,所有节点的地位相同,每一条交易信息都会被广播到整个网络;
区块链的结构
区块链的数据库由点对点的网络和一个分布式时间戳服务器自动管理,就比特币应用来讲,区块链是一个去中心化的分布式账本,在多台计算机之间记录交易,在不修改后续所有子块的前提下,记录的生成是不可逆的(如果有人修改了一个区块,该区块的哈希值就改变了,由于后一个区块记录这前一个区块的哈希值,要使区块修改之后仍在链中,必须依次修改所有的后续区块,哈希计算被设计成非常困难,因此区块修改难以实现,除非攻击者掌握了51%以上的计算能力),区块链的可靠性因此保证,数据一旦上链便无法篡改;区块链也被描述成一种价值交换协议,相较于传统方法,基于区块链的价值交换可以更快捷,成本更低,理想情况下也更安全;
区块
一个区块由区块头和区块体组成,区块头记录当前区块的特征信息(上一个区块的加密哈希,时间戳,区块体的哈希 等),区块体记录实际的交易数据;
区块时间
区块时间是区块链网络生成一个新区块所花费的平均时间,比特币中生成一个区块的时间被设定成大约十分钟,通过设置计算难度系数动态调节,保证区块时间维持在这一平均水平,难度系数的不断调高,导致挖矿越来越难;
区块分叉
有时候多个区块可能同时产生,他们拥有同一个前置区块,导致区块链分叉;对此,每个区块链都有特定的算法来给分叉打分,拥有更高评分的分支会被保留下来,其他的被抛弃,被抛弃的区块被称为孤儿区块;比特币中,如果区块有分叉,将保留先拥有6个新的后续区块的分支,也就是增长较快的分支,交易是否生效需等待一个小时(生成六个区块的时间)之后确认;
挖矿
所有人都能向区块链中提交区块,而且必须保证节点同步,所以添加新区块必须有限制,不能增加得太快,设计让添加区块变得困难,只有通过海量的计算才能得到当前区块的有效哈希,要得到正确的哈希只能靠猜,也就是进行hash碰撞,作为工作量的证明,猜对了就能得到比特币酬劳,这个计算的过程被称为挖矿;
共识算法
共识是指多方参与的节点基于既定的规则,对网络中的行为和数据达成一致;共识机制用来保障系统的一致性,让所有节点对新增区块达成共识;比特币在在生成区块的时候采用了PoW(Proof-of-work)共识算法,积累了最多工作量证明的链被当作有效的链(出现分叉的时候,生长最快的链进行了最多的计算);其他的还有POS 股权证明,Practical Byzantine Fault Tolerance 等共识算法;
比特币工作原理
区块链的短板
虽然说需要全网51%以上的计算能力才能篡改区块链中的信息,但是对于私有链,其本身已经掌握了100%的创造区块的资源,只要攻破了私有服务器上的区块创造工具,就可以随意修改交易信息,因此一些内部的区块链方案并没有解决什么问题,只是增加了笨重的数据库而已;区块链的安全性目前也没有想象中那么高;2018年3月7日币安黑客事件引起虚拟货币恐慌,黑客利用大量做空获利,交易被记录被回退,解释是记录在交易所手里还没有上区块链;
区块链的应用场景
当下区块链技术最主要的应用场景是作为加密电子货币的分布式账本,尤其是比特币,美国,中国等国家的银行也在研究区块链在中心化银行业的应用;
智能合约
智能合约是区块链研究者常常会提到的一个词,基于区块链的智能合约是指合约在没有人为干预的情况下部分或者全部地自动执行,它的一个主要目标是把合约交由区块链保管等待条件具备然后自动执行;
智能合约存在的一个明显问题是:条件满足是否仍需要一个中心化的第三方机构提供数据;
银行业
区块链技术用于银行的清算与结算系统大大提高效率;一些中心化银行正在探索转移部分支付业务到区块链上,甚至开发电子货币;区块链在票据市场的应用,如央行推出的区块链数字票据交易平台;
溯源
使用区块链技术进行商品溯源和防伪,查看物流信息;也有将区块链应用在公益事业上做善款追踪;
相关概念
两军问题
两军问题,假设有两只军队分别有两个将军指挥,他们分别在堡垒的两个方向,只有同时发起进攻才能胜利攻下堡垒,如果贸然单独进攻则有被击败的风险,于是两军需要约定共同发起攻击的时间,但是他们之间通信必然要经过堡垒,有可能被堡垒中的敌军截获情报;背景介绍至此,假设第一个将军发送信息,约定‘次日早晨8点一起进攻’,信息发出之后,他无法确认对方将军是否收到了他的信息,因此他不会贸然出击,为了确认,第二个将军会发出信息‘我收到了你的消息,次日早晨8点一起进攻’,他发出消息之后,无法确认第一个将军是否会收到他的回信,因此也会犹豫是否出击,这样,无论进行多少轮确认,总有一方无法确认他们的最后一条消息是否成功被送达,根本原因是他们在通过一个不可靠的信道通信。
两军问题很容易让我们联想到TCP 的三次握手协议,IP协议并不是一个可靠的通信协议,TCP在这个不可靠的信道上通过三次握手保证了基本的可用性,增加多少次握手次数也无法保证信道的可靠性;
拜占庭将军问题
拜占庭将军问题,一组拜占庭将军各自率领一致军队包围一座城市,这些将军希望规划一个攻城计划,将军们必须决定是进攻还是撤退,其中一些将军支持进攻,另外一些支持撤退,他们同意共同决定最后的计划,因为部分军队进攻部分军队撤退会造成严重后果;这个问题因为将军中可能存在叛徒变得复杂起来,这些叛徒将军可能会投票给糟糕的策略,甚至执行糟糕的决策,比如有九位将军,其中四位支持进攻,四位支持撤退,第九位是叛徒将军,故意向支持进攻的四位将军送信表示投票进攻,向另外四位支持撤退的将军送信表示投票撤退,这样就会造成部分军队进攻,部分撤退,对军队整体造成破坏;不仅如此,将军之间的信件是否能被信使顺利送达,新建是否会被伪造篡改都会使问题变得更复杂;只有当多数忠诚将军在战略上达成统一,可称达到了拜占庭容错;