学习
实践
活动
专区
工具
TVP
写文章

II. 数据的呈现和组织,缓存和更新

MPT,形成MPT结构。 成员分散存储在底层数据库 Header和Block的主要成员变量,最终还是要存储在底层数据库中。Ethereum 选用的是LevelDB, 属于非关系型数据库,存储单元是[k,v]键值对。 由于Hasher.hash()有一个数据库接口类型的参数,这样在折叠MPT过程中,如果db不为空,就把每次计算hashNode时的哈希值和它对应的节点RLP编码值一起存进数据库里,这也正是Commit( 在MPT的查找,插入,删除中,如果遍历过程中遇到一个hashNode,首先需要从数据库里以这个哈希值为k,读取出相匹配的v,然后再将v解码恢复成fullNode或shortNode。 Key编码的设计细节,也体现出MPT整个数据结构设计的思路很完整。 4. 数据库体系 到目前为止,Ethereum系统中区块数据的呈现,组织管理已经介绍了不少,我们可以开始探讨存储部分了。

96870

一文读懂以太坊存储数据核心数据结构:MPT

结合的一种树形结构,理解 MPT 有助于我们更好的理解以太坊的数据存储。 MPT (Merkle Patricia Tree) 上面我们介绍了Merkle Tree和Patricia Tree,而MPT(Merkle Patricia Tree),顾名思义就是这两者的结合。 扩展节点 (extension):也是 [key,value] 的一个键值对,但是这里的value是其他节点的hash值,这个hash可以被用来查询数据库中的节点。 第17个是存储那些在当前结点结束了的节点(例如, 有三个 key,分别是 (abc ,abd, ab) 第17个字段储存了ab节点的值) 这里还有一些知识点需要了解的,为了将 MPT 树存储到数据库中, 同时还可以把MPT树从数据库中恢复出来,对于 Extension 和 Leaf 的节点类型做了特殊的定义:如果是一个扩展节点,那么前缀为0,这个0加在 key 前面。

1.7K72
  • 广告
    关闭

    新年·上云精选

    热卖云产品新年特惠,2核2G轻量应用服务器9元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    以太坊源码分析---go-ethereum之MPT(Merkle-Patricia Trie)

    MPT(Merkle-Patricia Trie)其实就是一个数据结构,在以太坊中用于存储用户账户的状态及其变更、交易信息、交易的收据信息。 要讲MPT,就要讲讲MPT是如何演变来的。 Trie ? Merkle Patricia Trie 那么MPT呢,是以太坊中,自定义的数据结构。综合了Merkle Tree与Patricia Trie两个的特点。 那么看源码先吧。 fullnode和shortnode为结构性节点,搞清楚这两个节点的区别,就基本上搞定了mpt的数据结构。 那么除了结构性节点,还需要数据节点。 一般为这里的key对应的数据保存在数据库中,还未加载。 trie指向root dirty用于标识trie树是否有发生变化。 那么最重要的mpt的数据结构的插入和查询就完成了。如果能够把这些弄明白的话,那么就对mpt有了个很深刻的理解了。 本文的重点是对mpt有个简单的讲解。

    1K20

    区块链存储爆炸:问题、分析与优化

    通过定期存储 MPT,状态的存储大小显著减少。据 Etherscan 数据,目前 Geth 全节点的区块链数据大小约为 1TB。 为了加速节点的启动过程,Geth 进一步提供了一种快速同步模式,可以下载最新的稳定区块的 MPT,而无需重放和维护区块之前的历史 MPT。 下载完 MPT 后,它会像全节点一样重放新区块(带有定期状态存储)。 状态存储优化 我们提出的第一个优化是使用普通的 KV 而不是 MPT。当 MPT 很大时,MPT 中的所有内部节点可能非常昂贵。而我们的优化将去掉 MPT 中的所有内部节点。 一个快照区块包含前状态哈希这一附加信息,即前一个快照区块的后状态哈希(执行交易之后的状态哈希): 非快照区块不维护状态哈希,而是具有增量哈希,其中包含该区块的所有交易事务的原始数据库操作(删除、更新)的哈希

    64630

    OEA ORM 框架中的冗余属性设计

    数据库结构如下: ? 那么,如果把它对应的供应商的名称冗余到 PurchaseOrder 表中呢? 同时,数据库结构中也多了 SupplierName 这个字段: ? 由于是刚添加的冗余属性,所以历史数据还是 Null。 所以,重点是实现冗余在数据库中的更新。这里要根据变化的情况,动态生成 SQL 去更新数据库中所有的冗余数据。经过分析,变化主要分为三种。 应用开发人员在使用时,只需要简单地声明一个属性,并把它映射到数据库就行了。 PS:冗余属性的相关代码目前还没有提交到开源服务器上,待下次更新时大家才能获取到。 我发现从一开始写数据库应用程序到现在,几年来,一直战斗在 ORM 第一线,累啊~

    62390

    【深度知识】以太坊区块数据结构及以太坊的4棵数

    状态树采用Merkel-Patrica(MPT)树,而交易树和状态树采用Merkel树。 Compact编码 当我们需要把内存中MPT存储到数据库中时,还需要再把两个字节合并为一个字节进行存储,这时候会碰到2个问题: 关键字长度为奇数,有一个字节无法合并 需要区分结点是扩展结点还是叶子结点 第一级缓存以map的形式存储stateObject 第二级缓存以MPT的形式存储 第三级就是LevelDB上的持久化存储 当上一级缓存中没有所需的数据时,会从下一级缓存或者数据库中进行加载。 另外,为了能够快速查询某笔交易的数据,在数据库中还存储了每笔交易的索引信息,称为TxLookupEntry。 为保证数据完整性,这些数据 也被组织成一棵 MPT 树的形式 。该MPT树的根节点哈希值称为 存储树 。 存储树是账户状态的一个 域 ,该值随着合约的存储区的增加、删除、改动而不断变更。

    2K61

    Twitter收购Magic Pony进军直播视频领域,打造人工智能化社交

    而此次对MPT的收购无疑是一个大的助力。 就连Twitter联合创始人兼CEO Jack Dorsey也表示:“对于Twitter当前正在打造的服务,机器学习从中扮演着越来越重要的角色,而MPT的机器学习技术将进一步强化我们在该领域实力。” 那么,这时候你是不是就该问了:MPT到底是什么呢? ? 举个简单的例子,MPT可以增强用户在智能手机上拍摄照片或视频内容的处理,也可以帮助虚拟现实或增强现实应用程序开发图片,增强多媒体内容的视觉效果。 据悉,MPT包括联合创始人Zehan Wang和CEO Rob Bishop在内的所有11名员工在收购后都将保留下来,并被划分到该公司旗下的Cortex人工智能部门。

    52860

    快速学习-帕特里夏树

    的帕特里夏树 以太坊中的树结构,每个节点可以有最多 16 个子节点,再加上 value,所以共有 17 个“插槽”(slot)位置 以太坊中的帕特里夏树加入了一些额外的数据结构,主要是为了解决效率问题 MPT 与传统做法不同,MPT 是用所指向节点的 hash 来代表这个指针的;每个节点将下个节点的 hash 作为自己存储内容的一部分,这样就实现了 Merkel 树结构,保证了数据校验的有效性 MPT 节点分类 MPT 中还有一个可选的“结束标记”(用T表示),值为0x10 (十进制的16),它仅能在路径末尾出现,代表节点是一个最终节点(叶子节点) 如果路径是奇数,就与前缀 nibble 凑成整字节;如果是偶数 , f, 1, c, b, 8, 10] 带结束位 T 的偶路径 • '20 0f 1c b8' • > [ f, 1, c, b, 8, 10] 带结束位 T 的奇路径 • '3f 1c b8' MPT 树结构示例 • 假设我们现在要构建一个存储了以下键值对的 MPT 树: • ('do', 'verb'), ('dog', 'puppy'), ('doge', 'coin'), ('horse',

    44810

    那个工具该不该加功能?

    加班写完一个PPT后,跟公司同事叫了个外卖,顺便聊起工具迭代的问题,讨论的焦点是一个叫MPT的工具,我首先介绍一下这个工具 。 最近MPT一方面是考虑原来用的技术框架太老,想做个技术迭代;另一方面是在他火起来后,大家觉得能给加更多的功能,让它做更多的事情。 一开始,我也这么想,想着就应该这样吧? 纵观MPT的发展过程,从一开始的时候,我的想法就是:它就是只解决一个问题,就是按Ctrl+S就刷新手机的问题,于是一直往着这个方向走,攻破难题之后,还是一如既往地想着怎么能更好,于是它从一开始默默无闻变得街知巷闻 ,每次看到别人电脑显示着一个二维码我都看看是不是MPT导出的,当发现是的时候,心里都会有一种说不出的感觉,也许是喜悦。 MPT的迭代的事还得再想想,做加法容易,做减法难。 但做极致总是没错的。

    40150

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 云数据库 MySQL

      云数据库 MySQL

      腾讯云数据库MySQL是一种高性能、高可靠、高安全、可灵活伸缩的数据库托管服务,其不仅经济实惠,而且提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,为您简化 IT 运维工作,让您能更加专注于业务发展。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券