月亮链 月亮链
Ctrl+D收藏月亮链

以太坊:了解 Geth 客户端:快照加速机制_togetherbnb全部剧情攻略

作者:

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

转自:以太坊爱好者

作者:曾汨

本文为?Geth客户端有问必答系列的第一篇文章,大家可以就Geth客户端的问题踊跃提问,我会每周用一篇小文章回答得票最高的问题。本周呼声最高的问题是:你能说说flat数据库结构与legacy结构的主要区别吗?

以太坊的状态

在深入了解加速结构之前,我们先回顾一下以太坊的“状态”概念、在涉及到不同层次的抽象时又是如何存储的。

以太坊有两种不同类型的状态:账户的集合;每一合约账户存储槽的集合。从?完全抽象的角度?来看,两种数据都是键-值对。账户集合把地址映射到该地址的nonce、余额,等等。而一个合约的存储领域把任意的值映射到某个值。

但糟糕的是,虽然把这些键值对存储成扁平数据可以非常高效,但验证它们的正确性在计算上就会变得很难。每当对数据修改时,我们都要自下而上对所有数据做哈希运算。

为免去总是对整个数据库做哈希运算的需要,我们可以把数据库分割成连续的小片,然后建立出一种树状结构!最原始、最有用的数据就放在叶子节点上,然后树上每一个内部节点都是该节点以下内容的哈希值。如此一来,当我们要修改某些值时,就只需做对数次的哈希运算。这种数据结构其实有一个路人皆知的名字,就是“默克尔树”。

但还没完,这种办法在计算复杂性上还是有所欠缺。默克尔树结构虽然在修改现有数据时非常高效,但是,如果插入数据和删除数据会更改底层小数据块的边界,那就会让所有已经算好的哈希值全都变为无效。

Signature Bank被指控2020年6月起即对FTX的欺诈有实际了解:2月7日消息,Statistica指控加密友好银行Signature Bank通过允许FTX将客户账户与Signet区块链网络混合,从而促进FTX崩溃。起诉书显示Signature Bank至少从2020年6月起就对FTX的欺诈有实际了解,但仍公开宣传FTX,且未能关闭、暂停或以其他方式限制违反服务条款的Alameda或FTX账户,大大促进了欺诈。(彭博社)[2023/2/7 11:52:04]

这时候,与其盲目地对数据库分组,我们可以使用键本身来组织数据、基于共同前缀将数据都安排到树状格式中!这样插入和删除操作都不会影响到所有节点,只会影响到从树根到叶子路径上的节点。这种数据结构就叫“帕特里夏树”。

把上面两种办法合在一起——帕特里夏树的树状分层和默克尔树的哈希算法——就是所谓的“默克尔-帕特里夏树”,也是实践中用于代表以太坊状态的数据结构。无论是修改、插入、删除还是验证,都只有对数复杂度!唯一的小小例外是,有些键会在插入前做哈希运算,以平衡整棵树。

以太坊的状态存储

上文解释了为什么以太坊要用默克尔帕特里夏树结构来存储其状态。遗憾的是,虽然所需操作的速度都很快,但每一种选择都有所牺牲。

更新操作和验证操作的对数复杂性?意味着对?

ConsenSys推出学习模拟平台MetaMask Learn,以帮助用户了解Web3:金色财经报道,ConsenSys宣布推出学习模拟平台MetaMask Learn,以帮助用户在web3和自我托管钱包的世界中自我定位。据悉,MetaMask Learn是一个免费平台,支持有10种语言,将提供一个交互式的MetaMask UI环境,以帮助那些刚接触自我托管的人,并指导用户使用最常用的功能以帮助他们开始了解web3。[2023/2/1 11:39:27]

每一个单独的密钥?的

读取和存储都是对数复杂的(

logarithmicreadsandlogarithmicstorage)。这是因为树状结构的每一个内部节点都要单独保存在硬盘上。

