邓肯白话区块链系列
摘要: 区块链系列,欢迎对区块链、共识机制、智能合约、加密算法、技术框架感兴趣的朋友一起探讨
第一章:什么是比特币
现在朋友聚会聊天,不讨论点区块链简直会觉得out了,但究竟什么是区块链呢?其实没多少人能真正搞得清楚,大家在意的更多是各种币的涨跌。没错!区块链可以说是因为币圈而万众皆知的。要了解区块链,我们得先说说币圈老大比特币。
时间回溯到2008年,一个叫中本聪的人,发表了一篇名叫《比特币:一种点对点的电子现金系统》的论文,并在2009年基于这篇论文思想,成功建立了一套去中心化的虚拟货币交易系统,这个虚拟货币就是比特币。其实虚拟货币没什么特别的,比如更早的还有Beenz推出的“网豆”虚拟货币,还跟万事达合作可以在传统商店使用;再比如腾讯的Q币,某种程度上也是一种虚拟货币。比特币的特别在于它是去中心化的。去中心化是个什么概念?就是交易的处理不需要集中式的清算系统了,也不需要央行这样的机构来发币了!这哪是单单一个虚拟币啊,这明明就冲击到了所有现在货币发行规则嘛!
那么问题来了,没有了专门的货币发行机构,这货币怎么发呀?这是比特币又一个高明的地方,发明了“挖矿”的概念,就像是挖黄金一样,大家都可以来挖矿,谁工作量大谁挖到比特币的概率就高,并且提前设定好整个比特币网络挖矿的速度,随着时间的推移越来越难挖,一直到100年后挖出最后一枚比特币,所有比特币就开采完毕了,总量不会超过2100万枚。整个过程像不像开采黄金?!没错! 虚拟货币里的黄金!
既然是这么值钱的“黄金”,谁都想要啊,谁都想宣称自己挖到了比特币,那这么多人参与,又没有一个权威机构,怎么操作?于是比特币又发明了共识机制,借助区块链和P2P网络(没错,就是快播用到的技术), P2P网络负责把谁挖到币谁做了交易这些信息传播到整个网络,在得到全网按照共识机制达成一致以后,写入到区块中保存起来并且不可篡改,这个区块会迅速复制到网络上所有节点。所有这些区块头尾连接起来,就是一条完整的区块链。从最初一笔比特币交易开始,到目前最新的交易,都详细记录了起来,并且不可篡改,这是什么意义?这就建立了一套全新的诚信体系啊!体系里所有的交易都真实记录,征信机构评级机构都有危机感了!
那么话说回来,这么好的一套系统即使是建成了,如果没人用,那还是白费,所以比特币又有一个发明,就是Token(中文翻译成代币)激励机制,对于参与挖矿提供新区块服务的节点,都会提供一定数量的比特币作为报酬;并且在每笔交易中也可以设置小费作为支持交易的报酬,小费可根据规则灵活设置。这样一套行之有效的激励政策一出台,就完全激发了大家的积极性,比特币就是个心理学大师啊!
所以这么看来,比特币之所以这么火,它不单纯只是一种虚拟币,而是涉及计算机技术、密码学、经济学、社会学、心理学、政治甚至宗教等多个领域而建立起来的一种去中心化的交易网络。这里面用到的很多词汇和术语,待我在后期文章中慢慢道来。
第二章:区块链技术
上回我们聊了什么是比特币,今天我们聊聊区块链技术。
区块链和区块链技术其实是不一样的概念。区块本身就像是我们逛超市时候的物品存放柜,在比特币里区块就是用来存放比特币交易的,交易太多一个区块存放不下,就需要挖出新的区块(这就是挖矿),并且在新的区块第一个储物格里存放前一个区块的哈希值(可以理解为区块号),这样通过头尾连接起来就是区块链。在技术上来说,区块链可以存储为flat file或者简单数据库中,实现上并不复杂,也不是一个新概念。不同的点在于,比特币使用的区块链是去中心化的,也就是分布式的,并且形成了一整套区块链技术,这就引入了很多概念。
首先是区块链如何做到去中心化,这需要一个P2P(peer-to-peer)网络,以及网络上不同节点的支持。
在比特币网络中,每个节点都是路由、钱包、挖矿和区块链数据库这四个功能的集合,各节点上都会保留区块链的副本,节点之间通常采用TCP协议传输,通过8333端口建立连接。保留区块链全部副本的叫做全节点,保留区块链部分拷贝的叫做修剪节点,另外还有轻便式的比如手机端比特币钱包APP,这些叫做SPV节点。SPV是一个“简单支付认证”方式,主要就是打造轻量级节点。打个比方,我旅行带了3个行李箱,出入不方便,我就把2个大的行李箱寄存,随身带个小的行李箱,需要的时候我凭寄存条可以把另外2个大的行李箱取回。这就是轻量级节点的工作模式,当然SPV有更安全的机制验证行李箱是否被打开过。
比特币网络截止目前已经有超过上万个节点。如果有新的节点加入,如何识别和发现已有节点?一个比较好的办法是比特币客户端维护了一个长期稳定运行节点的列表,这些节点也可以被看做是比特币网络的“种子节点”,通过这些种子节点可以迅速发现网络中的其它节点。如果一个节点连续90分钟没有任何应答,那么会被认为网络中断,节点需要重启后再次启动连接加入网络。
既然节点多了,肯定需要一个共识机制来管理。目前区块链技术使用的共识机制主要有PoW(Proof of Work)工作量证明,PoS(工作权益证明),DPoS(委托权益证明)和传统一致性算法如PBFT(拜占庭容错)、PAXOS、RAFT等。比特币使用的是PoW,以太坊使用的是PoW+PoS,像比特股、EOS等使用的是DPoS,超级账本用的是PBFT。详细的共识机制我们放到下一章聊。
P2P网络架构,共识机制和区块链数据库,构成了区块链技术的基石。就像上回我们说到,这里还少了一样东西,就是激励机制。目前绝大部分基于区块链的应用,都使用Token作为激励机制的,Token本身的意义可能跟区块链同等重要。我们都知道,记账是产生财富的基础,个人生产的物品如果不进行交易就体现不出价值,正是因为可以记账,才可以进行等价交换,从而创造更多的财富。但在现实世界中,很多的事物是无法被量化的,或者量化的颗粒度太粗,也就没办法进行交换或者高效地交换。比如你的房子,不可能拆分成10份来卖。而在区块链技术中,Token的引入很好地解决了这个问题,所有实体的、虚拟的资产都可以通过Token来量化和交易,包括挖矿的收益、交易手续费、各种实物资产和数字资产如房子、母猪、博客、游戏装备、歌曲等等,并且基于Token的加密机制和私钥验证机制,保证了资产交易的安全性,而共识机制又避免了“双重支付”的问题,这些都是现实世界交易很头疼的问题,所以个人认为Token的引入是具有与区块链同等意义的创新。
第三章:也来谈谈共识机制
在区块链行业里,相信专业人士或者投资人谈得最多的一个话题就是共识机制,今天我们也来聊聊这个话题。
上一章我们提到,比特币使用PoW(Proof of Work)工作量证明作为共识机制。PoW过程俗称挖矿,如果用一句话概括我会叫它民主制,因为完全按劳分配,多劳多得。它的工作原理是这样,比特币网络中的每一个节点需要找出一个随机数(代号Nonce),这个随机数需要满足一个充分必要条件:随机数与当前最新区块的区块头的各项信息组合,作为计算公式的输入值,经过两次哈希算法(专业术语叫SHA256)之后得到输出值,这个输出值要小于一个指定数(代号Bits)。如果哪个节点最快时间寻找到这个随机数,就挖矿成功!假设矿机哪吒3号最先得到这个随机数,它就会向全网告知我算出来了!其它节点就会验证结果是否符合规则,在验证通过后其它节点就会把哪吒3号挖出的新区块作为当前区块,组合好区块头信息后继续挖下一个。而哪吒3号也会因为挖到了新区块,得到12.5个比特币的奖赏,在新区块里记录的第一笔交易通常就是将12.5个比特币转到自己钱包地址。比特币奖赏会随着时间推移自动/2递减,在2016年7月之前还是25个比特币,当前是12.5个比特币的新区块奖赏。
好些朋友会有个疑问:为什么这些矿机不能提前计算好这个随机数呢?或者为什么不能创造一种最优化的算法来得到这个随机数呢?这我们还得打打基础,从比特币区块头的结构说起(虽然不是白话但也不难理解)。
一个区块的区块头大小为80字节,其构成包括:
4字节:nVersion版本号
32字节:hashPrevBlock上一个区块的哈希值(这个是随着新区块的生成而变动的)
32字节:hashMerkleRoot交易列表的Merkle根哈希值(这个是根据交易列表而变动的)
4字节:nTime当前时间戳(随时都会变动)
4字节:nBits当前难度值(每挖出2016个新区块,这个值就会根据这2016个新区块难度总和/14天的总秒数,得到每秒的难度值)
4字节:nNonce随机数Nonce值
这80字节长度的区块头,就是比特币PoW算法的输入字符串。所以我们看到,这个输入值是不停地变化的,没办法提前预测;另外由于哈希算法的特性,输入项哪怕只相差一点,得到的输出项可能就千差万别,所以也没有最优算法,只能按顺序来暴!力!破!解!
既然比特币已经有了PoW共识算法而且还传播这么广泛,为何还要寻找其它的共识算法?这是因为PoW有几个明显的缺点:
1. 大量的资源浪费。我们都有听说挖矿是很耗电的,没错!绝大部分电力都用在了计算这个随机数上!2017年比特币挖矿平均耗电量超过159个国家的年均用电量!
2. 耗时太长。目前比特币网络设置的新区块产生速度在10分钟左右,这个值其实是为了保证哪吒3号挖到的新区块传播到全网并得到验证,如果时间太短,新区块还没验证又挖出了另一个新区块,这就会乱掉,于是,分叉就这样产生了。
3. 随着大型矿场和先进矿机的出现,出现了算力集中的现象,慢慢偏离了原本的去中心化轨道。
针对PoW存在的缺点,陆续推出了很多共识算法,其中应用比较多的是PoS, DPoS, PBFT, RAFT等。
PoS(Proof of State):权益证明,一句话概括就是资本主义做法。
谁持有的币越多,持有时间越长,那么挖矿的难度也会相应比例降低,挖矿的速度就越快,越有钱越容易赚钱。这种机制一定程度上缩短了达成共识的时间,但仍然会浪费资源,而且还会拉大贫富差距,最后有可能会成为富人的游戏。
DPoS(Delegated Proof of Stake):中文叫做委托权益证明,理解起来有点晦涩,简单点说就是民主集中制。
以EOS为例,民众选择21位人大代表(也就是21个挖矿节点),代表人民群众投票达成共识,人民群众坚决拥护和支持英明决策。但如果有人大代表弃权,也会由民众另外选举新的代表。如果民众发现人大代表有恶意操控行为,这个代表会付出大代价并被取消资格。DPoS减少了大量的资源消耗,也将生成新区块的速度提高到秒级,使基于区块链的应用处理大并发事务成为可能。缺点是在投票的时候只有少数节点参与,会被很多人认为有悖于去中心化。当然DPoS还有其它优点,比如能有效防止硬分叉,我个人还是比较认可这种共识机制。
PBFT:拜占庭容错。这个算法起源于拜占庭将军带兵打仗的问题,大家可以脑补这个情景:在古代通讯不发达的情况下,如果有多个将军带领多支部队,只通过信使联系,如何能保证所有部队能共同进退。拜占庭容错是一种传统的快速容错算法,通过分割为预准备(pre-prepare)、准备(prepare)和确认(commit)三个阶段,每个阶段多次通信最终得到多节点回复,来确保一致性。拜占庭容错能容忍最多1/3节点的出错。
RAFT:这也是传统的快速一致性算法,如果是做IT的,很容易理解它的工作原理,就像是集群的主从服务器,通过从主服务器同步日志到所有从服务器,来保持各节点的一致性。RAFT会将节点划分领袖(leader)、跟随者(follower)、候选人(candidate)三个角色,各角色之间会根据设定规则自动切换。日志最新的节点成为领袖,并且在完成投票后将日志同步到所有其他跟随者和候选人。
当然还有很多其它的共识算法,相信随着区块链技术的演进,也会出现越来越多的共识算法,在此就不展开了,有兴趣的朋友可以专题研究一下。对于共识算法最重要的,还是根据使用场景进行模块化设计,比如在高并发的公链中,DPoS不失为一个好的选择;在联盟链中,PBFT和RAFT能够在满足容错的同时又能提供更好的性能。更完美的设计是在同一个链条不同的使用场景中,能够自动选择不同的共识机制,比如所有的交易跟所有的账户管理,就没必要使用同一套共识算法。
随着区块链技术的发展,链条本身也在不断优化自己的共识机制。比如以太坊初始是采用PoW,现在逐步演进到PoW+PoS,以支持更多场景的需求。
在此稍微多提一下,以太坊的推出也是因为比特币网络显得粗糙,不能支持更丰富的应用场景,于是在链条上增加了一段能执行的代码,这就是智能合约。正所谓无心插柳,正是这段小小的程序,开启了一扇考验人性的大门:ICO!至于ICO的是非成败,且不多加评论,像朋友圈里说的,咱先打打麻将。古今多少事,多付笑谈中。
第四章:区块链不是万能的
区块链越来越火,不少人会发现突然之间身边的朋友都谈起了区块链。这里面比较典型的是分为两类人,一类人认为区块链无所不能,现在的互联网行业和没有被互联网改造的行业,都将被区块链替代;一类人认为区块链被妖魔化了,其实不过是个概念,过了这阵风头就会风平浪静。本人认为这两种态度都有些极端化了,区块链技术有其自身的意义和广阔的应用场景,但也不是万能的。
抛开币圈的那点事不谈,在现阶段区块链主要的价值,简单点说就是能解决有多方参与的信任问题。这里有两个关键点:多方参与和信任问题。多方参与是指一个场景中有多个角色、或者同一个角色有多个实体或个人。比如在P2P借贷领域,会有多个出借人和多个借款人,假设出借人老王要了解借款人老张究竟跟多少人借了款,就可以用到区块链技术,因为能真实记录借款人老张的所有借贷信息。再比如90后画家Abby在电脑上作了一幅画,准备将原版电子文件以100万人民币出售。在传统的互联网技术中无法支持这种场景,因为电子文件可以有多份拷贝出售n次。如果使用区块链技术,就可以真实记录这个数字资产的所有权转让和归属问题,并且保证Abby的这幅画作在同一个链中只能出让一次。这就解决了一个卖家多个买家多方参与时,重复售卖的问题。
如果一个场景只有多方参与,但不存在信任问题,那也没有区块链用武之地。比如在游戏里多方组团打怪,可能会有人临时有事参与不了,这无关呼信任问题也不需要区块链来解决。再比如你在携程买了一份旅游套餐,里面包含住宿、机票、包车、门票等多项服务,这里虽有多方参与但没必要用到区块链技术,因为订单一旦确认就相当于携程做了中心化的担保。
有的朋友可能会质疑,说针对携程旅游套餐的例子,我也可以用区块链改造啊,把多个参与方都加入到区块链中,用户可以直接清楚地看到每一个参与方的情况,这岂不是更好?我只能说这是极度理想化的场景,是不切实际的。旅游套餐的推出本来就是为了方便用户,因为对于大部分用户来说,没有太多的精力和能力去评估所有参与方的产品和服务、安排行程和进度、以及协调各种不可控原因导致的行程冲突解决。
也有人跟我提到两方参与的场景,比如云盘,存在百度云上的资料,担心啥时候突然没有了,自己还得小心在多处做好备份。用区块链不是就能解决这问题么?其实百度云本身就用了分布式存储的技术,区块链并不一定比百度云安全。至于账号盗用的问题,在百度云或者区块链上也都会面临。反而如果区块链本身参与的节点数不多,万一恶意团队发起51%攻击,还有可能遭受更大的风险和损失。
针对市面上鱼龙混杂的区块链项目,我总结下哪些场景是言过其实浮夸太甚的:
1、需要结合线下流程的场景:区块链独立解决不了问题,必须结合物联网等技术联合实现。所以目前很多宣称通过区块链技术改造的物流、供应链、或甚至房地产建设等项目,绝大部分都不可信,因为实现难度极高,需要物联网等技术全面改造线下场景才能实现。
2、需要人工输入数据的场景:区块链解决不了数据的真实性。比如有的区块链养鸡项目,宣称可以跟踪一只鸡从出生到宰杀和售卖的全流程。但其中大部分数据都是人工输入的,很难保证数据的真实性以及防范联合欺诈的风险,也就失去了区块链追本溯源的意义。
3、需要产品、服务或运营驱动的场景:想通过区块链解决困境,也是不切实际的。比如很多打着区块链名号的游戏,其实只是引入了区块链的噱头,或者是借机招揽更多的人来炒币,而没有创造更多的价值或者解决更多的用户需求。这类项目即便能起来几个或者火一阵子,也注定走不远。
4、另外还有那些动辄号称已经是区块链3.0、4.0的项目,做个区块链操作系统不在话下,支持几十万的TPS易如反掌,产品能够包括万象,这类项目只有三个字:假!大!空!
目前阶段来说,个人认为区块链最适合改造的领域:金融科技、数字资产和广告以及实体资产的数字化、各类数字投票、以及结合物联网等技术的供应链改造。当然不排除随着区块链技术的发展和更广泛的普及,可以应用的领域会越来越多。
。