最少必要知识——《精通比特币》

作者: 丁昆朋 | 来源:发表于2017-07-22 22:19 被阅读234次

    下面是精通比特币第六章、第七章的最少必要的知识,来自于“金马定投区块链”的系列课程,如果你觉得非常好,请订阅,这是链接:

    最少必要知识——《精通比特币》

    对我而言只是为了加深一下基础知识,更加了解它们。

    26.协议

    协议,是计算机领域的专业术语,英文单词是:protocol。计算机领域有很多协议,比如最常见的网络协议:http协议。

    我们可以把协议理解为大家一起制定的并且共同承认、共同遵守的文件。也可以看做是我们生活中常见的合同或者协议。 比如常见的离婚协议、租房合同。

    协议的内容是可以扩展的,只要遵守协议的人都认可添加的协议内容就好。

    27.节点。

    节点,一般是指计算机网络里面的单个计算机或者网络设备。每个节点的功能可能各不相同,但在网络中是一个一个独立且相互连接的个体。

    在比特币网络里面,我们常常说的节点,往往是带有比特币客户端的计算机或者网络设备

    28. P2P 网络架构

    看到 p2p,不知道你是不是想到了金融界的p2p 贷款和放贷?

    其实P2P 的英文全称是: peer to peer 。翻译过来就是:点对点。

    所以任何点对点的关系,都可以使用 p2p 这个概念。

    比特币网络的结构使用的就是:P2P网络架构。

    P2P的含义是指:位于比特币网络中的每一台计算机都彼此对等,每个节点共同提供网络服务,不存在任何“特殊”节点。

    重点在于:每个节点都是完全平等的。每个节点对外提供服务,同时使用其他节点提供的服务。

    在现实生活中生而平等是一件需要努力的事情,那么,比特币网络上的节点,天生就是点点生而平等而不需努力的。

    比特币网络就是指按照比特币P2P协议运行的一系列节点的集合。

    下图,可以清晰的表示每台计算机节点的对等关系:


    最少必要知识——《精通比特币》

    图片来源:网易公开课。

    29.节点类型及分工(依据功能)

    尽管每个节点的价值或者说地位是完全平等的,但是他们的功能确实有差异的,每种节点有拥有不同的分工。

    一个全节点包括四个功能:
    1.钱包
    2.矿工
    3.完整区块链
    4.网络路由节点

    最少必要知识——《精通比特币》

    “每个节点都参与全网络的路由功能,同时也可能包含其他功能。每个节点都参与验证并传播交易及区块信息,发现并维持与对等节点的连接。”

    这里说的路由功能,其实就是指,每个节点都会主动连接各自的邻居节点,从而为整个网络服务。

    四个功能任意组合。就会出现不同的节点。也就是说,很多节点并不是全节点,比如我们常说的钱包,就不具备全节点的所有功能。

    30. 扩展比特币网络

    比特币网络,本身是遵守比特币协议的各个节点的组合。

    但是比特币协议本身有些功能是无法实现的。比如,挖矿和钱包功能。

    需要实现功能的话就需要去扩展比特币的网络协议了。

    比如:许多连接到比特币网络的大型公司运行着基于Bitcoin核心客户端的全节点客户端,它们具有区块链的完整拷贝及网络节点,但不具备挖矿及钱包功能。

    这些网络公司为了拥有这些功能,会在原有的比特币网络协议上,增加一些用于增加上述功能的特殊协议。

    扩展之后的比特币网络,它包括了多种类型的节点、网关服务器、边缘路由器、钱包客户端以及它们相互连接所需的各类协议

    这些扩展协议的存在,使得整个比特币网络拥有了更多的功能。

    31.网络发现

    比特币网络里面的节点是存在于复杂的网络之中的。

    每一个新的节点出现之后,为了可以和整个区块链网络里面的节点进行协作,这个节点就必须要主动去和已经存在的节点产生联系。这样才能加入到比特币网络的大家庭里面。

    这个新节点与已有节点建立联系的过程,称作:网络发现。这个发现的目的是:找到自己的对等节点。

    网络发现的过程,我们可以类比成:搬家之后找邻居。(家庭住址就是IP地址)

    下面就带大家看看,新节点到底是如何找到自己的对应节点并产生联系的。

    区块链里面网络节点众多,新节点刚开始找邻居的时候,是很难一下子就找到自己的对等节点的。

    为了能够提高网络发现的效率,在整个网络里面存在一类特殊的节点。这类节点称作:种子节点。

    如果把新节点找到对应节点的过程是搬家找邻居,那么,种子节点就是你要去的那个小区的居委会大妈。
    作为居委会大妈的种子节点的手里,拥有大把的小区邻居的信息。

    作为新节点的你把你的基本信息给了种子节点,作为居委会大妈的种子节点会努力的帮你寻找可以与你对应的邻居节点。

    当你找到了对应的邻居节点的时候,大妈就不会管你了。

    下一步就是你自己和邻居产生更深的联系。

    你会把自己的地址信息(也就是IP 地址)主动发送给邻居节点。

    你的邻居节点又是一个热心肠的好心人,他会主动把你的地址信息,分享给他的邻居节点。

    你邻居的邻居,也会是一个好心人,会主动帮你把你的地址信息再次传递给他的邻居。

    这样的过程循环往复,最终,整个小区的人,都会知道你的地址信息,找到你就会很容易。

    另外,你还可以向你的邻居节点发送请求,获取你邻居所知道的其他邻居节点的地址信息。

    这样一来,作为新节点的你,全网的节点都会知道你的地址,你也知道了全网每个节点的地址。

    到这里,你完全可以找到与你对等的节点了。完成网络发现的目标。

    最后,会有一种特殊情况,那就是:节点和整个比特币网络失去联系,也就是离开了网络。
    比如,你做一段时间矿工,突然不想做了,也就是离开了整个比特币网络。

    每个节点都有随时加入和离开网络的自由,就好像你在一个小区居住,
    只要是想搬家,随时都是可以搬家的。

    在这种情况下,节点之间的通讯地址通常是不可靠。所以,比特币网络发明自己的一套机制来处理这样的情况。

    32.区块

    区块是区块链最基本的组成单位。每一个区块里面包含着众多的交易信息,也包含一些与相邻区块联系的信息。你可以简单的把区块看做是一个账本,这个账本里包含着许多交易信息。

    33.链

    链,在区块链里面是一个比喻的说法。链条关系是一种很稳固的关系,往往表示前后关系十分紧密。在区块链里每个区块都是前后连接的。

    区块链的字面意思是:由包含信息的区块从后向前有序链接起来的数据结构。

    不过,看了这句话,往往和没看过是一个效果。废话一句

    区块链说起来是一个链条,但整个的区块链网络,并不是一个首尾相连的环形链条,而是一条断开的链条。

    为了更好的理解区块链,我们可以把区块链看成是一根垂直的链条。

    最底部的区块,称作是创世区块。

    区块链里面的高度,指的就是区块与创世区块之间的距离;顶部或者顶端,表示是最新加入到区块链的区块,也就是离创世区块最远的区块。

    你还可以把垂直的区块链类比成一个玻璃杯里面逐个叠加的冰块。

    像下图这样:

    最少必要知识——《精通比特币》

    这样就更容易理解所谓的区块链高度了。其实,这个结构,就是编程领域常见的一种数据结构:栈。

    有兴趣的朋友可以了解一下栈的特点。

    上面,说过SPV的验证方式,看的是区块所在的深度。

    其实,就是从垂直的角度来看,这个区块在从高到低的顺序上有多少个区块叠加在自己身上。只要自己的深度,超过6个(也就是在自己的上面叠加了6个区块),就可以说明自己的所带的交易信息是验证通过的。

    “从上往下看,超过六块后,区块在区块链中的位置越深,被改变的可能性就越小。在100个区块以后,区块链已经足够稳定,这时Coinbase交易(包含新挖出的比特币的交易)可以被支付。几千个区块(一个月)后的区块链将变成确定的历史,永远不会改变。”

    当然,严谨一点,应该说,几乎不可能被改变了。

    **34. 区块结构 **

    单个区块的具体结构,也就是单个账本的内部结构。

    单个区块是有两个部分组成的:一个是区块头,一个是区块主体。

    区块头里面由三组元数据组成:父区块的哈希值、挖矿竞争相关数据、merkle 树根(所有交易信息的数据结构)。

    后面这三个元数据会有具体的应用。

    35.区块头标识符

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

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

    相当于是每个区块的唯一的:身份证号码。

    通过SHA256 加密算法 对区块头里面的信息进行计算,就可以得到一个区块头的唯一哈希值。

    整个比特币网络里面的区块,都有自己唯一的哈希值。这个哈希值,自己的区块是没有存储的。整个网络会有专门的地方存储。

    就好像,你虽然办了身份证,但是身份证信息是放在派出所保管的。

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

    相当于区块所住的楼层高度。(如果你还记得上面那个玻璃杯结构的话)

    这个高度,在前面区块链的定义里面已经讲过。

    高度,指的就是区块从下到上的高度,这个高度也是可以来确定区块位置的。

    但是与区块头哈希值不同是,区块的高度,不是一个区块的唯一标识符。因为,存在区块链分叉。(后面会有详细解释)说是区块链分叉,大家肯定听不懂。

    你可以这样理解:

    “两个或两个以上的区块可能有相同的区块高度,在区块链里争夺同一位置。”

    在整个区块链网络里面,每个矿工都在产生自己的区块。在同一时刻,只能有一个区块获胜,最后被加入到区块链中。

    所以,在区块链的顶部位置,在某个时刻,可能有多个区块拥有完全相同的区块高度。此时,即使你知道区块的高度,但是就是无法确定到底具体是哪个区块。

    所以说,高度不是区块的唯一标识。

    你可以这样理解:

    《军师联盟》里面,曹操的几个儿子都想当太子,就一定要争取太子那个位置。你虽然知道,太子是一人之上,万人之下的位置。但你就是无法确定,到底太子是曹丕还是曹植?

    36.区块的连接

    前面说到过,区块链有两个部分:区块 + 链。

    链指的就是区块之间的联系。每一个区块的头部区块里,会存储自己的“父区块“的区块头哈希值。

    (再次提醒,区块不会存储自己的哈希值,存储的是自己父亲的哈希值。)

    父区块指的是,当前区块的前一个区块。从垂直的角度来看,就是压在自己下面的最近的一个区块。

    比如,当前区块是第3500个区块,那么他的父区块,就是第3499个区块。

    以此类推,第2个区块的父区块就是创世区块,也就是第一个区块。

    这样的机制,使得每个区块都能根据自己父区块的唯一标识符,一路查找到创世区块。

    这样就形成了一个从不间断的链条结构。

    7.5 Merkle 树

    最少必要知识——《精通比特币》

    merkle 树,是一种特定的数据结构。

    这个结构主要是用来表示每个区块里面的所有交易记录的。这个树存在的意义,是为了快速验证交易是否存在。这里面涉及到二叉树的算法,不是太好讲清楚。大家可以简单理解成是一种提高计算效率的数学公式即可。

    markle 树形结构的应用,使得验证一条交易是否存在的时间复杂度大大降低。

    “依表可得,当区块大小由16笔交易(4KB)急剧增加至65,535笔交易(16MB)时,为证明交易存在的Merkle路径长度增长极其缓慢,仅仅从128字节到512字节”

    这样的方式,使得我们前面所说的 SPV (简单支付验证)有了可能。

    “SPV节点不保存所有交易也不会下载整个区块,仅仅保存区块头。它们使用认证路径或者Merkle路径来验证交易存在于区块中,而不必下载区块中所有交易。”

    这样,就可以做到节点存储最少的信息,但是依然可以拥有整个区块链的连接关系。

    “战友”,看到你不扫一下吗?


    最少必要知识——《精通比特币》

    相关文章

      网友评论

        本文标题:最少必要知识——《精通比特币》

        本文链接:https://www.haomeiwen.com/subject/yrgskxtx.html