此时此刻,账户树的深度确切是多少我不知道,但在大约一年以前,账户状态就已填满了7层高的树。这就意味着,每一次树操作都要触达至少7~8个内部节点,因此会做至少7~8次持久数据库访问。LevelDB组织数据时最多也是7层,所以还有一个额外的乘数。最终的结果是,单次?状态访问预计会放大为?25~50次随机的?硬盘访问。你再乘上一个区块中的所有交易的所有状态读取和写入,你会得到一个?吓人?的数字。

可怕之处还在于,这个数字就是运行一个以太坊节点、保证能全时验证所有状态的成本。

我们能做得更好一点吗?

调查:美国人对狗狗币的了解比以太坊多:Harris Poll与CouponCabin联合进行了一项调查,要求美国2,000多名成年人就加密货币发表自己的看法,根据调查结果,有29%的受访者表示他们熟悉狗狗币,而只有21%的人了解以太坊。(Cointelegraph)[2021/5/25 22:42:55]

并不是所有访问都要一视同仁

以太坊的运行依赖于对状态的密码学证明。只要我们还想保持对所有数据的验证能力,就绕不开硬盘读写放大问题。也就是说,我们——?

可以并且也事实上?——相信我们已经验证过的数据。

不断重复验证每一个状态物是没有意义的,但如果每次从硬盘中拉取数据都要验证一次的话,就是在做这样没有意义的事。默克尔帕特里夏树结构本质上是为写入操作设计的,但反过来就成了读取操作的负担。我们摆脱不了它,也无法让它瘦身,但?这绝不意味着?我们在每一个场合都必须使用它。

以太坊节点访问状态的场景可大致分为以下三类:

在导入一个新区块的时候,EVM代码的执行会产生或多或少基本平衡的状态读取和写入次数。不过,一个用于拒绝服务式攻击的区块可能会产生远多于写入操作的读取操作次数。

当节点运营者检索状态的时候,EVM代码执行仅产生读取操作。

当节点在同步区块链的时候,同步者会向远程节点请求状态,被请求者会将数据挖掘出来并通过网络传播给同步者。

加密货币投资人暴走恭亲王:加密货币的投资,需要花时间学习和了解项目:今日凌晨,著名加密货币投资人暴走恭亲王发布微博,称:对于新人而言,我个人的建议是利用这段时间可以多学习行业的知识,我始终认为你只有对行业越了解,你才能对于行业越有信心。如果你对数字货币不了解,对参与的项目不了解,对全球发展趋势不了解,那么群里只要有一些风吹草动,你马上就会心中生出无数的疑虑,并且很快会在谣言中作出很多让你可能抱憾终身的决定(这种决定我也做过)。很多人希望在群里面充值信仰,我个人觉得很难,如果你真的能够把时间花在学习和了解知识以及项目上,那真的可以让你握住自己的币。发文疑似是对周末“过山车”行情的观点表达,他也表示发文是“关于币本位和充值信仰”。[2018/3/19]

基于上述访问模式,如果我们可以短路读取操作而不触及状态树,则许多节点操作都可以变得快?

很多。这样甚至能开启一些新奇的访问模式,让原来因为太过昂贵而不可行的模式变为可能。

当然,还是不免有所牺牲。没有去掉树结构,任何新的加速结构都会带来额外的开销。问题只在于:额外的开销是否能带来足够多的好处,值得我们一试?

请循其本

我们已经开发出了神奇的默克尔帕特里夏树结构来解决我们所有的问题,现在,我们希望让读取操作能绕过它。那么,我们应该用什么样的加速结构来让读取操作重新变得快起来呢?显然,如果我们不需要树结构,那就大可以把伴随树结构而生的复杂性都丢在一边,我们可以直接回到原始状态。

