• 区块链学习笔记(二)


    这段时间主要学习了区块链的共识机制,先对什么是共识机制做简单说明。

    因为区块链向要成为一个难以攻破的,公开的,不可篡改的数据记录中心,就需要尽快的,安全的传播数据,并且保证数据不可逆。而要达到这个目的,就需要用到共识机制。

    共识机制主要分为以下几种:

    一:工作量证明(Proof of work)PoW

    二:权益证明+工作量证明

    三:权益证明

    四:股份授权证明

    五:瑞波共识协议

    以下是笔者对这几种共识协议的浅略理解,希望大家多多指正~

    1.PoW共识机制;

        我们先举个例子,让大家对PoW有个基本了解:比如,我们取得大学本科证书,从小学到大学毕业,一共需要16年时间,但是验证是否有证书,只需要到学信网上一查就清楚了。我们需要很长的时间来获取证明,但是只要花很短的时间来验证证明。这个就是PoW的最直观体现。

        首先我们一起了解下SHA256算法,该算法具备如下的特点:

        a.对于任意的输入长度的字符串,运算后输出的字符串长度是一定的

        b.给定一个输出,计算出结果是高效的

        c.对于每一个输入,都有唯一的输出与之相对应。这一点在理论上是不成立的,我们使用的SHA256算法有2^256种结果,理论上只要进行2^256+1次输入,就一定会出现重复的结果,我们称之为碰撞。不过我们可以假设以下一台计算机以每秒10000次的速度进行哈希运算,要经过10^27年才能进行2^128次哈希运算!!!甚至可以这么说,人类制造的所有计算机从宇宙诞生运算到今天,发生碰撞的可能性也是极小的

        d.运算过程不可逆,即我们可以通过X得到SHA256(X),但是不能逆推出结果

        e.不存在比穷举更好的办法,使结果落在特定范围

        f.输入信息发生微小的变化,都会使输出变得面目全非

        PoW机制的基本步骤如下:

        1)节点监听全网数据记录,通过基本合法性验证的数据记录将进行暂存

        2)节点消耗自身算力尝试不同的随机数,进行指定哈希运算,并不断重复该过程直至找到合理的随机数

        3)找到合理的随机数后,生成区块信息,首先输入区块头信息,然后是数据记录信息

        4)节点对外广播出新产生的区块,其他节点验证通过后,连接至区块链中,主链长度加一,然后所有节点切换至新区块后面继续进行工作量证明和区块生产

         PoW主要体现在第二步中,节点需要不断的消耗算力,进行哈希运算,已找到期望的随机数。

         现在简单说明下PoW的原理:

        先对以下几个概念进行说明

               区块。比特币的区块由区块头和所包含的交易列表组成。区块头的大小为80字节,由4字节的版本号(version),32个字节的上个区块的哈希值(previous block hash),32字节的默克尔树根哈希(merkle root hash)(默克尔根哈希是通过默克尔交易树自叶节点到根节点生成的,默克尔交易树中包含了所有交易的哈希值),4字节的时间戳(timestamp)(当前时间),4字节的当前难度值(bits),4字节的随机数组成(nonce)。区块包含的交易列表附加在区块后面,其中的第一笔交易称为coinbase,这笔是为了让矿工获得奖励及手续费的特殊交易。

               难度值。难度值是矿工挖矿时的一个重要指标,它决定了矿工要进行多少次哈希运算才能得到一个合法的区块。比特币的区块大概每10分钟生成一个,随着时间的推移全网算力会不断增强,为了保证区块生成的速率一直是10分钟/个,需要不断调整难度值。难度值的调整是每个完整节点独立自动发生的,大概每两周调整一次,遵循如下公式:

                

    新难度值=旧难度值*(过去2016个区块产生的总时长/20160分钟(大概为两周));

                工作量证明会有一个目标值(target),这就像我们之前举得本科文凭的例子(目标值为文凭),比特币目标值的计算公式如下:

    target = 最大目标值 / 难度值
    其中最大目标值为一个恒定值:
    0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

                目标值的大小与难度值成反比,工作量证明就是要求矿工计算出来的区块哈希值必须小于目标值,即以下公式:

    SHA256(version,previous block hash,merkle root hash,timestamp,bits,nonce.....)<target
    

                实际上也就是说,需要不断的变换nonce的值,直到满足所得结果有N个前导0!!!

                结语:

                本想一次将文章前的共识算法都做一个大概介绍,后来想了想还是一次写一点,希望大家多多指正~

                我的博客地址:https://blog.csdn.net/qq_41907991



  • 相关阅读:
    可变参数宏
    指针用作传出参数时,需要二级指针
    ubuntu下配置tftp服务以及开发板中通过tftp下载文件
    calloc()函数和malloc()函数
    android 之反编译
    snprintf()函数使用方法
    android 之对话框的使用
    ubuntu su 密码
    android 发短信 调到联系人
    ubuntu 11.10 android ndk awk安装错误修改记
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854518.html
Copyright © 2020-2023  润新知