首页
学习
活动
专区
工具
TVP
发布

我们家有矿,有本事你来挖!

大家好,我是三七,今天我们依旧接着上期继续共读《精通比特币》,今天是本书的最后内容,也是分为两部分:区块链、挖矿与共识。

第一,区块链

第二,挖矿与共识

一、区块链

区块链是由包含交易信息的区块从后向前有序链接起来的数据结构。它可以被存储为flat file(一种包含没有相对关系记录的文件),或是存储在一个简单数据库中。

区块链说起来是一个链条,但整个区块链网络,并不是一个首尾相连的环形链条,而是一条断开的链条,为了更好的理解区块链,我们可以把区块链看成是一根垂直的链条。

最低的区块,被称作是创世区块;而区块链里面的高度,则指的是顶部区块与创世区块之间的距离。

详细的名词解释大家可点击下方链接查看:

—1.区块的结构—

单个区块的具体结构,由两个部分组成:一个是区块头,一个是区块主体。而区块头里面由三组元数据组成:父区块的哈希值、挖矿竞争相关数据、Merkle 树根(所有交易信息的数据结构)。

点击下方链接查看Merkle 树根的详细解释:

区块链中的Merkle Tree

—2.区块标识符—

每一个区块都有自己的标识符,使自己易于查找和辨别。这里的区块标识符有两种:

第一种,识别方式是:区块头哈希值

区块主标识符是它的加密哈希值,一个个通过SHA256算法对区块头进二次次哈希计算而得到的数字指纹。但是要注意区块哈希值实际上并不包含在区块的数据结构中,不管是该区块在网络上传输时,抑或是它作为区块链的一部分被存储哎某节点的永久性存储设备时。

相反,区块哈希值是当该区块从网络被接收时由每个节点计算出来的。就好像,你虽然办了身份证,但是身份证信息是放在派出所保管的。

点击下方链接查看哈希值的详细解释:

第二种,识别方式是:区块链的高度

第二种识别区块的方式是通过该区块在区块链中的位置,即“区块高度(block height)”,第一个区块,其区块高度是0,它被创建于2009年,被成为创世区块。是区块链里面所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。

—3.区块的连接—

我们前面说到过,区块链有两个部分:区块 + 链。链指的就是区块之间的联系。每一个区块的头部区块里,会存储自己的“父区块“的区块头哈希值(再次提醒,区块不会存储自己的哈希值,存储的是自己父亲的哈希值)。

父区块指的是,当前区块的前一个区块。从垂直的角度来看,就是压在自己下面的最近的一个区块。比如,当前区块是第3500个区块,那么他的父区块,就是第3499个区块。以此类推,第2个区块的父区块就是创世区块,也就是第一个区块。这样的机制,使得每个区块都能根据自己父区块的唯一标识符,一路查找到创世区块。这样就形成了一个从不间断的链条结构。

二、挖矿与共识

挖矿是增加比特币货币供应的一个过程。挖矿的同时还保护着比特币系统的安全,防止欺诈交易,避免“双重支付”。

整个区块链网络里面的矿工之所以主动积极的去挖矿,主要是矿工可以获得奖励。奖励分为两个部分:区块里面相应的比特币奖励、这个区块上所有交易记录的交易费用。那是否2100万个比特币被完全挖出来之后,旷工就不挖了吗?不是的。2100万个比特币挖完,旷工的所有收入将会基本来自于交易费用。只要有交易增加,区块就会不断增加,就不断有交易费用。

—1.比特币是通货紧缩的货币—

比特币的发行总量是固定的,到2140年左右,2100万的比特币会被全部生产出来。

具体为:每开采21万个区块大概耗费4年,每过4年,货币发行的速度会降低50%。

第一个四年,大概是从2008年开始,每个区块产生50个比特币。

第二个四年,从2012年11月开始,每个区块产生25个比特币。

第三个四年,从2016年7月开始,每个区块产生12.5个比特币。

第四个四年,从2020年某个时刻开始,每个区块产生6.25个比特币。

直到2140年,2100万的比特币会全部产生。

从上面的规则来看,区块的产生和比特币的产生是完全不同的两回事。区块的产生是旷工用矿机挖出来的,而比特币是每个区块产生出来的,而且是区块产生的比特币会越来越少。简单来说,区块链的区块数量几乎是无限的,只要有旷工在挖矿,但比特币总量是有限的。这样使得比特币是通货紧缩的货币,不会像人民币一样具有通货膨胀的风险。

—2.去中心化共识—

