难度的调整

是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统的公式自动调整难度,这个公式是由最新2016个区块的花要时长与期望时长(期望时长为20160分钟,即两周,是按每10分钟一个区块的产生速率计算出的总时长 )比较得出的,根据实际时长与期望时长的比值, 进行相应调整(或变难或变易)。即如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度公式总结为:

■新难度值=当前难度值x ( 20160分钟/最近的2016个区块的实际出块时间)

■next difficulty = previous difficulty* (2 weeks) /(time to mine last 2016 blocks)

■注: 2016数字,既不是1024,也不是2048,也不是2100

不可能三角:

最多只能满足其中两项:

去中心化、安全和高性能构成了区块链的“不可能三角”,在设计中无法将三个特性同时达成,只能符合其中两个。

去中心化是拥有大量参与区块生产和验证的节点,一般节点的数量越多,去中心化程度越高。

安全性是获得网络控制权需要花费的成本,通常在共识机制的设计中锚定现实世界的资产,例如工作量证明机制(PoW)锚定的是算力。

性能就是每秒处理交易的笔数(TPS)。造成区块链性能低下的主要原因是每笔交易都要在所有节点上达成一致。

比特币的区块形成过程

在当前区块加入区块链后,所有矿工就立即开始下一个区块的生成工作:

1. 把在本地内存中的交易信息记录到区块主体中

2. 在区块主体中生成此区块中所有交易信息的Merkle树,把Merkle树根的值保存在区块头中

3. 把上一个刚刚生成的区块的区块头的数据通过SHA256算法生成一 个哈希值填入到当前区块的父哈希值中

4.把当前时间保存在时间截字段中(版上默时难随)

5. 难度值字段会根据之前一 段时间区块的平均生成时间进行调整以应对整个网络不断变化的整体计算总量,如果计算总量增长了,则系统会调高教学题的难度值 .使得预期完成下一个区块的时间依然在一定时间内

■当在挖矿过程中,发现别的节点新发布了 一个区块,那么应该停止挖矿 , 重新从UTXO中取出一系列合法交易组成候选区块,在刚发布的这个区块后面开始挖矿

UTXO:

UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。

UTXO:未使用的交易输出,比特币核心概念之一参考链接:UTXO:未使用的交易输出,比特币核心概念之一

■因为一方面这个区块中的交易可能和网刚在挖的那个区块有面复,另一个本质的原因就是修选区块的块头有指向前一个区块的哈希指针,因为最新的区块已经变了这个哈希指针也要跟着改变

基于此,提问:这样是不是之前的工作都白费了而很可惜?

答:不可惜,因为挖矿过程的无记忆性,无论是在刚刚的区块上继续挖,还是新组装一个区块继续挖,成功的概论是一样的。

比特币的区块体:

■这些交易以什么样的数据格式/数据结构存储呢?

■区块链中的Merkle树将会对海笔交易进行数字签名,可以保证每笔交易都不可伪造 ,且没有重贸交易。所有的交易将通过Markle树的Hash过程产生一 个唯的Merkle根值计入区块头

■Merkle根/Master Hash/Top Hash/RootHash

■Merklet将相邻的两个交易数据的两个哈希值组成一一个字符串,再对这个字符串进行哈希,得到上层父节点的哈希值

■这些数据放在 levelDB数据库中

Merkle树

■在一个Merkle树里, 数据块是两两组的,每个块的哈希值是储存在上一级节点的。而上一节点又两两一组,其哈希值储存在更上- -级的节点。这样一直持续到触及根节点

■特点:叶子节点上的值通常为交易数据块的哈希值,而非叶子节点上的值是该节点的所有子节点的组合结果的哈希值,这类非叶子节点的哈希被称为路径哈希值

■只需记住树开头的哈希指针,就有能力去管理列表中任意一点的哈希指针,能判断确保数据有没有被篡改过,因为如果有攻击者修改了树下面的一些数据块,那么这将导致高级的哈希指针不会再匹配。就算他继续修改更高级的块,但是数据的改变已经影响到了他无法修改的树的最顶端,因为我们已经保存好了顶端的数据。因此,任何试图修改任意数据的行为都将被检查到,而我们只需记住顶端的哈希指针

隶属证明(成员证明 Proof of membership)

■Merkle树的另外一个优点。允许简洁的成员证明

■即想要证明一个确切的数据块是否Merkle树中的一-员?

■通常,只记住了数根,之后需要向我们展示这个区块和通向数根沿途的所有数据块。就可以暂时忽略树的其他部分,沿途的数据块就已经足以让我们验证到数根

■如果在树上有n个节点,那么就只有log(0)个块需要被展示,因为每个步骤都只需要计算下一级块的哈希,所以这大概只需要log(n)次去证明它.即定位的时间复杂度为0log(m)

■所以即使这个Merkdle树包含了非常多的块依旧可以在个较短的时间内证明一个成员块

