• 区块链基础知识入门


    一: 什么是区块链

    区块链是什么?一句话概括,它是一种特殊的分布式数据库。

    有两个功能:

    • 存储信息,任何需要保存的信息,都可以写入区块链。
    • 任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。

    分布式数据库不是新产品,但是区块链有个革命性的特点就是去中心化,其他数据库都有管理员,但是区块链没有。如果有人想对区块链添加审核,是实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局。因为无法管理,所以区块链无法被控制。

    二:区块链组成

    区块链是由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建区块。

    每个区块包含两个内容:

    • 区块头(Head):记录当前区块的特征值
    • 区块体(Body):实际数据

    区块的结构图如上图所示。详情如下:

    1)版本号(Version)

    用来标识交易版本和所参照的规则。

    2)前一区块哈希值

    也称“父区块哈希值”,这个哈希值通过对前一个区块的区块头数据进行哈希计算(SHA256算法)得出,它的意义在于:每个新挖出的区块都按秩序接在前一个区块的后面。

    3)默克尔根(Merkle Root)

    在区块主体中,所有交易信息先进行两个一组的哈希计算,这种结构叫做Merkle树(Merkle Tree),而且是一棵倒挂的树。

    如果一个区块里只有4笔交易,则默克尔树生成过程

    最后的hash值就是区块头的Merkle根。Merkle树能够快速检验交易数据的完整性,即数据是否被篡改过。因为某笔中交易中的一个数据被篡改,都会改变最终的hash。

    4)时间戳(Time)

    记录这个区块生成的时间,精确到秒。每诞生一个新的区块,就会被盖上相应的时间戳,这样就能保证整条链上的区块都按照时间顺序进行排列。

    5)难度值(Target_bits)

    挖出该区块的难度目标。每产生2016个区块,数据区块运算难度会调整一次。比如,比特币区块链网络能够自动调整挖矿的难度,让矿工每10分钟才挖出一个区块。原本需要14天才能挖完2016块区块,但不知哪个天杀的突然弄来几台算力爆表的矿机,7天就搞定了,这就意味着到预定调整期的时候,挖矿难度会增加一倍。

    使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。目标值越小,挖矿就难挖,就是新区块的hash值要小于这个目标值(案例中的14484.162361)。一个hash 32bit的话,可以知道这个hash前面部分很多位数必须是0,即要找出类似 00000000000000000000000000000001 的hash。

    6)随机数(Nonce)

    前面说过,当前区块的哈希由区块头唯一决定。如果要对同一个区块反复计算哈希,就意味着,区块头必须不停地变化,否则不可能算出不一样的哈希。区块头里面所有的特征值都是固定的,为了让区块头产生变化,区块头故意增加了一个随机项,叫做 Nonce。Nonce 是一个随机值,矿工的作用其实就是猜出 Nonce 的值,使得区块头的哈希可以小于目标值,从而能够写入区块链。Nonce 是非常难猜的,目前只能通过穷举法一个个试错。根据协议,Nonce 是一个32位的二进制值,即最大可以到21.47亿。

    三:难度系数动态调整

    采矿具有随机性,没法保证正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。他规定,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此接下来的难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此接下来的难度系数就要调低10%。难度系数越调越高(目标值越来越小),导致了采矿越来越难。

    四:区块链分叉

    即使区块链是可靠的,现在还有一个问题没有解决:如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。这时应该采纳哪一个区块呢?

    现在的规则是,新节点总是采用最长的那条区块链。如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为"六次确认")。按照10分钟一个区块计算,一小时就可以确认。

    由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链。

    总结:

    1)区块是区块链的基本组成单元。

    2)每个区块由区块头和区块主体组成,头小身大。

    为了保证数据的可靠性,区块链也有自己的代价。一是效率,数据写入区块链,最少要等待十分钟,所有节点都同步数据,则需要更多的时间;二是能耗,区块的生成需要矿工进行无数无意义的计算,这是非常耗费能源的。

    参考资料:

    http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html

    https://www.idcbest.com/idcnews/11001977.html

  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/he1m4n6a/p/9220476.html
Copyright © 2020-2023  润新知