国际知名会计机构表达了了解数字货币的必要性:近日,英国特许公认会计师公会(ACCA)表示,会计师需要及时了解像比特币这样的数字货币的发展情况。ACCA专业见解总监Maggie McGhee表示比特币存在以下三个特点使其存在的问题突出:首先,它的匿名性意味着不可能确认潜在受益人的身份;其次,它的高波动性使其本身具有风险和不稳定性;再次,它正在资助其他领域的投机泡沫,例如初始投资产品,导致投机商追逐。她还强调会计师应及时跟进技术的发展,来更好应对可能到来的挑战。全球会计准则组织警告说,爱尔兰和其他司法管辖区的“历史性的挑战”需要特别警惕。[2018/3/15]

如同在本文开头说到的那样,理论上的理想状态下?以太坊状态的数据存储方式应是简单键值对,没了默克尔帕特里夏树构成的限制,那就没有什么能阻止我们去实现这种理想方案了!

不久之前,Geth引入了?snapshot加速结构。一个快照就是给定一个区块处的以太坊状态的完整视图。抽象掉实现方面的细节,它就是把所有账户和合约存储槽堆放在一起,都由扁平的键值对来表示。

每当我们想要访问某个账户或者某个存储槽的时候,我们只需付出一次LevelDB的查询操作即可,而不用在每棵树上查询7~8次。理论上来说,更新快照也很简单,处理完一个区块后,我们只需为每个要更新的存储槽多做1次额外的LevelDB写入操作即可。

快照加速结构实际上将读取操作的计算复杂性从O(logn)降到了O(1),代价是将写入操作的计算复杂性从O(logn)变成了O(1+logn),并将硬盘存储空间从O(nlogn)增加到了O(n+nlogn)。

魔鬼藏在细节中

维持以太坊状态快照的可用性也不容易。只要区块还在一个接一个地产生,一个接一个地摞在最后一个区块上,那将最新变更合并到快照中的粗疏办法就能正常工作。但是,哪怕有微小的区块链重组,快照机制就崩溃了,因为根本没有设计撤销操作。对扁平数据表示模式来说,持久化写入是单向的操作。而且让事情变得更糟糕的是,我们没办法访问更老的状态了。

为了克服这些限制,Geth客户端的快照由两部分组成:一部分持久化的硬盘层,是对旧区块处状态的完整快照;还有一棵内存内diff层组成的树,用于收集最新的写入操作。

处理新区块的时候,我们不会直接合并这些写入操作到硬盘层,而仅仅是创建一个新的、包含这些变更的内存内diff层。当内存内部的diff层积累到足够高的层数时,最底部的一个就开始合并更新并推到硬盘层。当需要读取一个状态物时,我们就从最顶端的diff层开始查找,一直往下,直至在diff层中或者在硬盘层中找到。

这种数据表示方法非常强大,解决了很多问题。因为内存内部的diff层组成了一棵树,所以128个区块以内的链重组只需取出属于父块的diff层,然后就此开始构建即可。需要较旧状态的dApp和远程同步者可以访问到最近128个最近的状态。开销变成了128次映射查找,但128次内存内的查找比起8次硬盘读取及LevelDB的4~5倍放大要快上几个数量级。

当然,这里面还有很多很多的坑。就不讲太深了,简单列举就有下面这张清单:

Self-destruct特别难以对付,因为它们需要短路diff层的沉降。

如果出现了比持久硬盘层更深的链重组,那现在的快照就要完全废弃掉、重新生成。整套操作非常昂贵。

在节点关机时,内存内的diff层需要持久化到日志并加载备份,不然重启之后快照就没用了。

使用最底层的diff层作为一个累加器,仅在其超过一定的内存使用时才刷新到硬盘。这就允许跨区块对同一存储槽执行去重写入操作。

要为硬盘层分配一个读取缓存,这样合约重复访问同一个古老的存储槽时硬盘才不会损坏。

在内存内diff层中使用累积的布隆过滤器,以便快速检测出状态物有没有可能存在于diff层中,还是应该直接跳到硬盘中查找。

不把原始数据设为键,而是以这些数据的哈希值为键,以保证快照的迭代顺序与默克尔帕特里夏树相同。

生成持久化硬盘层的时间要比剪除状态树窗口的时间多得多,所以即使是生成器,也需要动态地追踪链的运行。

美丑并存