Merkle Proof默克尔证明

■对于 SPV(简化支付验证,Simplified Payment Verification )轻钱包而言,怎么知道一个交易是否真实的呢?

■SPV拿到一个交易信息之后(比如接收到一笔钱),并不能确认这个交易是否合法 ,因此要对这个交易的输入进行验证。但是它只拿到了单个交易的信息,而没有本地的完整区块链数据,因此,SPV要拿着这个交易的信息向网络发起查询请求,这个请求被称为merkle block message

■当其他有完整区块链数据的客户端收到这个请求之后,利用传过来的交易信息在自己的区块链数据库中进行查询,并把验证路径返回给请求源,SPV 拿到验证路径之后,再做-次merke校验.确认无误之后,就认为这个交易是可信的

区块链网络中,节点一般分为:

全节点
    轻节点
    SPV节点

SPV与轻节点

不同点:
    SPV节点: 目的是验证一笔交易是否上链、是否得到多个确认。
    轻节点:节点本地保存与其自身相关的交易数据,目的不仅仅是验证交易,还有管理节点自身的资产收入、支付等信息。

共同点:
    SPV节点和轻节点都无需在本地保存全部数据

区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明相关推荐

  1. 区块链学习笔记19——ETH难度调整

    区块链学习笔记19--ETH难度调整 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 前面学过,比特 ...

  2. 区块链学习笔记4——BTC实现

    区块链学习笔记4--BTC实现 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 UTXO 区块链是一 ...

  3. 区块链学习笔记23——ETH反思

    区块链学习笔记23--ETH反思 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约真的智能吗 ...

  4. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

  5. 区块链学习笔记21——ETH智能合约

    区块链学习笔记21--ETH智能合约 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约简介 ...

  6. 区块链学习笔记16——ETH交易树和收据树

    区块链学习笔记16--ETH交易树和收据树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 交易树和 ...

  7. 区块链学习笔记(一)——区块链和搓麻是一样一样的

    区块链学习笔记(一)--区块链和搓麻是一样一样的 新的开始 一个故事 要点 总结概念 几个搞笑的解释(真实性待查) 新的开始 你好! 这是我的第一篇学习笔记,想来想去就从近几年挺火的区块链开始吧,大多 ...

  8. 区块链学习笔记(三)——从商鞅变法谈“共识机制”

    区块链学习笔记(三)--从商鞅变法谈"共识机制" 前言 一.商鞅变法的故事 总结一下 二.共识机制 1)什么是共识机制 2)要点 总结 前言 区块链健康运行的灵魂是"共识 ...

  9. 区块链学习笔记2——BTC中的数据结构

    区块链学习笔记2--BTC中的数据结构 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 本文主要介绍 ...

最新文章

  1. 关于学习数据库的一点总结
  2. KNN 最近邻算法(K近邻)
  3. 架构之道(4) - 最後的最後,让大家都知道自己在做什麽
  4. HDU 5375 Gray code
  5. MGM Resorts和NRG Energy在美国完成最大屋顶光伏阵列的安装
  6. 2021年中国计算机视觉人才调研开启啦,诚邀各位开发者们参与~
  7. java 常量区存放 new_java常量池与对象存储
  8. upload_labs_pass17_二次渲染
  9. 【渝粤教育】广东开放大学 网络编程技术 形成性考核 (57)
  10. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】
  11. 双电容单相电机接线图解_单相电机要用电容,三相电机为何不需要?
  12. Java 新建线程时使用线程池处理
  13. 事业编考试计算机专业部分,事业单位考试计算机专业知识汇总-单选题.pdf
  14. NfcA/NfcB/NfcF/NfcV/IsoDep/Ndef/Mifare/Felica/Pboc/ISOxxxx 标签格式及标准
  15. java中object是什么_Java中的Object是什么?
  16. 5G China unicom 一般性异常处理
  17. 在Ubuntu5.1中安装NVIDIA TNT2 M64老式显卡驱动程序..
  18. Riche million espérer interroger chasse.
  19. 植物2 IOS 怎么实名认证_植物大战僵尸2未来世界22天困难怎么过关 植物阵容推荐...
  20. APP全栈工程师修炼之路(二)

热门文章

  1. java.Net.UnknownHostException异常处理的方法
  2. 初识爬虫——爬虫与HTML介绍
  3. 硕士毕业论文写不出来导致严重焦虑,怎么办?
  4. 云队友丨在注意力稀缺的时代,专注是你成败的关键筹码
  5. RabbitMQ消息队列,发送消息失败、消息持久化、消费者失败处理方法和发送消息
  6. Win10系统电脑连接打印机的设置方法
  7. MAVEN踩坑 Could not find artifact...
  8. Java版KTV预定管理系统源码
  9. PMP第七章:项目成本管理
  10. Dlib模型实现人脸识别