本篇文章主要给网友们分享区块链中的merkle的知识,其中更加会对区块链中的代币是什么进行更多的解释,如果能碰巧解决你现在面临的问题,记得关注本站!
区块链的三大核心技术是什么?
区块链运作区块链中的merkle的7个核心技术介绍 2018-01-15
1.区块链的链接
顾名思义区块链中的merkle,区块链即由一个个区块组成的链。每个区块分为区块头和区块体(含交易数据)两个部分。区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿难度的随机数(nonce)。前一区块的哈希值实际是上一个区块头部的哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力。
2.共识机制
区块链是伴随比特币诞生的,是比特币的基础技术架构。可以将区块链理解为一个基于互联网的去中心化记账系统。类似比特币这样的去中心化数字货币系统,要求在没有中心节点的情况下保证各个诚实节点记账的一致性,就需要区块链来完成。所以区块链技术的核心是在没有中心控制的情况下,在互相没有信任基础的个体之间就交易的合法性等达成共识的共识机制。
区块链的共识机制目前主要有4类区块链中的merkle:PoW、PoS、DPoS、分布式一致性算法。
3.解锁脚本
脚本是区块链上实现自动验证、自动执行合约的重要技术。每一笔交易的每一项输出严格意义上并不是指向一个地址,而是指向一个脚本。脚本类似一套规则,它约束着接收方怎样才能花掉这个输出上锁定的资产。
交易的合法性验证也依赖于脚本。目前它依赖于两类脚本:锁定脚本与解锁脚本。锁定脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本与锁定脚本相对应,只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交易的输入。通过脚本语言可以表达很多灵活的条件。解释脚本是通过类似我们编程领域里的“虚拟机”,它分布式运行在区块链网络里的每一个节点。
4.交易规则
区块链交易就是构成区块的基本单位,也是区块链负责记录的实际有效内容。一个区块链交易可以是一次转账,也可以是智能合约的部署等其他事务。
就比特币而言,交易即指一次支付转账。其交易规则如下:
1)交易的输入和输出不能为空。
2)对交易的每个输入,如果其对应的UTXO输出能在当前交易池中找到,则拒绝该交易。因为当前交易池是未被记录在区块链中的交易,而交易的每个输入,应该来自确认的UTXO。如果在当前交易池中找到,那就是双花交易。
3)交易中的每个输入,其对应的输出必须是UTXO。
4)每个输入的解锁脚本(unlocking )必须和相应输出的锁定脚本(locking )共同验证交易的合规性。
5.交易优先级
区块链交易的优先级由区块链协议规则决定。对于比特币而言,交易被区块包含的优先次序由交易广播到网络上的时间和交易额的大小决定。随着交易广播到网络上的时间的增长,交易的链龄增加,交易的优先级就被提高,最终会被区块包含。对于以太坊而言,交易的优先级还与交易的发布者愿意支付的交易费用有关,发布者愿意支付的交易费用越高,交易被包含进区块的优先级就越高。
6.Merkle证明
Merkle证明的原始应用是比特币系统(Bitcoin),它是由中本聪(Satoshi Nakamoto)在2009年描述并且创造的。比特币区块链使用了Merkle证明,为的是将交易存储在每一个区块中。使得交易不能被篡改,同时也容易验证交易是否包含在一个特定区块中。
7.RLP
RLP(Recursive Length Prefix,递归长度前缀编码)是Ethereum中对象序列化的一个主要编码方式,其目的是对任意嵌套的二进制数据的序列进行编码。
梅克尔树-Merkle Trees
梅克尔树是一种二叉树区块链中的merkle,能快速检查和归纳大量数据,可用于验证区块中交易记录的完整性。
梅克尔树是区块链的重要数据结构, 其作用是快速归纳和校验区块数据的存在性和完整性。一般意义上来讲,它是哈希大量聚集数据“块”的一种方式,它依赖于将这些数据“块”分裂成较小单位的数据块,每一个 bucket 块仅包含几个数据“块”,然后取每个 bucket 单位数据块再次进行哈希,重复同样的过程,直至剩余的哈希总数仅变为1。
在这颗数中,每个交易都可以单独删除,只需要保存好这笔交易的哈希值即可。这样一来,就可以极大的减小了每个区块的内存,可以存放更多的最新交易。所以在 UTXO 模型中,使用默克尔树结构,就无需担心数据的增长过大的问题了。
使用场景:
1、区块头维护交易的梅克尔树区块链中的merkle;
2、SPV 钱包通信的交易验证,存放该树。
欢迎留言讨论,有错误请指出,谢谢!
【联系我(QQ:3500229193)或者加入社群,请戳这里!】
什么是梅克尔树(Merkle)
首先,它可不是一棵梅花树,虽然名字有点像,但是此树非彼树。梅克尔树是区块头中的三巨头之一,我们要知道,区块是区块链的基本结构单元,是有包含元数据的 区块头 和包含交易数据的 区块主体 构成。而我们这棵梅花树呢,就是区块头中的一大成员。
可能你们会好奇,区块头是什么,莫非是变异的头部吗?其实很简单,顾名思义,区块头就是一个区块的前部分,相当于人类身体的头部,控制人类躯体的关键部位。区块头由三组元数据组成,一是父区哈希值;二是挖矿难度,Nonce,时间戳;三是梅克尔树根,也就是我们今天的主角,别小瞧这棵树,它能快速归纳校验区块中所有的交易数据,是不是超级优秀~
区块链利用梅克尔树的数据结构存放所有叶子节点的值,并以此为基础生成一个统一的哈希值。梅克尔树的叶子节点存储的是数据信息的哈希值,非叶子的节点存储的是对其下面所有叶子节点的组合进行哈希计算后得出的哈希值。
还有一点需要重视,就像重视我们的高考成绩一样,那就是,区块中任意一个数据的变更都会导致梅克尔树结构发生变化,在交易信息验证对比的过程中,梅克尔树结构能够大大减少数据的计算量,毕竟,我们只需验证梅克尔树结构生成的统一哈希值就可以啦。
一粒沙里看出一个世界,一朵野花里一座天堂,把无限放在你的手掌上,永恒在一刹那里收藏。 用布莱克这句话解释梅克尔树再合适不过了。
区块链记账原理
区块链是由一个个区块构成的有序列表区块链中的merkle,每一个区块都记录了一系列交易,并且每一个区块都指向前一个区块从而形成一个链条。
区块链有以下几个特征:
区块链具有不可篡改的特性,是由哈希算法保证的。
什么是哈希算法/Hash:
安全哈希算法的特点:
哈希算法的作用:
假设区块链中的merkle我们相信一个安全的哈希算法:如果H(x) = H(y),则x = y
常用的哈希算法:
比特币使用两种哈希算法:
假设这个区块有5笔交易,首先,对每一笔交易进行第一hash,也就是2次SHA-256的运算,得到5个哈希值,也就是a1、a2、a3、a4、a5,这五个哈希值也可以看做是数据,将a1和a2拼起来、a3和a4拼起来,再计算出2个哈希值b1和b2。那a5怎么办呢?答案是将a5复制一份在与a5拼起来进行哈希计算得到b3区块链中的merkle;继续将b1和b2拼起来进行哈希运算得到c1,同样的b3会被复制一份再与b3拼起来进行哈希运算得到c2;最后将c1和c2拼起来进行哈希运算得到最终的哈希值,这个哈希值就是Merkle Hash。
从Merkle Hash的计算方法可以得出结论:修改任意一笔交易,哪怕是一个字节,或者交换两个交易的顺序,都会导致Merkle Hash验证失败,也就会导致这个区块本身是无效的。所以Merkle Hash记录在头部,它的作用就是保证交易记录永远不能够被修改。
区块本身用Block Hash来标识:Block Hash是区块唯一标识。一个区块的hash并没有记录在区块头部,而是通过计算区块的hash得到的。
区块的Prev Hash记录了上一个区块的Hash,这样就可以通过Prev Hash追踪到上一个区块,由于下一个区块的Prev Hash又会指向当前区块,这样每一个区块的Prev Hash都指向上一个区块,这些区块串起来就形成了区块链。如果一个攻击者恶意攻击了某一个区块的交易记录,那么这个区块的Merkle Hash验证就不会通过,所以攻击者只能重新计算Merkle Hash,然后把区块头的Merkle Hash也修改了,但是这个区块本身的Hash已经改变,那么下一个区块指向该区块的链接也断掉了。由于比特币区块的hash必须满足一定的难度值,所以攻击者只能把后面所以区块全部重新计算,并且伪造出来,才能修改整个区块链。
修改一个区块的成本已经非常高了,如果要修改整个区块链,那么其成本非常非常的高昂。在比特币网络中,伪造区块链需要拥有超过51%的全网算力。所以比特币网络运行了6年,从来没有被攻破过。
区块链技术中区块的形成方式是什么?
重庆金窝窝分析认为区块链技术中的区块形成方式如下:
1-把在本地内存中的相关信息记录到区块主体中;
2-在区块主体中生成此区块中所有相关信息的merkle树,把merkle树根的值保存在区块头中;
3-把上一个刚刚生成的区块的区块头的数据通过SHA256算法生成一个哈希值填入到当前区块的父哈希值中;
4-把当前时间保存在时间戳字段中;
5-难度值字段会根据之前的一段时间区块的平均生成时间进行调整以应对整个网络不断变化的整体计算总量,如果计算总量增长了,则系统会调高数学题的难度值,使得预期完成下一个区块的时间依然在一定时间内。
认识MMR(Merkle Mountain Range)
merkle tree一种二叉树也是区块链中一种常见的数据结构,其特性就是树的根及中间节点主要是由其左右子树的Hash构成。Parent = H(0,1),其以密码学保证其安全性,以相同顺序插入才能计算出最终一致的树根。
而mmr(Merkle Mountain Range)是Peter Todd提出的一种Merkle tree,长相类似一组连续的山峰组成,其被设计为节点插入后就不能被修改,支持动态插入。
对于普通Merkle树对于每个新加入节点都需要重新计算merkle root,如果节点数量很大的话这个计算量会非常巨大,而mmr支持动态加入新节点并计算root。
由上图可以发现,以存储索引位置作为其坐标的二叉树,都有左子树与父节点的距离(offset)为 offset=2^Height ,兄弟节点之间的距离为 offset=2^Height - 1 ,这样就可以计算出任意节点的兄弟节点与父节点的坐标。
另外如果我们能够计算出任意节点的高度,我们就能计算出任意节点的父节点及兄弟节点的坐标了,将节点坐标从 1 开始并以 二进制 来表示。如图:
现在我们可以顺序追加节点了,我们只需要判断下一个节点的高度,如果大于当前高度则需要合并左右子树,方法如下:
由图2可以知道,MMR可能会有多个 山峰 ,而MMR的root是由最右侧的山峰依次向左合并,直到最后形成root,这个操作也被称为山峰的 拱起 操作。图2中的 root=Hash(Hash(18,17),14) 。
MMR的root是由山峰的 拱起 得到,那么最左侧的山峰一定一个完全的二叉树,节点数量为 2^Height - 1 ,由此我们可以在固定节点数量下(Count)不断尝试左侧山峰的高度,找到 2^Height - 1 Count 的最大的树,如下:
在计算出左侧山峰后,可以以此为坐标,依次计算出右侧的所有山峰,如下:
获取到所有山峰后,就可以对所有山峰,由左到右依次 拱起 ,最后得到MMR的root。如下:
构造叶子节点的 merkle proof,分三个步骤:
如下:
proof的验证,以相同的顺序重新计算Merkle Root就可以,如下:
MMR可以极大的减少merkle证明的数据量,可以大幅度的减轻存储和网络的负担,提升验证效率,目前Open timestamp 和 Grin 等项目及Fly client的论文中都使用了MMR的证明。
写到这里,本文关于区块链中的merkle和区块链中的代币是什么的介绍到此为止了,如果能碰巧解决你现在面临的问题,如果你还想更加了解这方面的信息,记得收藏关注本站。
标签: #区块链中的merkle
评论列表