木星链 木星链
Ctrl+D收藏木星链
首页 > FIL币 > 正文

TRI:以太坊 Merkle Patricia Trie 是如何工作的

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:aisiji

校对:Tiny熊

介绍

MerklePatriciaTrie是以太坊存储层的关键数据结构之一。我希望了解它到底是如何工作的,于是遍寻资料进行了深入研究,实现了这个算法。

在这篇博文里,我将分享我所学到的东西。解释MerklePatriciaTrie究竟是如何工作的,并展示一个Merkle证明生成和验证的demo。

算法的源代码和本博文中使用的例子都是开源的:https://github

funcTestTransactionRootAndProof(t*testing.T){trie:=NewTrie()txs:=TransactionsJSON(t)fori,tx:=rangetxs{//keyistheencodingoftheindexastheunsignedintegertypekey,err:=rlp.EncodeToBytes(uint(i))require.NoError(t,err)transaction:=FromEthTransaction(tx)//valueistheRLPencodingofatransactionrlp,err:=transaction.GetRLP()require.NoError(t,err)trie.Put(key,rlp。//thetransactionrootforblock10467135//https://api.etherscan.io/api?module=proxy&action;=eth_getBlockByNumber&tag;=0x9fb73f&boolean;=true&apikey;=YourApiKeyTokentransactionRoot,err:=hex.DecodeString("bb345e208bda953c908027a45aa443d6cab6b8d2fd64e83ec52f1008ddeafa58")require.NoError(t,err)t.Run("merkleroothashshouldmatchwith10467135'stransactionRoot",func(t*testing.T){//transactionrootshouldmatchwithblock10467135'stransactionRootrequire.Equal(t,transactionRoot,trie.Hash()。)t.Run("amerkleproofforacertaintransactioncanbeverifiedbytheofficaltrieimplementation",func(t*testing.T){key,err:=rlp.EncodeToBytes(uint(30))require.NoError(t,err)proof,found:=trie.Prove(key)require.Equal(t,true,found)txRLP,err:=VerifyProof(transactionRoot,key,proof)require.NoError(t,err)//verifythatiftheverificationpasses,itreturnstheRLPencodedtransactionrlp,err:=FromEthTransaction(txs).GetRLP()require.NoError(t,err)require.Equal(t,rlp,txRLP。。

以太坊Goerli测试网预计将于3月15日上午激活Shapella升级:3月9日消息,以太坊基金会在博客文章中宣布,Shapella网络升级将于epoch 162304在Goerli网络上激活,计划时间为北京时间3月15日06:25:36,预计这将是为以太坊主网安排Shapella升级之前的最后一次测试网升级。Shapella社区电话会议定于 北京时间3月13日23:00。

此前2月28日消息,以太坊Sepolia测试网已成功模拟“上海升级”。根据3月2日的报道,在此次Goerli测试网升级后,主网升级将在此后的3至4周进行。[2023/3/9 12:51:59]

上述测试案例通过了,并且表明如果我们将10467135区块的所有193个交易加入到trie中,那么trie的哈希值与该区块中公布的transactionRoot相同。而由我们的trie生成的索引为30的交易的merkle证明,被官方的golangtrie认为是有效的实现。

深入MerklePatriciaTrie-Trie节点

现在,让我们来看看Trie的内部实现。

在内部,trie有4种类型的节点。空节点(EmptyNode)、叶节点(LeafNode)、分支节点(BranchNode)和扩展节点(ExtensionNode)。每个节点将被编码并作为键值对存储在键值存储中。

让我们以主网的区块10593417为例,来说明一个TransactionTrie是如何建立的,以及它是如何存储的。

Block10593417只有4个Roothash交易。0xab41f886be23cd786d8a69a72b0f988ea72e0b2e03970d0798f5e03763a442cc.因此,为了将4个交易存储到一个trie,我们实际上是以十六进制字符串的形式存储以下键值对。

金融博客零对冲:以太坊急速下跌是由NFT热潮转移向Solana引发的:金融博客零对冲(Zero Hedge)表示,一些人认为,以太坊的急速下跌是由NFT热潮转移向加密货币Solana引发的。周一,加密衍生品平台FTX首席执行官Sam Bankman-Fried宣布将Solana整合到FTX即将推出的NFT市场,这个新的市场将使非功能性艺术创作者和所有者能够使用Solana和以太坊跨链交易他们的数字艺术。有趣的是,加密货币的这种快速下跌符合摩根大通分析师Nick Panigirtzoglou上周的评论,他认为一些泡沫预计将在短期内离开市场。(金十)[2021/9/8 23:07:47]

(80,f8ab81a5852e90edd00083012bc294a3bed4e1c75d00fa6f4e5e6922db7261b5e9acd280b844a9059cbb0000000000000000000000008bda8b9823b8490e8cf220dc7b91d97da1c54e250000000000000000000000000000000000000000000000056bc75e2d6310000026a06c89b57113cf7da8aed7911310e03d49be5e40de0bd73af4c9c54726c478691ba056223f039fab98d47c71f84190cf285ce8fc7d9181d6769387e5efd0a970e2e9)(01,f8ab81a6852e90edd00083012bc294a3bed4e1c75d00fa6f4e5e6922db7261b5e9acd280b844a9059cbb0000000000000000000000008bda8b9823b8490e8cf220dc7b91d97da1c54e250000000000000000000000000000000000000000000000056bc75e2d6310000026a0d77c66153a661ecc986611dffda129e14528435ed3fd244c3afb0d434e9fd1c1a05ab202908bf6cbc9f57c595e6ef3229bce80a15cdf67487873e57cc7f5ad7c8a)(02,f86d8229f185199c82cc008252089488e9a2d38e66057e18545ce03b3ae9ce4fc360538702ce7de1537c008025a096e7a1d9683b205f697b4073a3e2f0d0ad42e708f03e899c61ed6a894a7f916aa05da238fbb96d41a4b5ec0338c86cfcb627d0aa8e556f21528e62f31c32f7e672)(03,f86f826b2585199c82cc0083015f9094e955ede0a3dbf651e2891356ecd0509c1edb8d9c8801051fdc4efdc0008025a02190f26e70a82d7f66354a13cda79b6af1aa808db768a787aeb348d425d7d0b3a06a82bd0518bc9b69dc551e20d772a1b06222edfc5d39b6973e4f4dc46ed8b196)

Synthetix创始人因以太坊节点硬件被意外关闭而损失ETH:DeFi协议Synthetix的创始人Kain Warwick在Twitter上表示,自己的以太坊节点硬件被意外关闭,因为他的DappNode电源按钮出了故障,这导致他在数天内“连续丢失”了ETH。虽然他损失不到1 ETH,但他表示这比任何事情都“沮丧”,因为这突出了意外问题对stakers的危险。[2020/12/9 14:40:14]

80是无符号整数0的RLP编码结果的十六进制形式:RLP(uint(0))。01是RLP(uint(1))的结果,以此类推。

密钥80的值是第一个交易的RLP编码的结果。键值01是第二个交易的值,以此类推。

因此,我们将把上述4个键值对添加到trie中,让我们看看添加每一个键值对时,trie的内部结构如何变化。

为了更直观,我将用一些图来解释它的工作原理。你也可以通过在测试案例中添加日志来检查每一步的状态。

EmptyTrie

trie结构只包含一个根字段,指向一个根节点。而节点类型是一个接口,它可以是4种类型的节点之一。

typeTriestruct{rootNode}

当一个trie被创建时,根节点指向一个EmptyNode。

添加第一笔交易

当添加第一个交易的键值对时,一个叶节点(LeafNode)被创建,交易数据存储在其中。根节点被更新以指向该叶节点(LeafNode)。

添加第二笔交易

当添加第2个交易时,根部的叶节点(LeafNode)将变成一个分支节点(BranchNode),有两个分支指向2个叶节点(LeafNode)。左边的叶节点(LeafNode)持有剩余的nibbles-1,以及第2个交易的值。

以太坊基金会正在为ETH 2.0建立安全团队:以太坊研究者Justin Drake透露,以太坊基金会正在建立一个专门针对ETH 2.0的内部安全团队。其中将包括模糊测试、赏金狩猎、寻呼机职责、加密经济模型、应用密码分析、正式验证等。(BTCManager)[2020/8/3]

而现在根节点正指向新的分支节点(BranchNode)。

添加第三笔交易

添加第3个交易将使左侧的叶节点(LeafNode)变成一个分支节点(BranchNode),与添加第2个交易的过程类似。虽然根节点没有改变,但它的根哈希值已经改变了,因为它的0分支指向了不同的节点,有不同的哈希值。

添加第四笔交易

添加最后一个交易与添加第三个交易类似。现在我们可以验证根哈希值是否与区块中包含的transactionRoot相同。

获得第三笔交易的默克尔证明

第3笔交易的Merkle证明只是通往存储第3笔交易值的叶节点(LeafNode)的路径。在验证证明时,可以从根哈希值开始,解码Node,匹配nibbles,然后重复,直到找到匹配所有剩余nibbles的Node。如果找到了,那么这个值就是与密钥配对的那个值;如果没有找到,那么Merkle证明就无效了。

更新trie的规则

在上面的例子中,我们已经建立了一个有3种类型节点的trie。空节点、叶节点和分支节点。然而,我们没有机会使用扩展节点(ExtensionNode)。请找到其他使用ExtensionNode的测试案例。

一般来说,该规则是:

当停在一个空节点时,用一个新的叶子节点替换它的剩余路径。

当停在一个叶节点(LeafNode)时,将其转换为一个ExtensionNode并添加一个新的分支和一个新的叶节点(LeafNode)。

声音 | 以太坊开发人员:以太坊2.0阶段0进展非常积极 目前有三个团队在跟进以太坊2.0第二阶段:11月24日消息,以太坊开发团队Quilt的开发人员Will Villanueva于近期一个播客节目中透露称,以太坊2.0阶段0是分片向前发展的阶段,基本上执行签入或将交叉链接到信标链。该阶段的进展“非常积极”。同时Will Villanueva表示,其所在的Quilt团队正在研究以太坊2.0的第二阶段。虽然从阶段0到阶段1的转换相当快,但是阶段2需要一段时间,因为它不是一个简单的任务。随着社区越来越接近第1阶段,Villanueva建议在第0阶段做更多工作。此外,他还透露,目前有三个团队正在研究以太坊2.0第二阶段的进展。[2019/11/24]

当停在一个扩展节点时,将其转换为另一个具有较短路径的扩展节点,并创建一个新的分支节点指向该扩展节点。

有相当多的细节,如果你有兴趣,你可以阅读源代码。

摘要

MerklePatriciaTrie是一个存储键值对的数据结构,就像一个地图。除此之外,它还允许我们验证数据的完整性和键值对的包容性。

本翻译由CellNetwork赞助支持。

来源:https://medium.com/@chiqing/merkle-patricia-tri-explained-ae3ac6a7e123

参考资料

登链翻译计划:https://github.com/lbc-team/Pioneer

aisiji:https://learnblockchain.cn/people/3291

Tiny熊:https://learnblockchain.cn/people/15

代码库:https://github.com/zhangchiqing/merkle-patricia-trie

代码库:https://github.com/zhangchiqing/merkle-patricia-trie

主网10467135区块:https://etherscan.io/block/10467135

transactions.json:https://github.com/zhangchiqing/merkle-patricia-trie/blob/master/transactions.json

10593417:https://etherscan.io/block/10593417

Block10593417:https://etherscan.io/block/10593417

0xab41f886be23cd786d8a69a72b0f988ea72e0b2e03970d0798f5e03763a442cc:https://api.etherscan.io/api?module=proxy&action;=eth_getBlockByNumber&tag;=0xa1a489&boolean;=true&apikey;=YourApiKeyToken

源代码:https://github.com/zhangchiqing/merkle-patricia-trie/blob/master/trie.go#L62

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10117827.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

简析三个典型DAO模型,揭示DAO社区的运作机制

标签:TRIIONODERANKnight War The Holy TrioPerionHaodestar TokenTranslatix

FIL币热门资讯
加密货币:韩国银行联合会认为加密交易所上币数量“太多”将引发高风险

据媒体报道,韩国的商业银行可能会认为韩国加密交易所的上币数量“太多”,从而引发高风险,这可能会减少交易所获得银行实名账户服务的机会.

1900/1/1 0:00:00
FIN:45天市值跌去95%,“天王"Dfinity怎么了?

它曾被捧为继比特币和以太坊之后,区块链的第三次伟大创新,它也获得过A16Z、Polychain等明星投资机构的巨额资金支持,在上线之后,众多头部交易所抢着上线了它的代币.

1900/1/1 0:00:00
USD:激情欧洲杯,来AEX竞猜赢百万代币、决赛门票

亲爱的AEX安银小伙伴随着欧洲杯的激情开赛,为了回馈AEX平台的新老用户,我们将于2021年6月27日正式推出“激情欧洲杯,来AEX竞猜赢百万代币、决赛门票”的活动.

1900/1/1 0:00:00
ETH:日销毁8万ETH,EIP 1559真的那么神奇吗?

备受瞩目的伦敦硬分叉升级于昨日在以太坊Ropsten测试网上线,而据watchtheburn.com的数据显示,在短短24小时内,网络已销毁了8万多ETH.

1900/1/1 0:00:00
NFT:安迪·沃霍尔NFT首秀拍得280万美元,或引爆新投资浪潮

在逐渐趋于冷静的数字货币市场中,NFT板块仍在狂奔。6月24日,酝酿了近半年的币安NFT交易平台终于上线,以一场牵手波场TRON、APENFT基金会联合举行的“Genesis”主题拍卖会正式亮相.

1900/1/1 0:00:00
TOKEN:关于近期不法分子冒充Tokencan交易所的风险提示

近期收到多位热心客户的反馈,市面上有不法分子多次冒充Tokencan交易所,套用Tokencan交易所的logo和界面,以套取客户钱财为目的并在充值后不允许提现;请客户认清官方网址.

1900/1/1 0:00:00