首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏算法协议

    Golang实现默克尔(merkle tree)

    什么是默克尔??默克尔是一种哈希二叉,1979年由RalphMerkle发明。哈希可以用来验证任何一种在计算机中和计算机之间存储、处理和传输的数据。 简单来说,哈希默克尔)中,每个节点都标有一个数据块的加密哈希值。 因此,在区块系统中,区块头只需要封装默克尔根(也就是Hash Root),通过对默克尔根的比对,从而验证区块交易数据是否一致。 极大的提升了数据校验的效率。 Golang实现默克尔完整代码已发布至 https://github.com/wk331100/MerkleTree,可使用go get github.com/wk331100/MerkleTree = nil {return nil, err}mk.Root = rootmk.Leaves = leavesreturn mk, nil}// VerifyData 验证数据是否在默克尔中func

    1.8K90编辑于 2022-10-19
  • 来自专栏一猿小讲

    研发人员一定要心中有“

    区块中的 ---- 体会一下:区块上交易的篡改,会给区块带来什么影响? ? 如图是区块中的一个区块,里面存放了一批已经完成的交易信息,为了方便处理,区块的交易信息组织成 Merkle 的形式,区块的块头存储了前一区块的哈希值。 如上图所示,交易被哈希进默克尔,只有根节点被纳入到区块的哈希值。那么老的区块可通过剪除树枝的方式被压缩,树枝内部的哈希不需要被保存,进而可以节省磁盘空间而又不破坏区块的哈希值(堪称设计完美)。 其实比特币的以上种种设计,背后都离不开默克尔,那默克尔到底是什么呢? 02. -> MySQL 底层用到的 --> 区块中的,这样一条线来分享我心中的,但是年底啦,总结、规划等事情太多了,时间不够用啊,希望后面陆陆续续给大家补上

    56630发布于 2019-12-31
  • 来自专栏深蓝居

    比特币与以太坊的区块结构设计差异:从默克尔到全局状态的进化

    区块技术中,数据结构的核心目标是高效验证数据的完整性与安全性,同时兼顾系统的可扩展性。 比特币和以太坊作为两大主流公,在区块结构设计上存在显著差异:比特币的区块头仅包含一棵交易默克尔(Merkle Tree),而以太坊则引入了交易、状态和收据三棵独立的数据结构。 因此,比特币的区块设计只需关注交易的完整性验证。 1.2 默克尔的角色 比特币的区块体包含所有交易,通过默克尔将这些交易归纳为一个Merkle Root存入区块头。 默克尔的作用体现在三个方面: 快速验证:轻节点(如SPV钱包)仅需区块头和交易路径即可验证某笔交易是否被包含在区块中,复杂度仅为 (O(log n))。 以太坊:支持智能合约,需全局状态保障状态一致性,收据支持复杂查询,交易维持区块独立性。 未来,随着区块技术的发展,更多创新结构(如分片状态、零知识证明)可能进一步优化这一平衡。

    79310编辑于 2025-02-11
  • 来自专栏深蓝居

    比特币中MerkleTree默克尔的构造

    有点比特币基础的应该都知道,在一个区块区块头中有一个字段叫RootHash,这个根哈希是该区块中所有交易构建默克尔之后计算的树根哈希。 一、3个交易时 如果只有3个交易Tx1,Tx2,Tx3,那么在构造默克尔的时候,只需要把最后的那个Tx3和自己再算相加,计算Hash33即可。 而是在计算的过程中遇到单个Hash的时候进行重复,也就是对H56就行重复,所以实际上是把Tx5和Tx6进行了填充,如图: 总之在计算默克尔的根哈希时,都是简单的从下到上层层推进,每一层在算的时候如果下面的哈希是奇数 同理在计算6个交易的默克尔时,算H5656时,因为下面只有一个H56,所以复制了一份H56。对于更大量的交易数的时候,处理逻辑都是这样的。

    1.2K11编辑于 2022-06-16
  • 来自专栏区块链大本营

    在以太坊上安装 “炸弹”

    攻击者可以利用这个 bug 给以太坊区块设置陷阱、任意触发硬分叉。 同步 当你想运行一个以太坊节点的时候,首先必须同步上整个网络,即,下载和计算构建最新区块时刻的区块状态所需的所有数据。 因此,Geth 提供了一个模式:在近期的某个区块(称为 “pivot 区块”)之前的所有数据,都用更快的方法来同步,只有 pivot 区块之后的区块,才使用更慢的完全同步算法。 在快速同步模式中,Geth 会下载区块,但仅随机选取一些区块来验证工作量证明,而不是每个区块都验证;而且,它也将不再自己执行事务,而是从网络中的其它节点处直接下载状态,以此获得最终的区块状态。 默克尔帕特里夏 默克尔帕特里夏(MPT)是 Geth客户端中的一种关键数据结构,它是默克尔和帕特里夏两者的结合。 简而言之,帕特里夏会基于数据的前缀将数据存到一个树状结构中。 状态 既然我们已经知道默克尔帕特里夏是如何运作的了,我们可以开始探究什么是全局状态区块的绝大部分数据都存储在全局状态中。

    81420编辑于 2023-03-31
  • 来自专栏MyBlog-Karos

    基于Golang在单机下创建一个区块

    基于Golang在单机下创建一个区块 前端时间wld很火,这段时间meme币也如火如荼,所以我打算看看区块到底是什么。 区块定义 区块的数据结构 废话不多说,区块,其实是由区块头、区块节点组成 区块节点中,又包括上一个区块的地址、Nonce、时间戳、区块信息等。 这里说说区块信息。 每一个区块的用处,都是用来存储交易信息的,但是一个区块只存储一个信息特别站内存,那么有没有办法存放多比交易?区块链套链表数组?理论可以,但是有可能某个数组中,会被修改,无法校验。 } 这个结构体中,记录了一系列的区块指针数组,当前区块的版本号,对于TreeSize,具体的作用是用于表示该区块中,默克尔的最大大小(为了存储大量数据以及便于校验)。 LocalTreeSize int64 `json:"LocalTreeSize,omitempty"` } 默克尔 先来说说默克尔的数据结构是什么样的,为什么能够快速进行区块的校验

    63730编辑于 2024-03-16
  • 来自专栏申龙斌的程序人生

    秒懂Merkle Tree 与SPV

    这篇文章对于刚刚接触区块的读者有点难,适合有一定程序背景知识的朋友阅读,普通用户需要了解SPV(简易支付验证)的概念,知道默克尔的基本原理也有助于理解轻钱包的概念。 Merkle tree(默克尔)是一种数据结构,通常是一个二叉(也有可能是多叉),它以特定的方式逐层向上计算,直到顶部。Merkle tree最为常见和最简单的形成是二叉默克尔。 ? 然后相邻的两个哈希值相加之后,再进行哈希计算,形成它的父节点,以次类推,一直到根节点,形成默克尔。 根节点的哈希值就是比特币单独一个区块的哈希值。 支付验证的过程很简单,只是判断这笔支付交易是否得到了区块节点共识验证,并得到了多少的确认数即可。 1)首先计算待验证支付的交易哈希值。 2)节点从区块网络上获取并存储最长的所有区块到本地。 总的来说,Merkle tree 在区块的应用实现了简单快速验证的功能。 --- END ---

    2.4K60发布于 2018-03-06
  • 来自专栏孟永辉

    区块,「回归」区块

    即使在这样一个对于区块的关注业已临近冰点的年代里,我们依然无法抵消区块的发展业已成熟和完备的现实。 是的,区块正在告别以往的狂热与浮躁,进入到了一个真正符合自身特质的发展阶段里。 二 回顾以往的区块,我们仅仅只是以过往的方式和角度来看待区块,更为确切地说,它和互联网之间并不存在太多区别。用区块收割流量,用区块取悦资本,几乎成为了主流的模式。 不得不说,这样一种做法,的确让人们较为快速地认识到了区块,甚至让人们看到了区块的魔力。然而,如果仅仅只是以互联网的视角来看待区块,而没有真正找到一条符合区块的正确的发展模式。 换句话说,区块的真正作用的发挥,并不仅仅只是依靠区块来呈现的,而是需要借助它所助力和支撑的技术、模式来实现的。简单来讲,区块区块,但区块的外在表现,却并不是区块。 只有真正做区块能做的,只有真正扮演区块能扮演的,才是保证区块可以真正长久发展的关键所在。 结语 当区块不再聒噪,它才算是真正进入到了一个符合自身特质的发展阶段里。这才是区块应当有的样子。

    37K40编辑于 2023-03-04
  • 来自专栏犀牛饲养员的技术笔记

    以太坊虚拟机EVM究竟是个啥

    大部分了解以太坊,会简单的认为它是跟比特币区块一样的一个分布式账本,可以交易,有自己的货币,余额等。这个理解没错,但是以太坊不仅仅是这样,它还支持一种更强大的功能叫智能合约。 它可以根据预定义的一组规则在不同的区块之间进行更改,并且可以执行任意的机器代码。在区块中更改状态的具体规则由 EVM 定义。 在以太坊中,状态其实是一个叫默克尔的数据结构。我在几年前写过一篇文章专门讲默克尔,如下: Merkle Tree与区块 我这里再简单总结两句。 在默克尔中,由叶子节点保存区块数据的哈希,而由非叶子节点保存其子节点的哈希。这样一个数据结构有两条很重要的特点: 判断两个默克尔数是否相同,只需要判断根节点的哈希值即可。 可以快速的判断数据是否存在于默克尔中。 以太坊有个概念叫世界状态,它的数据结构就是默克尔。世界状态里保存着账户的映射关系,随着交易的进行这些状态会不断的变化。

    2K20编辑于 2022-05-31
  • 来自专栏用户7358413的专栏

    什么是比特币默克尔化抽象语法?它有什么用?

    在当前的比特币协议中,上述所有的数据都必须添加到区块中,在 Alice 的比特币花费的时候,也包括在特定的花费行为中完全无关的脚本部分,也要曝光。 MAST 旨在改善这些情况,办法就是移除在区块上直接包含未使用的脚本部分的需要。 MAST 初始构想 MAST 1 背后的观念来自于两种久已存在的概念, 抽象语义默克尔。 举个例子,比特币的简易支付验证钱包(SPV wallet)就使用默克尔来验证某笔交易是否存在于某个区块中,这样无需下载完整的区块,可以节省带宽。 你同样可以猜测存在其它的花费条件,但你没法在区块上确证这一点。 保证未使用的财产条件不曝光在某些时候非常有用,比如某些商人可能希望自己的智能合约尽可能保密,不要被潜在的竞争对手看到。 因为所有条件都是公开的,那么任何人都可以跟踪 Alice 的花费行为,只需在区块上观察这个模板被使用的情形即可,这样 Alice 的隐私就荡然无存。

    1.2K20发布于 2021-09-02
  • 来自专栏深蓝居

    去中心化数字身份DID简介——三、用户属性的选择性披露

    使用默克尔的目的是为了能够将一个区块中的所有交易形成一个短小的指纹(默克尔根,哈希值),并将这个指纹放到区块头,任何对交易的篡改都会导致指纹变化。 而我们使用默克尔而不是直接将区块中所有的交易直接算哈希的原因是因为我们希望能够进行快速的简单支付验证(SPV)。 我们以4个交易组成的默克尔为例,我们要验证Data2是否被包含在区块中,只需要给出: 要验证的原始数据:Data2 要验证的数据所在的位置索引:1 (索引以0开始,所以Data2的索引是1) 验证路径 0x4.验证VP 商家在收到用户提交的VP后,需要进行逐步的验证,主要包括以下步骤: 1.根据小明的DID从区块中获取小明的DID文档,从中获得公钥,验证VP签名真实有效。 2.根据VC中的issuer,从区块中获得公安机关的DID文档,从文档中获得公钥,另外也验证该DID是一个可信的DID。 3.根据公安部门的公钥,验证默克尔根的签名是否正确。

    2.2K31编辑于 2022-06-16
  • 来自专栏深入浅出区块链技术

    使用默克尔(Merkle)实现NFT白名单

    译文出自:登翻译计划[1] 译者:翻译小组[2] 校对:Tiny 熊[3] 简介 在我们今天所知道和喜爱的区块出现之前,默克尔一直是密码学和计算机科学领域的一个方面。 如今,我们开始慢慢看到它们在上更频繁地被用于数据验证的目的。 什么是 Merkle 默克尔是一种树状结构,树上的每个节点都由一个值表示,这个值是一些加密哈希函数的结果。 衍生出叶子节点和默克尔对象 对白名单上的所有地址进行了哈希,从而获得了我们的叶子节点,现在就可以创建 Merkle 对象。 临别赠言 我们已经学会了如何使用默克尔实现白名单,这是一个相对简单明了的方法,展示了在 NFT 项目中使用白名单生成默克尔,实现只有白名单中的指定地址才能申领代币。

    1.5K30编辑于 2022-11-07
  • 来自专栏ASMB

    ASMB白皮书

    区块哈希,哈希是默克尔的根,默克尔的key 是高度+分片,的value是RLP编码的区块内容,最新的分片的区块哈希包含该区块地址空间内的所有区块,也就是说通过区块哈希,可以查找该分片区间内高度小于等于该区块高度的所有区块 账户状态,同以太坊一样账户的状态是一个默克尔,账户状态包括,余额、投票信息、凭据哈希、和其他信息。 交易凭据,每个账户都有一个默克尔用来保存凭据,的key是 消息发生的时间+消息哈希值,的value是 消息状态+消息RLP编码内容,特别方便按照时间查询账户下面的消息情况。 区块存储,区块默克尔序列化时会直接存储在ipfs网络上,也就是说存储是去中心化,只有要足够多的节点存储,任何人都能随时从ipfs网络上请求区块数据。 2022年中,在创始人不断的努力下,终于完成ASMB核心网状区块的开发,以及具备了基本的区块以及钱包功能。未来2022年9月份启动区块平台公测,同时附带活动(彩蛋1),活动数据将会保留到公

    65720编辑于 2022-08-21
  • 来自专栏友弟技术工作室

    区块入门总结区块

    image 解决拜占庭将军问题 如何让众多完全平等的节点,针对对某一个状态达成共识,这就是拜占庭问题 数字签名 最长机制 POW机制 在区块中,如何保证区块是正确的。 比特币与区块关系 比特币是区块的应用 区块是协议 区块由比特币的底层支撑系统 区块是从比特币抽离出来的概念,由比特币提出的概念 比特币的技术 hash算法 非对称加密 RSA 椭圆曲线算法 > A(地址) zcash (门罗币) 混币 匿名 P2P网络(用于广播交易,同步脚本) 点对点技术,无中心服务器,依靠用户群交换信息的互联网体系 共享资源 特点: 耐攻击、高容错、地位平等 默克尔 Merkle Tree, hash Tree 二叉 节点只保存hash值,用于校验数据 比特币相关参数 区块大小上限 1M 总计 2100万 2140年挖完 每10分钟出一个区块,通过难度值调整实现 (image-7a014a-1537891044838)] 数据层 区块数据 链式结构 数字签名 哈希函数 Merkel 非对称加密 网络层 p2p网络 传播机制 验证机制

    62.2K21发布于 2018-09-29
  • 来自专栏伟大程序猿的诞生

    初识区块区块01】

    最近研究了一段时间的区块,准备写个系列文章,主要是从技术方面切入,本人也是边学习边总结,欢迎大家关注“伟大程序猿的诞生”,共同交流成长。 区块是什么? 1、区块概念? 定义:区块是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块系统中实现不同节点之间建立信任、获取权益的数学算法。 白话:我们可以把区块理解为一个公有账本,每个人都可以进行记账,同时系统会将写好的内容记录并发给所有人进行备份 2、区块优点 1、去中心化 2、开放性 3、自治性 4、信息不可篡改 区块1.0/2.0/3.0对比 区块的进化方式是从1.0到2.0再到3.0: 区块1.0:是以比特币为代表的数字货币应用,其场景包括支付、流通等货币职能。 区块3.0:则超出金融领域,为各种行业提供去中心化解决方案。

    30.7K21发布于 2019-01-21
  • 来自专栏区块链大本营

    干货 | 了解 Geth 客户端:快照加速机制

    这种数据结构其实有一个路人皆知的名字,就是 “默克尔”。 但还没完,这种办法在计算复杂性上还是有所欠缺。 这种数据结构就叫 “帕特里夏”。 把上面两种办法合在一起 —— 帕特里夏的树状分层和默克尔的哈希算法 —— 就是所谓的 “默克尔-帕特里夏”,也是实践中用于代表以太坊状态的数据结构。 当节点在同步区块的时候,同步者会向远程节点请求状态,被请求者会将数据挖掘出来并通过网络传播给同步者。 但是,哪怕有微小的区块重组(即便只有一个区块),快照机制就崩溃了,因为根本没有设计撤销操作。对扁平数据表示模式来说,持久化写入是单向的操作。 因为内存内部的 diff 层组成了一棵,所以 128 个区块以内的重组只需取出属于父块的 diff 层,然后就此开始构建即可。

    1.7K10编辑于 2023-03-31
  • 来自专栏憧憬博客分享

    区块技术原理

    通过哈希构建默克尔,实现内容改变的快速检测 在区块默克尔就是当前区块所有交易信息的一个哈希值。但是这个哈希值并不是直接将所有交易内容计算得到的哈希,而是一个 哈希二叉。 然后进行两两分组,对这两个哈希值再计算得到一个新的哈希值,两个旧的哈希值就作为新哈希值的叶子节点,如果哈希值数量为单数,则对最后一哈希值再次计算哈希值即可;然后重复上述计算,直至最后只剩一个哈希值,作为默克尔的根 在区块中,我们只需要保留对自己有用的交易信息,删除或者在其他设备备份其余交易信息。如果需要验证交易内容,只需验证默克尔即可。 默克尔在生活中其他领域应用也非常广泛。例如 BT下载 ,数据一般会分成很多个小块,以保证快速下载。在下载前,先下载该文件的一个默克尔,下载完成后,重新生成默克尔进行对比校验。 若校验不通过,可根据默克尔快速定位损坏的数据块,重新下载即可。 [图 3] 数字签名 在密码学领域,一套数字签名算法一般包含签名和验签两种运算,数据经过签名后,非常容易验证完整性,并且不可抵赖。

    8.6K50发布于 2021-06-24
  • 来自专栏网络安全攻防

    区块数据结构

    本文将介绍区块的数据结构,帮助读者更好地理解区块的运作原理,通过本文的学习,读者将能够更好地理解区块的本质并为后续的区块开发及应用打下坚实的基础 区块结构 区块是一种记录交易的数据结构,每个区块区块头和区块主体组成 默克尔(Merkle Tree)是一种基于哈希算法的二叉树结构,常用于保证数据的完整性和验证数据的真实性,在区块技术中默克尔被广泛应用于保证区块中交易数据的完整性和安全性,默克尔采用了自底向上的计算方式将相邻的数据进行哈希计算得到哈希值后再将相邻的哈希值进行二两配对 ,以太坊中交易数据被组织成一颗默克尔,每个叶子节点都是一个交易的哈希值,每个非叶子节点都是其子节点哈希值的哈希值,这样只要有任何一个交易发生了改变就会导致整个默克尔的根哈希值发生改变,从而保证了交易信息的完整性和安全性 ,下面是以太坊中默克尔的具体实现示例代码 package main import ( "crypto/sha256" "encoding/hex" "fmt" ) // 默克尔树节点结构体 node.Data = sha256.Sum256(hashData)[:] } return node } // 创建默克尔 func newMerkleTree(data [][]byte

    1.5K70编辑于 2023-08-10
  • 来自专栏用户8119822的专栏

    区块科普:区块都有哪些

    比特币是区块中的一个重要概念,它本质上是一个去中心化的数据库,是一串用密码学组成的数据块,每个数据块中含有比特币网络交易的信息,用于验证交易信息的真实性(或防伪)和生成下一个区块区块 区块的广义:区块技术是利用区块数据来验证和存储数据,使用分布式节点共识算法来生成和更新数据、使用密码学的方式来保证数据传输的安全性、使用智能合约来编程和操作数据的一种全新的分布式基础架构的计算方式 区块的狭义:区块技术是一种按照时间顺序将数据区块使用顺序相连的方式而组合成的一种链式数据结构的分布式账本。 区块中都有哪些区块中都有哪些? 根据对区块市场的深度调研,我们可以根据市场的应用范围我们可以将分为;“公(公有区块)”、“私(私有区块)”、“联盟(联盟区块)”三种,下面带领大家深度解析以上说的三种: 1、公是指任何人都可以读取 目前大多数都使用以太坊作为公基础,以太坊允许任何人在中建立和使用通过区块技术运行的去中心化应用,以太坊是可编辑的公,允许用户按照自己的意愿创建复杂的操作,可以作为多种类型去中心化区块应用的平台

    46.5K10发布于 2021-01-23
  • 来自专栏码农沉思录

    揭秘区块的核心技术之「哈希与加密算法 」

    那么今天我们来详细的聊一聊密码学,看一看密码学技术是如何在区块中应用的。 首先,我们需知道区块中用到的密码学算法有哪些? 其实就两大类: 哈希算法 非对称加密算法 区块中的哈希算法 哈希算法是区块中用的最多的一种算法,它被广泛的使用在构建区块和确认交易的完整性上。 Merkle tree 被称为 默克尔,它也是哈希算法的一个重要应用。 它其实是一个用哈希指针建立的二叉或多叉。 Merkle tree 如图: ? 其的顶端叫做 默克尔根(Merkle Root),Merkle Root 也是一个hash值,它是怎么计算出来的呢? 在比特币和以太坊中都是使用的默克尔树结构,但是以太坊为了实现更多复杂的功能,所以有三个默克尔

    2.5K20发布于 2019-12-09
领券