`

MPT树

 
阅读更多
每一个以太坊的区块头包含三颗MPT树,分别是

交易树
收据树(交易执行过程中的一些数据)
状态树(账号信息, 合约账户和用户账户)

从编码来说,有三种编码:

Raw编码:原生的key编码,是MPT对外提供接口中使用的编码方式,当数据项被插入到树中时,Raw编码被转换成Hex编码;
Hex编码:16进制扩展编码,用于对内存中树节点key进行编码,当树节点被持久化到数据库时,Hex编码被转换成HP编码;
HP编码:16进制前缀编码,用于对数据库中树节点key进行编码,当树节点被加载到内存时,HP编码被转换成Hex编码;

Trie树的插入,这是一个递归调用的方法,从根节点开始,一直往下找,直到找到可以插入的点,进行插入操作。参数node是当前插入的节点,prefix是当前已经处理完的部分key,key是还没有处理玩的部分key, 完整的key = prefix + key。 value是需要插入的值。 返回值bool是操作是否改变了Trie树(dirty),node是插入完成后的子树的根节点,error是错误信息


插入的过程如下:

如果节点类型是nil(一颗全新的Trie树的节点就是nil的),这个时候整颗树是空的,直接返回shortNode{key, value, t.newFlag()}, 这个时候整颗树的跟就含有了一个shortNode节点。
如果当前的根节点类型是shortNode(也就是叶子节点),首先计算公共前缀,如果公共前缀就等于key,那么说明这两个key是一样的,如果value也一样的(dirty == false),那么返回错误。 如果没有错误就更新shortNode的值然后返回。如果公共前缀不完全匹配,那么就需要把公共前缀提取出来形成一个独立的节点(扩展节点),扩展节点后面连接一个branch节点,branch节点后面看情况连接两个short节点。首先构建一个branch节点(branch := &fullNode{flags: t.newFlag()}),然后再branch节点的Children位置调用t.insert插入剩下的两个short节点。这里有个小细节,key的编码是HEX encoding,而且末尾带了一个终结符。考虑我们的根节点的key是abc0x16,我们插入的节点的key是ab0x16。下面的branch.Children[key[matchlen]]才可以正常运行,0x16刚好指向了branch节点的第17个孩子。如果匹配的长度是0,那么直接返回这个branch节点,否则返回shortNode节点作为前缀节点。
如果当前的节点是fullNode(也就是branch节点),那么直接往对应的孩子节点调用insert方法,然后把对应的孩子节点只想新生成的节点。
如果当前节点是hashNode, hashNode的意思是当前节点还没有加载到内存里面来,还是存放在数据库里面,那么首先调用 t.resolveHash(n, prefix)来加载到内存,然后对加载出来的节点调用insert方法来进行插入。

[url][/url]
[img][/img]
分享到:
评论

相关推荐

    以太坊与智能合约.pdf

    尽量通俗易懂,由浅入深的介绍了被称为区块链2.0的以太坊的基本架构和算法,包括MPT树,以太坊数据结构,区块验证机制,智能合约的执行机制等,并且结合了两个简单的智能合约进行了讲解。然后介绍了一些以太坊中出现...

    以太坊之四交易树和收据树

    交易树和收据树仅用来存储本区块的数据,所用的数据结构依然是MPT。 交易树: 提供Merkel Proof。向轻节点证明某个交易是打包在区块中的。 收据树: 向轻节点证明某个交易的执行结果。 4.2 bloom filter 布隆过滤器...

    基于多项式加工树模型的列联表数据挖掘.pdf

    首先是“多项式加工树模型”(Multinomial Processing Tree, MPT),这是一个用于人类认知心理建模与试验分析的树状参数模型,具有可变层次结构,能够处理并表示树状结构中的奇异点,也就是增加分支参数和结构层次。...

    矢量地理信息溯源记录组织验证的区块链技术.docx

    MPT是一种特殊的默克尔树,常用于以太坊等区块链系统,能有效处理动态键值对,提高数据查找效率。 MPT 结构允许将复杂的溯源信息分解为多个层次,每个层次对应一个数据块,数据块间的链接通过哈希函数连接,形成一...

    skyline软件体系及工作流程

    TerraExplorer API 提供了一套强大的接口用来集成TerraExplorer、TerraExplorer Pro 和用户自定义应用,同时也提供了一套ActiveX控件,可将三维窗口、信息树和导航图以控件对象的方式嵌入到用户自定义的可视化界面中...

    skyline 开发帮助文档

    服务器配置中,TerraGate 3.5是必不可少的组件,用于MPT的网络发布,开发者可以通过它设置多个MPT供Fly工程文件调用。 客户端浏览方面,用户需要安装TE(TerraExplorer)和IE60,以支持系统的运行。TE是3D浏览的...

    blockchain

    简介基于springboot框架实现的区块链基础工程,支持p2p网络通信,MPT状态树,智能合约等区块链服务,通过对V1.0版本进行重构,将大大提高,共识协议可更换配置。 -命中1.原始目录...

    gis技术相关文档二次开发接口

    TerraExplorer还提供了一套ActiveX控件,如3D窗口、信息树和导航图,这些控件可以嵌入到自定义的用户界面中。Runtime模块使得分发用户应用程序变得更加简单。通过这些控件,开发者可以创建具有高度交互性和可视化的...

    terrabuilder培训教材

    - **信息树**:展示项目的结构和数据信息。 - **数据状态及修改**:监控数据的状态和修改历史。 - **数据类型窗口**:显示不同类型数据的信息。 - **边框显示**:控制边界线的显示方式。 - **主窗口**...

    skyline_API详细使用说明手册

    TerraExplorer进一步提供了ActiveX控件,允许开发者将3D视窗、信息树和导航图以控件形式嵌入至自定义界面中,从而实现高度个性化的应用程序设计。特别地,Runtime模块简化了用户自定义应用程序的分发过程,降低了...

    Pelco Spectra IV球机中文说明书

    - **MPT9500**:提供多点触摸操作界面。 - **NET300/NET350/NET4001A**:支持网络控制功能。 - **Endura工作站**:适用于大型监控系统,提供集成管理平台。 - **VCD5000**:适用于视频存储和检索。 - **DX4100/DX...

    cognitive-aging-modeling

    MPT包含适合多项式处理树模型的文件 要运行分析,您将需要 + 和以下软件包: rstan, bridgesampling, loo, bayesplot, HDInterval 。 拟合模型可能需要很长时间。 因此,要遵循本教程而不必等待stan进行采样,可以...

    skyline学习资料

    该接口提供了树形结构的数据管理方式,方便用户组织和浏览复杂的数据结构。 #### ITerrain429 此接口用于处理地形相关的操作,例如地形数据的加载、编辑等。 #### IContainer230 容器接口,用于管理一系列的对象...

    matlab金融计算课件及作业帝国理工大学商学院

    现代投资组合理论(MPT)和资本资产定价模型(CAPM)是这个领域的基础,它们可以帮助投资者理解资产之间的相关性,并据此做出投资决策。 4. **期权定价**:期权是一种金融衍生工具,赋予其持有者在未来某一特定日期...

    Project Portfolio Management An Introduction.ppt

    PPM 的出现可以追溯到20世纪50年代,由Harry Markowitz在1952年提出的现代投资组合理论(Modern Portfolio Theory,MPT),该理论在金融市场上被广泛采用,用于平衡风险和回报。Markowitz 在1990年因此获得了诺贝尔...

    skyline_API详细使用说明手册[定义].pdf

    TerraExplorer API的核心功能包括访问外部信息源,如数据库和地理空间数据,以及将3D窗口、信息树和导航图嵌入到自定义用户界面中。 1. ITerraExplorer5接口是TerraExplorer API的一个关键组件,提供了与用户界面和...

Global site tag (gtag.js) - Google Analytics