一篇文章读懂比特币 | 乌拖市场

区块链

区块链是由包含交易信息的区块从后向前有序链接起来的数据结构。它可以被存储为flatfile(一种包含没有相对关系记录的文件),或是存储在一个简单数据库中。比特币核心客户端使用Google的LevelDB数据库存储区块链元数据。区块被从后向前有序地链接在这个链条里,每个区块都指向前一个区块。

区块链经常被视为一个垂直的栈,第一个区块作为栈底的首区块,随后每个区块都被放置在其他区块之上。用栈来形象化表示区块依次堆叠这一概念后,我们便可以使用一些术语,例如:“高度”来表示区块与首区块之间的距离;以及“顶部”或“顶端”来表示最新添加的区块。

对每个区块进行SHA256加密哈希,可生成一个哈希值。通过这个哈希值,可以识别出区块链中的对应区块。同时,每一个区块都可以通过其区块头的“父区块哈希值”字段引用前一区块(父区块)。也就是说,每个区块头都包含它的父区块哈希值。这样把每个区块链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块)的链条。

由于区块头里面包含“父区块哈希值”字段,所以当前区块的哈希值因此也受到该字段的影响。如果父区块的身份标识发生变化,子区块的身份标识也会跟着变化。当父区块有任何改动时,父区块的哈希值也发生变化。父区块的哈希值发生改变将迫使子区块的“父区块哈希值”字段发生改变,从而又将导致子区块的哈希值发生改变。而子区块的哈希值发生改变又将迫使孙区块的“父区块哈希值”字段发生改变,又因此改变了孙区块哈希值,等等以此类推。

一旦一个区块有很多代以后,这种瀑布效应将保证该区块不会被改变,除非强制重新计算该区块所有后续的区块。正是因为这样的重新计算需要耗费巨大的计算量,所以一个长区块链的存在可以让区块链的历史不可改变,这也是比特币安全性的一个关键特征。

你可以把区块链想象成地质构造中的地质层。表层可能会随着季节而变化,甚至在沉积之前就被风吹走了。但是越往深处,地质层就变得越稳定。到了几百英尺深的地方,你看到的将是保存了数百万年但依然保持历史原状的岩层。在区块链里,最近的几个区块可能会由于区块链分叉所引发的重新计算而被修改。最新的六个区块就像几英寸深的表土层。但是,超过这六块后,区块在区块链中的位置越深,被改变的可能性就越小。在100个区块以后,区块链已经足够稳定,这时Coinbase交易(包含新挖出的比特币的交易)可以被支付。几千个区块(一个月)后的区块链将变成确定的历史,永远不会改变。

在比特币系统中,比特币完整节点保存了区块链从创世区块起的一个本地副本。区块通过引用父区块的区块头哈希值的方式,以链条的形式进行相连。

挖矿

有了交易、区块及区块链这些概念,如果只把区块链当成一个数据库来看,使用这些概念我们就可以构造一个区块链系统了。我们可以用交易的数据结构存储交易数据(支票、博客等),通过区块打包交易数据,最后通过区块哈希将区块连接起来,这就是我们通常说的区块链。

但是这样设计出来的区块链只是一个数据库,没有办法保证数据不可篡改。所以缺乏共识机制的区块链不是区块链,区块链一定要有共识机制支撑。比特币中的共识机制是通过挖矿来保证的。

在第一章中我们介绍到在比特币诞生之前,数字货币已经经历了十几年的发展历史。这期间包括e-Cash、HashCash、B-money等相关的数字货币,这个期间属于数字货币的发展阶段。虽然数字货币经过了十几年的发展,但没有人提出去中心化数字货币系统的实现。由于数字货币是一串字符串复制成本非常低,因此去中心化电子货币实现的难点是怎样避免数字货币被同时两次或两次以上的支付,也就是我经常说的双花(double spend)。(对于这个翻译我不敢苟同,我个人觉着翻译成双重支付更贴近原意,也更容易理解。)

在比特币系统中,挖矿是增加比特币货币供应的一个过程,同时还保护着比特币系统的安全,防止欺诈交易,避免双重支付(双重支付是指多次花费同一笔比特币)。

矿工们通过为比特币网络提供算力来换取获得比特币奖励的机会。矿工们验证每笔新的交易并把它们记录在总帐簿上。每10分钟就会有一个新的区块被“挖掘”出来,每个区块里包含着从上一个区块产生到目前这段时间内发生的所有交易,这些交易被依次添加到区块链中。我们把包含在区块内且被添加到区块链上的交易称为“确认”交易,交易经过“确认”之后,新的拥有者才能够花费他在交易中得到的比特币。

矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费。为了得到这些奖励,矿工们争相完成一种基于加密哈希算法的数学难题,这些难题的答案包括在新区块中,作为矿工的计算工作量的证明,被称为”“工作量证明”。该算法的竞争的机制以及获胜者有权在区块链上进行交易的机制是比特币安全的基石。

“挖矿”这个词有一定的误导性。它容易引起对贵重金属采矿的联想,从而使我们的注意力都集中在每个新区块产生的奖励上。尽管挖矿带来的奖励是一种激励,但它最主要的目的并不是奖励本身或者新币的产生。

如果只把挖矿看作生产新币的过程,那你是把手段(激励措施)当成了目的。挖矿是一种将结算所去中心化的过程,每个结算所需要对处理的交易进行验证和结算。

挖矿保护了比特币系统的安全,并且实现了在没有中心机构的情况下,也能使整个比特币网络达成共识。

工作量证明机制

POW(Proof of Work)工作量证明机制是比特币采用的共识机制,在这种共识机制里,各个节点需要解决复杂的数学问题,耗费大量的算力(比较耗电)来限制提案个数。从概率上来讲,即使有人想搞破坏,也要付出比绝大数诚实节点多的算力才能达到结果。由于比特币是全球节点参与工作,因此搞破坏是需要付出巨大代价的。但严格意义上来讲,比特币没有办法完全杜绝作恶。比如现在各大矿池已经拥有了绝大多数的算力,一旦他们联手,有可能又变成了另外一种中心化机构。

区块链是一本记录所有交易的公开总帐簿,比特币网络中的每个参与者都把它看作一本所有权的权威记录。在不考虑相信任何人的情况下,比特币网络中的所有参与者如何达成对任意一个所有权的共识呢?

中本聪的主要贡献是在比特币系统中实现了去中心化的自发共识机制。这种自发,是指没有经过明确选举或者没有固定达成的共识的时间。换句话说,共识是数以千计的独立节点遵守了简单的规则通过异步交互自发形成的产物。所有的比特币属性,包括货币、交易、支付以及不依靠中心机构和信任的安全模型等都是这个机制的衍生。

比特币的去中心化共识机制是由所有网络节点的4个独立过程相互作用而产生。1)每个全节点依据一个校验列表对每个交易进行独立验证。2)通过完成工作量证明算法的验算,挖矿节点将交易记录独立打包进新区块。3)每个节点独立的对新区块进行校验并组装进区块链。4)每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链。

重点讲一下工作量证明算法。挖矿就是重复计算区块头的哈希值,不断修改该参数,直到与哈希值匹配的一个过程。哈希函数的输入数据的长度是任意的,将产生一个长度固定且绝不雷同的值,可将其视为输入的数字指纹。通过修改数字可以构建不同的哈希。

简单打个比方,想象人们不断扔一对色子以得到小于一个特定点数的游戏。第一局,目标是12,只要你不扔出两个6,你就会赢。然后下一局目标为11,玩家只能扔10或更小的点数才能赢,不过也很简单。假如几局之后目标降低为了5。现在有一半机率以上扔出来的色子加起来点数会超过5,因此无效。随着目标越来越小,要想赢的话,扔色子的次数会指数级的上升。最终当目标为2时(最小可能点数),只有一个人平均扔36次或2%扔的次数中,他才能赢。

在一个完全去中心化的网络中,上面的调整是如何做到的呢?难度的调整是在每个完整节点中独立自动发生的。每2,016个区块中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以10分钟一个速率所期望花费的时长)比较得出的。难度是根据实际时长与期望时长的比值进行相应调整的(或变难或变易)。简单来说,如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。

共识机制是是比特币赖以生存的必要条件。通过交易、区块构建了完整的区块链数据,通过挖矿和共识机制确保比特币在没有中心化机构可以正常运营。

P2P网络及节点

比特币采用了基于互联网的P2P网络架构。P2P网络中每一个节点彼此对等,各个节点共同提供服务,不存在任何特殊节点。P2P网络中不存在任何服务器、中心化服务及层级结构。P2P网络具有天生的伸缩性、去中心化和开放的特点。比特币被设计为一种点对点的数字现金系统,它的网络架构既是这种核心特性的反映,也是该特性的基石。去中心化控制是设计时的核心原则,它只能通过维持一种扁平化、去中心化的P2P共识网络来实现。

虽然P2P网络中各个节点相关对等,但根据各个节点功能不同,各个节点会有不同的分工,在比特币系统中,每个比特币节点都是路由、区块链数据库、挖矿、钱包服务的功能集合,一个全节点包含钱包、矿工、完整区块链、网络路由节点。

你可能感兴趣的:(一篇文章读懂比特币 | 乌拖市场)