Geth的快照加速结构将状态读取的复杂性降低了一个数量级。这就意味着基于读取操作的DoS攻击的发动难度上了一个数量级,而?eth_call?调用也快了一个数量级。

快照还让对最近的块进行极速状态迭代成为可能。实际上这曾是我们开发快照机制的主要理由,因为我们可以此为基础创造新的?snap?同步算法。讲清楚它需要一篇全新的文章,但最近我们在Rinkeby测试网上的基准测试很能说明问题:

耗时

上行流量

下载流量

包数量

硬盘读取量

fast同步

2h34m

4.53GB

11.43GB

357335

2.89TB

snap同步

42m

0.083GB

6.53GB

37347

0.04TB

-63.7%

-98.2%

-43.9%

-90.5%

-98.6%

当然,这一切同样不是没有代价的。当初始同步完成之后,参与主网的节点需要9~10小时来建构初始快照,还需要额外的15GB以上的硬盘。

那糟糕的部分是哪里呢?我们花了6个月时间才积累起足够的自信、发布了快照机制,而且现在它仍然不是默认功能,需要主动使用?--snapshot?标记来开启,而且还有一些围绕内存使用和崩溃恢复的打磨工作要做。

总而言之,对于这一提升,我们非常自豪。其中有巨大的工作量,而且是在黑暗中摸索、自己实现所有东西并祈祷它能工作。还有一个有趣的事情,第一个版本的快照同步是在两年半以前写的,但一直都处于被阻塞的状态,因为我们缺乏必要的加速结构来驱动它。

结语

希望你能喜欢?

Geth客户端有问必答?的这一篇文章。我花了比自己所预想的多出一倍的时间,但我并不后悔,因为这个主题值得。下周见。

标签:以太坊ETHGETGETH以太坊最新价格行情分析IETHVTOGETHERBnB游戏togetherbnb全部剧情攻略

比特币交易所热门资讯
区块链:央行下发《区块链技术金融应用评估规则》,首次从顶层设计角度给出整套评估规范_hamster币官网

来源:财联社金融体系的区块链系统和应用,终于有了全面细致的标准!继今年3月发布《金融分布式账本技术安全规范》之后,财联社记者独家获悉.

1900/1/1 0:00:00
稳定币:Messari研究员:USDT可能超越比特币,成为公链主导货币_KIN

各位比特币爱好者,不要去社交媒体疯狂dissRyanWatkins,他只是个分析师。Messari研究员RyanWatkins在第二季度稳定币回顾报告中提到,在2020年第一季度,以太坊的日结算.

1900/1/1 0:00:00
BAL:错过了 YFI,还有哪些流动性挖矿项目值得关注?_COM

作者?|?StevenZheng摘要充分利用流动性挖矿和收益耕作,TheBlock总结并可视化了DeFi协议推出的受欢迎的激励计划这些项目涉及Balancer.

1900/1/1 0:00:00
比特币:比特币冲上1万美元,直接推手是“巨鲸”灰度,还是特朗普?_ASS

文|棘轮林格股票、黄金、比特币……7月以来,多种资产轮番上涨,吸引了投资者的眼球。7月26日晚间,比特币经历多日上涨后,冲上1万美元关口。“5位数的比特币回来了。”有玩家感慨.

1900/1/1 0:00:00
区块链:预言机龙头Link冲进市值前10 关于预言机 你想了解的都在这_LINK

为什么之前无人问津的预言机赛道现在突然这么火呢?首先一个很明显的原因就是预言机龙头ChainLink冲进市值榜前10,提高了预言机项目的曝光度;其次就是由于DeFi项目的崛起.

1900/1/1 0:00:00
去中心化金融:观察丨如何利用“聚合三要素”让DeFi协议捕获价值_区块链域名选什么后缀好

本文来源:金色财经作者:Jason聚合平台就是这样一个能够与用户形成直接关系的平台,可以用零边际成本为用户提供服务,并通过供需之间的良性循环来降低用户获取成本.

1900/1/1 0:00:00