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

这篇具有很好参考价值的文章主要介绍了区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

难度的调整

       是在每个完整节点中独立自动发生的。每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

不可能三角:


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

最多只能满足其中两项:

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

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

安全性是获得网络控制权需要花费的成本,通常在共识机制的设计中锚定现实世界的资产,例如工作量证明机制(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树

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

 

■在一个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节点和轻节点都无需在本地保存全部数据
 文章来源地址https://www.toymoban.com/news/detail-402285.html

到了这里,关于区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 科普|区块链中的Merkle Tree

    什么是Merkle Tree? - Merkle Tree也就是Merkle树,中文译名还有梅克尔树或默克尔树,因为这是一棵用哈希值搭建起来的树,树的所有节点都存储了哈希值,所以也叫哈希树,英文名为Hash Tree。默克尔树通常情况下看着是一棵倒置的树型结构,根节点在顶部,分叉向下,叶子节点

    2024年02月02日
    浏览(45)
  • 【追光者】大学即(已)将(经)毕业,四年,我的所感所想(部分)| 区块链 面试题:区块链技术中,Merkle树有什么作用?| Merkle树的构建过程

      “幸福就像你身后的影子,你追不到,但是只要你往前走,它就会一直跟着你。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅

    2024年02月06日
    浏览(40)
  • 【区块链】C语言编程实现三叉Merkle树

    1. Merkle树简介   如上图所示,Merkle 树的叶子节点为交易序列,对每一笔交易进行 Hash(SHA 256算法) 之后,然后对得到的 Hash 节点进行拼接再次进行 Hash 运算,如此递归直到递归至根节点。   如上图所示 Merkle 树的优点在于可快速验证某个区块是否存在指定交易,如要验

    2024年04月14日
    浏览(43)
  • 区块链的数据结构(二)——默克尔树(Merkle Tree)

            区块链中的另外一个数据结构是Merkle tree,在比特币中使用的就是这种结构:         可能没有听说过Merkle tree,但一定听说过binary tree(二叉树)。         Merkle tree和binary tree的区别:Merkle tree用哈希指针代替了普通的指针         每个框内的两个哈希值

    2024年02月21日
    浏览(43)
  • 竞赛python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月05日
    浏览(52)
  • 挑战杯 python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月21日
    浏览(60)
  • 竞赛保研 python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月04日
    浏览(46)
  • 【毕设教程】python区块链实现 - proof of work工作量证明共识算法

    Hi,大家好,这里是丹成学长,今天向同学们介绍如何构建一个区块链系统作为毕设,区块链的原理 🧿 选题指导, 项目分享: https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md 学长以比特币的结构向大家详解区块链的组成部分 previous hash(前

    2024年01月21日
    浏览(45)
  • 计算机竞赛python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月05日
    浏览(54)
  • 互联网加竞赛 python区块链实现 - proof of work工作量证明共识算法

    🔥 优质竞赛项目系列,今天要分享的是 python区块链实现 - proof of work工作量证明共识算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 学长以比特币的结构向大家详解区块链的组成部分 previous hash

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包