去中心化共识,是整个区块链网络信任的基础。去中心化共识是由所有网络节点的相互作用产生的,主要有4种:

每个全节点依据综合标准对每个交易进行独立验证;

挖矿节点完成工作量证明的验算,将交易记录独立打包进新区块;

每个节点独立对新节点进行校验并组装进区块链;

每个节点对区块链进行选择,选择工作量最大的区块。

—3.交易的独立验证—

交易的独立验证,其实就是发生在新节点寻找新的邻居节点的过程之中的这里的新节点一般是钱包节点,因为这些节点需要传递的是:交易信息。

新节点把交易新传递给邻居节点的时候,邻居节点会主动验证这些交易信息是否为有效交易,在确认无误之后,才会继续进行传递给自己的邻居节点。这些校验的项目,是一个长长的列表,每个节点会逐个去验证每个需要验证的条目。

你可以这样想象,每个节点其实都是一个质量检查员,他们对于交易信息的质量严格把关。在拿到大量交易信息的时候,他们会拿着一个长长的校验清单,一条一条的检验,这个过程就是交易的独立验证。

—4.完成验算,打包交易记录—

在整个区块链网路里,挖矿节点都是在同时做3件事:

监听网络上的交易;(眼观六路、耳听八方)

监听其他节点发现的区块;(随时关注竞争对手的动态)

挖掘新的区块;(其实就是寻找算法的解)

在获得区块之后,挖矿节点需要做的就是把交易记录打包进这个候选区块。之所以说是候选区块,是因为网络里的旷工依然是竞争状态,整个网络还没有确定到底是哪个旷工挖出的区块可以加入到区块链中。

在上一步的交易验证之后,比特币节点会把监听到的交易记录暂时放到自己的内存池(也叫做交易池)。你可以把交易池想象成一个临时储物间,这里面存储的是已经经过验证但是还没有打包进区块的交易记录。(这些记录目前还没有得到交易确认,这是后面要谈到的工作量证明)

挖矿节点,一旦接收并验证了一个区块A,那么这个节点就会去自己的临时储物间,检查储物间里面的所有交易记录。从临时储物间里面把已经出现在区块A里面的交易记录移除。剩下的记录会被打包进下次出现的新的区块B。说的再清晰一点就是:A区块把10分钟以内的交易记录打包进自己的区块,10分钟以外的交易记录会留个下一个区块B。因为每10分钟只能有一个区块产生。

—5.区块打包过程—

我们可以简单把矿工想象成给快递打包的工人。只不过,矿工打包的东西不是快递,而是交易记录。做任何事情都有一个轻重缓急,矿工打包交易记录也是一样。在区块链里面的,交易记录都是有自己的优先级的,矿工会优先打包那些优先级别较高的交易记录。那什么样的是优先级搞的交易记录呢?手续费高的交易记录优先级更高。

—6.校验新区块—

这一步,就是交易记录的验证,是区块形成必不可少的步骤。“当一个节点接收到一个新的区块,它将对照一个长长的标准清单对该区块进行验证,若没有通过验证,这个区块将被拒绝。”

—7.校验新区块—

在验证新区块的各项指标之后,区块还需要去寻找最大工作量证明的链条。区块链的选择里面涉及到一个重要概念:区块链分叉。关于区块链分叉,书中举出的图还是比较形象化的,大家可以看下:

区块链分叉发生在两名矿工在较短的时间内,各自都算得了工作量证明解的时候。也就是上图的,矿工A 挖出了红色区块n+1,与此同时矿工B 挖出了绿色区块n+1 。红色区块和绿色区块,里面打包的交易记录都是一样的,父区块都是区块n.唯一的区别只是挖出区块的矿工不同而已。此时,整个区块链就出现了分叉,有了两条一样的链条。这就是所谓的区块链分叉。

—8.共识攻击—

比特币的共识机制依赖于这样一个前提:绝大多数矿工,处于自己的利益最大化考虑,都会通过诚实地挖矿来维持整个比特币系统。

理论上,一个区块链分叉可以变得很长,但实际上,要想实现一个非常长的区块链分叉需要的算力非常非常大,随着整个比特币区块链逐渐增长,过去的区块基本可以认为是无法被分叉篡改的。

但如果一群矿工控制了整个比特币网络51%的算力,联合起来,是可以攻击整个比特币系统。可是随着比特币网络的算力呈几何级数快速增长,上述这些理论上可行的攻击场景,实际操作起来已经越来越困难。

理论上来说,比特币是目前最安全的共识机制系统

不管爱我还是恨我

另外

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190105A18R5400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券