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

    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.9K90编辑于 2022-10-19
  • 来自专栏MavenTalk

    认识区块,认知区块——Web3

    比特币开启了区块1.0、智能合约开启区块2.0,接着无数个新生事物都宣称自己是区块3.0或4.0或更高,但至今没有看到哪个挑战者站稳了脚跟,但是热度更大的一个词——Web3,接元宇宙之后抗起新的大旗 Web3 与 Web3.0 的差别,我不纠结这些概念,目前为止也没有特别明确的概念定义,还是回到区块最终的那句话,共识决定一切。 Web3 的技术基础是区块,更强调去中心化的服务,现阶段而言更多的还是技术的发展,谈不上上层的应用,就像区块一样,发展了十多年,也只是让一小部分人知道了他的存在。 一个宏达叙事概念的出现,总要有个响亮的代号,方便传播,比如叫三叉,后面随着发展如果出现了不好的影响,人们又会取一个新名词取代它,再开启一波新的传播,没有的话,即便当初并不是那么准确也基本上会延续下去。 确权是3的一个核心概念,NFT 也将是 Web3 的宏大叙事的基础所在。

    59840编辑于 2022-11-28
  • 来自专栏一猿小讲

    研发人员一定要心中有“

    区块中的 ---- 体会一下:区块上交易的篡改,会给区块带来什么影响? ? 如图是区块中的一个区块,里面存放了一批已经完成的交易信息,为了方便处理,区块的交易信息组织成 Merkle 的形式,区块的块头存储了前一区块的哈希值。 其实比特币的以上种种设计,背后都离不开默克尔,那默克尔到底是什么呢? 02. Merkle 可以被用来快速比较大量的数据,因为当两个 Merkle 树根相同时,则意味着所代表的数据必然相同; 3. 开篇中谈到的区块场景。 03. -> MySQL 底层用到的 --> 区块中的,这样一条线来分享我心中的,但是年底啦,总结、规划等事情太多了,时间不够用啊,希望后面陆陆续续给大家补上

    64730发布于 2019-12-31
  • 来自专栏区块链大本营

    在以太坊上安装 “炸弹”

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

    89820编辑于 2023-03-31
  • 来自专栏深蓝居

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

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

    90210编辑于 2025-02-11
  • 来自专栏申龙斌的程序人生

    秒懂Merkle Tree 与SPV

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

    2.5K60发布于 2018-03-06
  • 来自专栏深蓝居

    比特币中MerkleTree默克尔的构造

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

    1.3K11编辑于 2022-06-16
  • 来自专栏MyBlog-Karos

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

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

    73630编辑于 2024-03-16
  • 来自专栏深蓝居

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

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

    2.3K31编辑于 2022-06-16
  • 来自专栏ASMB

    ASMB白皮书

    ,Web3一旦出现一定会得到所有人的拥护,所以解决区块交易速度和交易容量的问题已经迫在眉睫。 区块哈希,哈希是默克尔的根,默克尔的key 是高度+分片,的value是RLP编码的区块内容,最新的分片的区块哈希包含该区块地址空间内的所有区块,也就是说通过区块哈希,可以查找该分片区间内高度小于等于该区块高度的所有区块 账户状态,同以太坊一样账户的状态是一个默克尔,账户状态包括,余额、投票信息、凭据哈希、和其他信息。 交易凭据,每个账户都有一个默克尔用来保存凭据,的key是 消息发生的时间+消息哈希值,的value是 消息状态+消息RLP编码内容,特别方便按照时间查询账户下面的消息情况。 区块存储,区块默克尔序列化时会直接存储在ipfs网络上,也就是说存储是去中心化,只有要足够多的节点存储,任何人都能随时从ipfs网络上请求区块数据。

    70920编辑于 2022-08-21
  • 来自专栏用户7358413的专栏

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

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

    1.2K20发布于 2021-09-02
  • 来自专栏深入浅出区块链技术

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

    译文出自:登翻译计划[1] 译者:翻译小组[2] 校对:Tiny 熊[3] 简介 在我们今天所知道和喜爱的区块出现之前,默克尔一直是密码学和计算机科学领域的一个方面。 默克尔3 种类型的节点,如下所示: 叶子节点 - 叶子节点位于的最底部,它们的值是原始数据根据指定的哈希函数进行哈希的结果。一棵树上有多少个叶子节点,就有多少个需要哈希的原始数据。 图 3. Merkle 的可视化和根哈希。 现在已经得出了一个完整的 Merkle ,可以通过调用 Merkle 对象的getRoot()方法(图 3)来获得根哈希值。 临别赠言 我们已经学会了如何使用默克尔实现白名单,这是一个相对简单明了的方法,展示了在 NFT 项目中使用白名单生成默克尔,实现只有白名单中的指定地址才能申领代币。 原文:https://medium.com/@ItsCuzzo/using-merkle-trees-for-nft-whitelists-523b58ada3f9 参考资料 [1] 登翻译计划: https

    1.6K30编辑于 2022-11-07
  • 来自专栏孟永辉

    区块,「回归」区块

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

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

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

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

    2.1K20编辑于 2022-05-31
  • 来自专栏网络安全攻防

    区块数据结构

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

    1.7K70编辑于 2023-08-10
  • 来自专栏Go学习

    MerkleTree in BTC

    Merkle 是一种二叉树结构,其中每个叶子节点包含数据块的哈希值,每个非叶子节点包含其子节点哈希值的组合哈希。比特币网络中的 Merkle 在比特币区块中,每个区块包含多个交易。 Merkle 的生成示例假设一个区块包含四笔交易 T1 、T2 、T3 和 T4 。 轻客户端(SPV):简化支付验证(SPV)客户端可以通过请求区块头和所需交易的 Merkle 路径来验证交易,而不需要下载整个区块。 Merkle 路径验证假设我们要验证交易 $T3$ 是否在某个区块中:获取交易 $T3$ 的哈希 H3 。获取 $H3$ 的相邻哈希 H4 。 )以上存储为线性数组如下:[h1 h2 h3 h4 h12 h34 root]如上所示,默克尔根始终是数组中的最后一个元素。

    70210编辑于 2024-07-04
  • 来自专栏区块链大本营

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

    这种数据结构就叫 “帕特里夏”。 把上面两种办法合在一起 —— 帕特里夏的树状分层和默克尔的哈希算法 —— 就是所谓的 “默克尔-帕特里夏”,也是实践中用于代表以太坊状态的数据结构。 当节点在同步区块的时候,同步者会向远程节点请求状态,被请求者会将数据挖掘出来并通过网络传播给同步者。 但是,哪怕有微小的区块重组(即便只有一个区块),快照机制就崩溃了,因为根本没有设计撤销操作。对扁平数据表示模式来说,持久化写入是单向的操作。 而且让事情变得更糟糕的是,我们没办法访问更老的状态了(例如某些 dApp 需要 3区块以前的状态;或者 fast/snap 同步模式中要访问 64 个区块以前的状态)。 因为内存内部的 diff 层组成了一棵,所以 128 个区块以内的重组只需取出属于父块的 diff 层,然后就此开始构建即可。

    1.7K10编辑于 2023-03-31
  • 来自专栏伟大程序猿的诞生

    初识区块区块01】

    最近研究了一段时间的区块,准备写个系列文章,主要是从技术方面切入,本人也是边学习边总结,欢迎大家关注“伟大程序猿的诞生”,共同交流成长。 区块是什么? 1、区块概念? 白话:我们可以把区块理解为一个公有账本,每个人都可以进行记账,同时系统会将写好的内容记录并发给所有人进行备份 2、区块优点 1、去中心化 2、开放性 3、自治性 4、信息不可篡改 3区块缺点 1.不可撤销 2.交易账本必须公开 3.当数据越大伴随的性能问题 4.区块的延迟性 白话:A和B同时夺得了公有账本的记账权,那么到底谁的记录有效呢,那么就要看他俩之后的记录 区块1.0/2.0/3.0对比 区块的进化方式是从1.0到2.0再到3.0: 区块1.0:是以比特币为代表的数字货币应用,其场景包括支付、流通等货币职能。 可是实现:自动化采购、智能化物联网应用、供应自动化管理、虚拟资产兑换、转移、产权登记 区块的特点: 1、去中心化 2、智能合约 3、去信任 4、共识机制 5、跨互操作 6、点对点传输

    31.3K21发布于 2019-01-21
  • 来自专栏友弟技术工作室

    区块入门总结区块

    比特币与区块关系 比特币是区块的应用 区块是协议 区块由比特币的底层支撑系统 区块是从比特币抽离出来的概念,由比特币提出的概念 比特币的技术 hash算法 非对称加密 RSA 椭圆曲线算法 > A(地址) zcash (门罗币) 混币 匿名 P2P网络(用于广播交易,同步脚本) 点对点技术,无中心服务器,依靠用户群交换信息的互联网体系 共享资源 特点: 耐攻击、高容错、地位平等 默克尔 Merkle Tree, hash Tree 二叉 节点只保存hash值,用于校验数据 比特币相关参数 区块大小上限 1M 总计 2100万 2140年挖完 每10分钟出一个区块,通过难度值调整实现 (image-7a014a-1537891044838)] 数据层 区块数据 链式结构 数字签名 哈希函数 Merkel 非对称加密 网络层 p2p网络 传播机制 验证机制 R3CV IBM farbric 私有 主流项目 区块相关概念 算力 矿工 节点 挖矿 矿场 矿池 分叉 代码升级不疼痛社区意见发生分歧的结果 分叉后会得到等量的新币种,称为糖果

    63.4K21发布于 2018-09-29
  • 来自专栏码农沉思录

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

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

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