2008年,中本聪发布了一篇名为《比特币:一种点对点的电子现金系统》论文,之所以选择在金融危机这年发布,也许别有深意。他认为传统货币最根本的问题在于信任,银行必须让人信任它能帮我们管好钱财,但是银行却在用货币制造信贷泡沫,通货膨胀使人财富缩水。首先中本聪把比特币定义为一种点对点的电子现金系统, 目的很明确:希望这套系统不要依赖任何一个中心,比如中央银行,所以这个系统肯定是分布式系统。
区块链的概念是在中本聪设计比特币系统的时候首次提出,也是区块链技术第一次得以落地并且运用得最成功的一次。比特币是一种业务场景, 区块链是比特币这种业务场景实现的技术基础,要了解区块链,先简单了解比特币的运行机制。
图中的橙色方块就是这套系统上的每个节点,散布在世界各地;可以认为每个节点都运行着中本聪开源的比特币客户端,节点之间形成全网通讯。
为了安全和信任。首先来说说安全,这个应该都好理解。比如现在我们用支付宝,所有的转账支付行为都要经过支付宝这个中心,这个中心一旦出问题,所有用户都受影响;这个中心一旦被黑客攻破,数据就非常容易被修改;而分布式系统中,全球每个节点既是客户端也是服务器,除非同时有51%以上节点被篡改,否则所有修改均无效,被“自治”,所有篡改数据难道非常大。安全上的保证也极大解决了信任问题,但是主要的还是数据控制权问题,中心化的系统,被掌握在一个中心中,比如我们的交易数据被掌握在支付宝中,鬼知道有没有被出卖,有没有被利用;而分布式系统中,所有数据透明,不属于任何一个中心;人人都是数据生产者也是拥有者。
第一,比特币的稀缺性;第二,奖励机制。首先要说两个重要的角色: “矿工”和用户。
没错,矿工就是比特币系统上的每个节点的维护者,中本聪并不亲自部署这么多节点,而是通过一种奖励机制,让每一个人都能参与维护扩展这套系统,这时候运行在这个节点上的机器也称为“矿机”,矿机的主人就是矿工。在用户交易过程中产生的记录,如果被某个节点来帮忙验证并记录了,这时候矿机的主人就会得到一定的比特币作为奖励。 具体由那个矿工来记录?这个就比较有意思了。
发生交易时,全网节点能监听到,通过验证的记录或放入节点内存中,然后所有的矿机都在开始“算题”,拼算力的时候来了,这批交易记录会被分配一个随机数, 每个节点都在“努力”地找这个随机数,谁先找到,谁就得到了这批交易的记账权,然后就开始验证,验证之后打包成一个数据块,就是我们说的区块了(终于提到区块这个概念了,先别着急,后面再慢慢展开。),然后开始全网广播,把这个区块副本广播出去,告诉其他节点不要努力了,我已经找到了,挖到矿了,大家看看是不是“真的”,然后其他节点停止挖矿,逐一验证,51% 以上的节点都验证通过之后就把这个区块加到当前区块链上的末端,交易完成。
为什么有人愿意部署矿机来挖矿, 挖矿的奖励真的有价值么?首先比特币是稀缺的,如果比特币可以无限的产生那就无价了。比特币总量是 2100 万个,从 2009 年开始,每次产生一个区块的奖励是50个,每 4 年奖励减一半。按照比特币大约每十分钟产生一个区块的速度计算,大约到 2134 年比特币全部发完。另外比特币不受一个中央控制,当大多数人都相信它具有代币价值、大多数人都愿意在上面交易的时候它就有价值了,比如纸币,它就是一张纸,当大多数人都相信并认可它的价值并能流通,它就不再是一张纸那么简单了。
现在我们对以上内容进行一个总结了。
到这里,我们对比特币系统雏形有一个大致了解,下面我们就对这个系统中的核心概念分别展开介绍。
在比特币中成为一个用户很简单,获取一个钱包地址就行了,获取地址:https://blockchain.info/wallet/#/signup。拥有了一个钱包地址之后就可以向全世界任何一个钱包发送比特币了,前提你拥有了比特币。交易记录是加密的、匿名的,每个用户拥有唯一的私钥,交易时候使用私钥生成数字签名,用户之间交易就产生了记录。一条记录是整个区块链中的最小单位,一次操作就会生成一条记录。
一个区块由区块头和区块体组成。
### 区块头
版本号(version):版本号
哈希值(Hash):当前区块hash值
前驱区块哈希值(Previous Block):前驱区块hash值
后续区块哈希值(Next Block(s)):后续区块hash值
交易总数(Number Of Transactions):交易数量
时间戳(Timestamp):时间戳
随机数(Nonce):随机数,在比特币系统中,“挖矿”就是找这个随机数。
默克尔树根哈希值(Merkle Root):交易记录的默克尔根
区块体装的是记录列表。
### Merkle Root 怎么来的?
先说说 Merkle Root 的作用, 交易记录发生任何变化, 这个值都会变,也就是这个值是以交易记录为变量生成的。
生成原理,如下图:
这是一棵二叉树,叫做默克尔树(也叫hash树), 把所有记录各自hash值作为叶子节点, 两个叶子节点hash值合起来
又进行一次hash计算,生成父节点;直到最终的树根。树根hash值就是Merkle Root。
一个区块格式:https://blockchain.info/block/0000000000000000003e1641219b1291b53e0c609d53f4d56aadcf0646cdfd36
所有区块通过 Previous Block 或 Next Block 顺序一个链条。区块链系统,例如比特币的区块链系统中每个节点都维护着一条这样的链条,区块链的主要概念就是这么来的。
以上我们大致了解了交易记录、区块、链等概念,现在我们把这些概念串起来,看看区块链的工作流程。
上文提到的"全网广播",实际上不需要让全网所有节点都收到,只要大部分节点就行了。对于那些没有收到的,丢失的区块,区块链系统是具有容错能力的,如果某个节点么有收到特定区块,这个节点将会发现自己缺失的区块,可以提出自己下载区块的请求。
以上流程中,最为重要的就是区块的共识机制了。共识,是指要让全网大多数节点(至少51%)都认为数据真是可靠的过程。目前主流的共识机制有:工作量证明(PoW)、权益证明机制(PoS)、授权股权证明机制(DPOS)和拜占庭共识算法(PBFT)。 比特币中使用的就是工作量证明算法,也就是上面所说的"挖矿",这里重点来讲讲"挖矿"。
节点监听全网记录数据,通过基本的合法性验证之后把记录暂存起来,接下来就开始工作量证明了。回忆下我们在前文中介绍的区块的格式,区中区块头有一个随机数字段:Nonce。节点矿机不断的尝试不同随机数,直到找到这个随机数,然后把记录打包生成区块,把这个区块广播出去,经过其他节点验证通过之后再链接到区块链中。比特币的PoW中, 平均每10分钟有一个节点找到(产生)一个区块,如果两个节点同时一个时间内找到区块,那么网络将根据后续节点和区块生成情况来决定,再给六个区块的生成时间来确定,谁最先找到谁就拥有记账权限。
随着区块链技术的成熟,基于区块链技术的运用领域应还是比较广阔的。
区块链按照应用场景、数据读写范围来分,可以分为三类:公共区块链、共同体区块链和私有区块链。
公共区块链:指全世界任何人都可以参与,任何人都可以在上面进行交易、读写、共识的区块链。共有区块链是完全分布式的,数据公开,用户参与度高,便于推广,但是系统运行依赖奖励机制。应用场景有如比特币、以太坊等。
共同体:又称为联盟链,比如多家金融机构,每个机构作为一个节点,一起构成一个区块链的分布式系统。对区块链的对其仅限这些机构之间,或共识过程的参与节点。典型应用场景有如IBM的超级账本(HyperLedger),腾讯等多家互联网巨头已经参与其中;又比如腾讯云联合微众银行,平安科技等二十余家金融机构和科技企业共同发起成立了金融区块链合作联盟(简称“金链盟”),在国内率先尝试探索、研发、实现适用于金融机构的金融联盟区块链。
完全私有链:
完全私有的区块链是指其写入权限仅在一个组织手里的区块链。读取权限或者对外开放,或者被任意程度地进行了限制。区块链链一个重要的特点解决中心化信任问题,个人觉得现阶段,私有链没什么卵用。
区块链技术在面临机遇的同时,也面临着不少问题与挑战。
1、区块链体积过大:随着区块链的发展,节点存储的区块链越来越大,存储和计算负担也越来越大。例如比特币,完整比特币区块链大小已经超过64GB了,客户端要同步完整数据的话,可能三天三夜都同步不完。
2、同步确认时间过长:全网节点共识的机制,共识过程时间问题还是存在不少挑战。例如比特币一次确认时间大约为10分钟。
3、区块链发展受到现行体制的制约: 去中心化,自治等特征,淡化了国家监管的概念,给传统中心机构带来了冲击,比如中央银行。这也是什么现在各种xx币在国内少到打压的原因。
区块链的开源项目也是比较多,具体可以参考这里:http://blog.csdn.net/elwingao/article/details/52679475。