区块链学习笔记(二)

  • A+
所属分类:编程语言

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

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

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

一:工作量证明(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分钟/个,需要不断调整难度值。难度值的调整是每个完整节点独立自动发生的,大概每两周调整一次,遵循如下公式:

 

[plain] view plain copy

  1. <span style="font-size:16px;color:#ff0000;">新难度值=旧难度值*(过去2016个区块产生的总时长/20160分钟(大概为两周));</span>

 

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

[plain] view plain copy

  1. <span style="font-size:16px;color:#ff0000;">target = 最大目标值 / 难度值
  2. 其中最大目标值为一个恒定值:
  3. 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</span>

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

[plain] view plain copy

  1. <span style="font-size:16px;color:#ff0000;">SHA256(version,previous block hash,merkle root hash,timestamp,bits,nonce.....)<target
  2. </span>

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

结语:

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

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: