推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 不投资毋宁死 > 【系统学习区块链】以太坊的区块和存储(三):多级缓存

【系统学习区块链】以太坊的区块和存储(三):多级缓存

不投资毋宁死 2018-10-29

在了解完以太坊的区块结构之后,你是否有这么一个疑问:区块头里存了好多MPT树的根哈希,有账户状态树、交易树、收据树,还有账户状态里的存储合约账户数据的storage树。但这仅仅存储的是树的根哈希,那这些树本身存储到哪里去了呢? 


我们先来回顾下0628那篇讲梅克尔树的文章。


在比特币的区块头里,仅有一棵简单的梅克尔树的根哈希,这棵梅克尔树的原始数据就是该区块所包含的所有交易信息,虽然比特币的区块里并没有存储整棵梅克尔树,但是区块里存储了所有交易信息,只要你拥有一个完整的区块数据,你就可以根据梅克尔树的算法一步步算出这棵树的每一层的哈希值。 


从前两天我们对以太坊区块的了解来看,它的区块体里只包含了交易信息和叔区块头。有了交易信息,再加上区块头里的交易树的树根,这效果也跟比特币类似,没啥问题。


但是,另外的几棵树,它们的原始数据并没有存储到区块上。那是不是意味着,就算你拥有完整的以太坊区块信息,你也不知道以太坊的所有账户状态是什么样,产生了哪些收据信息,以及智能合约存储了哪些数据? 当然不是,如果这样的话,那还叫啥区块链啊。 



但是,每次一有需求,比如就简单查一个账户的余额,就要去复盘整个交易历史,这显然太不方便。所以,以太坊直接存储了这些数据,只不过不是在区块上。 


在以太坊每个节点上,都有一个levelDB数据库,所有的信息,包括区块信息、账户状态、交易信息等等,都会以key/value对的方式存储在这个数据库里。


比如,区块头的key是由区块头前缀(表示这是区块头的key)、区块号、区块hash构成,而value就是区块头的RLP编码值;区块体的key由区块体前缀(表示这是区块体的key)、区块号、区块hash构成,而value就是区块体的RLP编码。



所以,levelDB数据库是以太坊的一级存储。 然后,在levelDB的基础上,构造并存储各种MPT树,这算是二级存储了。


最后,最关键的那些信息,比如交易信息、各种树的根哈希等等,以区块的结构呈现,所以,区块算是它的第三级存储。 


其实,比特币节点的数据存储也是基于levelDB数据库的,而且也会存储根据交易信息算出来的UTXO集。不过比特币的整个系统跟以太坊比起来,还是非常简单,所以了解它的区块结构基本就OK了,但以太坊的架构就复杂得多,不了解下它的完整存储方式,可能很让人很疑惑。 




不投资毋宁死

自由,就是拥有选择的权利,而每一次选择都是一次投资。



谢谢阅读

评论功能现已开启,灰常接受一切形式的吐槽和赞美☺

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【系统学习区块链】以太坊的区块和存储(三):多级缓存》的版权归原作者「不投资毋宁死」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注不投资毋宁死微信公众号

不投资毋宁死微信公众号:btzwns

不投资毋宁死

手机扫描上方二维码即可关注不投资毋宁死微信公众号

不投资毋宁死最新文章

精品公众号随机推荐