比特币行情·比特币价格
Ctrl+D收藏比特币行情网
ads

状态规模越来越恶化了吗?建议以太网坊状态规模管理

作者:

时间:2021/2/21 15:18:47

状态规模越来越恶化了吗?建议以太网坊状态规模管理。

以太网坊协议面临的最长、最未解决的挑战之一是状态数据规模增加引起的问题。以太网广场块链的许多操作(创建账户,写合同存储槽,将ETH发送到新账户……)在以太网广场追加状态内容(即在状态数据中追加数据对象),所有节点都必须存储全量的状态数据这些操作只需交易者一次性支付通过gas的使用量计算的手续费,但会给整个网络带来永久的持续成本。节点需要保存这些新数据(将来加入的节点也需要在同步中下载这些数据)。

这是系统设计中显着的失衡,以太网坊系统可能越来越难使用。因为状态中充满了无用的垃圾数据。本文的目的是详细说明问题的根源和解决问题的方法。如果我们能够实现一个解决方案,这将为安全地大大提高区块Gas上限的路径。

本文所论述的研究领域还在推广中,随时可能出现更新、更好的创意和更优雅的权衡。

状态是指节点处理新产生的块和事务所必须存在的信息。状态与历史完全不同,后者是关于过去时间的信息,节点可以保存这些信息,以便将来重播或备案,但并不是处理块链所必需的。

以太网坊协议中,状态信息包括:

账户的ETH,馀额,和nonce(流水号)

智能合同的代码。

智能合同的存储项目(storage)

与共识机制相关的数据(最近的块哈希值、叔叔块的权益证明书的共识数据包括验证者的钥匙及其记录在信标链上的活动等)

历史信息由旧块和收据构成。EVM没有操作代码可以访问旧块、旧事务和收据输出,节点丢弃这些数据也可以验证新块,这些是历史信息。

上述状态信息列表的最后一个项目——共识机制相关数据—————————————————————————————————————————————————————————————————————但是,前三个项目头很大。这三种状态信息的规模随着时间的推移而增大。新用户参加网络,创建新账户、新合同,参加合同,接受token。

困难的是,使用了很多状态后,静静地躺在那里(不再接触)的某个用户停止使用某个应用程序后,会产生垃圾状态——虽然不再有用,但是永远存在。

理论上,用户可以垃圾不落地。用户只要发表具有SELFDESTRUCT条件的合同,就可以在不能再使用该合同的情况下,调用该操作代码删除该合同,清除token馀额的他们也可以使用智能合同钱包,通过现有的外部账户(EOA)进行交易

数据:89.28%的比特币地址处于收益状态:块链分析公司intotheblock的数据显示,比特币块链网络有3194万个地址,其中89.28%处于收益状态。分析师表示,这个数字意味着比特币中线周期价格比较乐观。(u.today)[2020/10/12]

但在实践中,这种激励非常少,适当状态清扫的技术复杂性过大。在许多合同中,给任何人这样调用SELFDESTRUCT的权限是不合适的(不能停止))、此外,用户体验和代码也会增加很多复杂性。事实上,由于SELFDESTRUCT的使用极其有限,副作用极大,我倾向于永远删除这个操作代码。如果我们真的想控制状态数据的规模,我们需要的是网络节点,可以默认放弃不再使用的垃圾状态的方法。

这个问题的一种解决方案是基于无状态客户端的观念(这篇文章是这个观念的出处,这里是演讲录像)。

基本原理是,区块验证不再持有全状态为前提。相反,块有证据(或证据数据(witness)),证明访问状态的值。和现在的设计一样,块内包含状态根(stateroot),访问的值可以证明对应状态根(译者注:默克尔证明是常见的证明技术)。以太网坊目前的状态树方案(默克尔帕特里夏树)支持这种证明技术,也可以像二进制树者VerkleTrie这样更有效的方案。目击数据也证明处理该块后新状态根的正确性。

无状态有两种形式:

弱无状态性:出块人还需要完整的状态,认为(自己制作的)块生成目击数据,但是验证块的阶段可以是无状态的

强无状态性:没有节点需要完整的转台。相反,交易发送者需要提供证词数据,出块者可以收集这些数据。交易者自己负责保存关心的账户,生成目击数据所需的部分状态树。

强无状态是非常优雅的解决方案,因为它把责任完全转移给了用户,为了保证实践中的良好用户体验,我们需要创造一些类型的协议来帮助不运行个人节点的用户维护状态,处理用户需要与意外的账户交流的情况。建立这样的协议非常困难。

另外,所有类型的无状态性都提高了网络所需的数据带宽,强无状态性还需要交易声明的交互账户和存储项目的键(概念上称为访问列表)。

更温和的解决方案可归纳为不同形式的状态过期方案。为了保持激活状态,必须持续访问的长期无人问津的状态会变成失活(或者被称为过期)。具体用什么机制更新状态,有很多选择(例如预付的租金或者只需访问那个状态),但一般原则是,除非某个状态对象明显更新,否则以某种形式处于失活状态。因此,创建新状态对象(更新现有状态对象)的活动只能成为节点在一定时间内的负担,而不是像现在这样永久的负担。

二级扩展项目CelerNetwork启动状态卫士网络测试网第二阶段:二级扩展项目CelerNetwork启动状态卫士网络(StateGuardianNetwork、SGN)测试网第二阶段。该项目表明,这将是主网启动前的最终测试网络,为合格的验证人提供总额1万美元的奖金。

注意,CelerSGN测试网是一个高效、通用、可扩展的集中化塔侧链,可以保证状态通道的安全性和流畅的用户体验。SGN提供包括用户通道状态在内的保护、接受支付、在中心化侧链框架中担保CELR,完成应用连接性预言机等中心化服务。[2020/9/12]

失活状态,从名字可以看出,不是状态的一部分,想处理块和块的节点不需要保存失活状态。但是,失活状态并不完全被删除!在所有类型的状态逾期建议中,预设了复活的方法,已经失活的状态。

一般原则是激活状态的使用与现在相同,但失活状态必须使用上述无状态客户端的机制。复活过期状态对象的事务需要证明该对象是失活状态的一部分。为了生成这样的证据,用户自己至少需要保存和维持一部分失活状态(对应关心的失活状态对象的部分)。

决定逾期条件的设计也有很多种。最常见的是:

直接租金:一个接一个地收取租金,直接按账户(或其他状态对象)的馀额支付的状态对象的馀额下降到零的话,账户就会到期。

剩馀生存时间值:各状态对象保存一个剩馀生存时间值,这个值可以通过支付费用增加。

接触即更新:各状态对象保存一个剩馀生存时间,每次读写这个账户都会增加这个价值。

所有状态对象定期过期(例如每月6次):即Regenesis。提案(中文翻译)

我自己越来越喜欢触摸更新了方案。因为(1)为了避免应用创造复杂的经济模型,用户需要承担状态租金),保证了活动状态的规模有明确的上限(块状Gas上限/接触状态对象的Gas消耗量×状态存在的时间)。大量状态按规定时间间隔过期的方案(即Regenesis)也有同样的优点,但也有一些有趣的权衡。重要的优点是,过期方案更简单(不需要经历整棵状态树而逐渐消失状态对象),但重要的缺点是过期后激活自己的状态对象需要多少见证数据。

声音|Overstock临时首席执行官:SEC对tZERO的调查几乎处于休眠状态:Overstock临时首席执行官Jonathanson表示,前CEO关于PatrickByrne有争议地退出Overstock,与美国SEC对该公司损失的区块链业务进行了近两年的调查。另外,Johnson表示,SEC对tZERO的调查似乎几乎处于休眠状态。Johnson表示,自2018年12月以来,SEC执法人员没有向该公司提供信息。调查似乎集中在Overstock官员发表的公开评论上,这些评论可能夸大了投资者对tZERO的兴趣。Johnson表示,有两个投资者在计划中减少股票,或者在最初表示更大的兴趣后,拒绝向该项目投资。他补充说,公司没有故意误导任何人。(foxbusiness)[2019/9/5]

状态过期的逻辑可以运营到账户水平,也可以运用到单个存储槽水平。目前,我强烈偏向于在存储槽层面实现状态过期方案。许多合同账户的存储槽数量不受限制,任何用户都可以参加合同,增加合同名义的存储槽数量(例如,空投是已经出现的案例)。无论使用什么样的账户层过期方案,为了实际限制状态的规模,租金的数量必须与合同内存储槽的数量成正比(或者生存时间成正比)。毕竟,用户只需支付一次性费用就可以给合同及其用户增加永久的持续成本。

为了解决这个问题,合同加入复杂的内部逻辑,将存储操的租金转嫁给用户,或者重新设计自己的合同模式,使用CREATE2操作代码创建新的合同,使用这些合同作为存储槽。无论用什么方法,最后都会成为与存储槽水平相等的过期方案。因此,我个人认为,我们应该只在合同存储槽水平上实现状态过期方案。

但是,存储槽水平的过期方案也有自己的缺点。各存储槽增加一元数据,表示何时过期(或者是否失活)也意味着复活冲突问题(详情请参阅以下内容)不仅会影响账户,还会影响存储槽。

从状态树上移除vs,给状态树安排退休部分。

另一个区分不同状态逾期建议的技术角度是一树流和二树流。也就是说,我们到底是像现在这样,只有一棵状态的树,还是直接把失活的状态从主状态的树上删除,转移到另一棵专业的树(只包括过期的状态)(或者其他数据)?

分析面|BTC最近小幅整理或储蓄状态:分析师Potter表示,从技术图形的动向来看,BTC在4小时前接触了19年的最高值约14000美元,到现在为止下降到了10700美元,整体的动向在大的三角区间内前后下降,最近BTC多次踩到三角下线后迎来了快速的反弹,接触到前期的4小时的重要支持是11000美元,现在又下降到了100美元[2019/7/16]

激活节点用白色标记,失活节点用灰色标记。

注意,即使是树上的中间节点,也会被标记为激活或火灾(或者更现实的计划,每个节点都会有失活日期的标记,所以很容易检查它的活性)。标记可以在状态树上的每个节点(叶子节点和中间节点)完成。

白树包含激活状态的灰树存储失活状态。

树流的优点是,至少它的工作方式看起来像现在的状态树,失活和复活的过程也很简单:复活过程只需更新树上相关节点的过期日参数,失活就会自动化。但是,其缺点是节点需要以这种方式存储过渡信息的树结构,不能很好地扩展到Verkle树。另外,需要多馀的默克尔证明部件,不仅可以沉入叶节点,还可以停在中间节点。

二树流的优点是,现在形式纯粹的状态累加器不需要为各节点增加元数据,可以支持这种方案。缺点是需要更深层次地改变整个协议,并且需要明确的流程来消除状态(因此过期不再自动化)。另外,因为没有为复活冲突的困境提供内置的解决方案,所以有必要用两种方法进行选择。

请注意,在二树流中,存储失活状态的数据结构不是非树。实际上,需要复活状态对象的情况下,只要提供指向该对象生存时收据的默克尔树,附上密码学的证据,证明该对象没有复活(或者最近过期)就可以了。

行情|BTC和BCH资金流入状态:AICoin数据显示,BTC24小时资金流入2.9亿元,ETH24小时流出6.42亿元,XRP24小时流出2.47亿元,BCH24小时流入1.76亿元[2018/7/6]

然后,我们成为状态过期方案的重要课题。复盘冲突概念如下。假设某个账户是由地址a生成的,该账户到期后,地址a又创建了新账户(例如,使用CREATE2操作代码保证两次生成的账户地址是同一个),最后地址a试图复活第一个账户。这个时候会发生什么?

这里有一些可能的解决办法

明显的账户合并流程:与规定相似,除了两个账户的约定ETH馀额累加外,还可以以旧账户的状态为基准或者除了累加ETH外,还可以以以新账户的状态为基准的旧账户的约定代码来规定特殊的合并流程。

通过消除同一地址重复部署的功能,确保复活冲突不会发生:也就是说,调整CREATE2的功能,例如,最终哈希成地址的数据原始图像包括当前时间,因此即使将来使用同一数据生成,也无法获得同一地址。

为了防止在同一位置生成新账户(上述树流方法自动实现了该功能),向状态对象增加了根

要求生成新账户时,必须附上该账户到目前为止还没有过期的证明书。在某种意义上等于存根方案,但该方法是将存根放在状态的单独部分,因此想创建合同账户的用户必须跟踪这一部分状态。

(请注意,如果我们使用存储槽的过期方案,上述任何解决方案都必须延伸到单个存储槽的水平,不能停留在账户层)

主要担心是(1)在应用程序中增加很多复杂性,他们必须加入合并逻辑(2)之后,除非在链条上注册地址,否则用户不能轻易获得可以交流、积累资产的地址(例如ERC20未注册的地址很重要。第一次收到ETH的用户使用未注册的地址。这个第二(2)担心的根源是,未注册的地址实际上有时间限制,用户生成地址,收到资金后,下一年忘记发送交易(即忘记注册),他的资金就会被锁定。

请注意。EOA也不能幸免。虽然看起来很好,但是由于EOA的合并过程比较简单(将旧的ETH馀额加入到新的中间,对于新的nonce有EIP169)的方案。但是,这里也有两个问题。首先,账户抽象的目标是用合同代替EOA,账户抽象化合同的合并流程可能不简单。其次,受到过期和复活事件的影响,不仅是EOA本身,还有这个EOA参加的相关存储建设(例如ERC20token缺乏),需要复杂的合并逻辑。

因此,从我的角度来看,破坏性最小的是某种形式的存根方案。但是,存根方案存在信息理论问题,会产生奇怪的结果。为了防止新的状态对象在n。过期的状态对象的位置制作,复盖了这个NN的地址(或者是存储键)的集合必须是状态的一部分。如果这个集合是信息最小化的(也就是说,只包括这些地址),那么这个集合的大小就是低(N),因此其状态规模也是低(N)。因此,激活状态的规模与失活状态的规模成正比,实际上没有解决这个问题。

解决这个问题的唯一方法是复盖超过n个账户的信息,实际上,我们必须让整棵树无法访问(再次注意树流解决方案的本质:如果两个账户过期,他们之间的所有空间都会隐藏过期(介绍新闻报道新闻报道新闻)。

这里还有一个问题:树发霉了。随着时间的推移,新账户的创建,状态树的所有部分都无法访问,至少对于没有跟踪该地区过期状态的用户来说。

树木发霉引起的次要问题也要解决。举个例子,如果合同要制作子合同,就必须在没有霉菌的情况下,或者在用户有目击数据的状态区域制作合同。数霉菌问题的一个解决办法就在这里。持续开放状态的新区域为账户创建。另一个想法是,每个用户选择状态的某个地区(例如状态的1/256),追踪该地区的变化(包括过期状态),制作证词,只在该地区制作账户。

树发霉的另一个问题是,它需要显示的数据结构来存储和检查范围。如果一棵树可以放在节点中,并且显示该节点以下的哪些部分已经过期的数据(如一棵树的流程解决方案所使用)是最好的,但是一个键值很难存储。

在状态过期方案中使用树木结构产生的许多问题,可以追溯到哪些状态活跃,哪些状态不活跃,需要达成共识。在二树流模式中,这更加明显,但在一树流模式中,状态树也需要明显的标记,最近使用快速同步下载状态的以太网坊节点,可以确定访问某个账户,但是没有提供证词信息的交易,应该成功还是失败。那么,没有必要明确这个区别吗?

如果我们实现了完全的无状态,然后可以帮助交易发送者和区块生产者可靠地获得见证信息生成所需的状态,难道就解决了这个问题吗?那么,怎样才能帮助交易者和块生产者呢?

自然的方法之一是网络节点只保存状态树的一部分。例如,过去一年访问的部分。只需在客户端设置中添加自愿设置即可。如果想更可靠的话,可以通过引进proofoofcoofcustody方案,至少强制矿工(后面是postofore的验证人)保存数据。

如果共识层不知道什么样的状态活跃,什么样的状态不活跃的话,访问最近的状态和旧状态的Gas的开支是一样的。这将导致两个结果:

访问最近状态的Gas开销也需要进一步提高。

包括证词信息在内的块的大小上限可能非常大。如果块中充满访问旧状态的事务的话,800件左右是800件,bytes*12.5mgas/2400gasper提升到access上~=4.1打入MB,假设实施了EIP-2929,变成了二进制树)。

如果我们想避免这些不利因素,我们需要在共识中跟踪哪些状态对象(包括尚未填充的地址空间区域)是活跃的状态,这将使我们回到接近状态过期方案的属性。无状态vs.状态过期(状态租金)是光谱,是复杂的权衡空间,不是彼此的选择。

也需要Rollup,也可以使用同样的解决方案。

以太网广场的重要中期可扩展解决方案是rollups(中文翻译)。但是,rollup本身并不需要担心状态数据的规模问题,实际上rollup系统的状态规模问题与以太网链本身完全相同。

幸运的是,如果我们能出解决方案的话,至少能够使用同样的解决方案来解决内部状态的规模问题。因此,状态规模管理方案与rollup、分片等可扩展性方案相辅相成。

(译者注:个人认为这里的互补这个词有严重的误解性。中所述情节,对概念设计中的量体体积进行分析

状态规模是日益恶化的问题,状态规模的解决方案也可以为大幅度提高块Gas铺平道路。要对某种形式的状态逾期方案达成共识,实现。但是,不同的解决方案之间有很大的技术权衡,特别是如果想保持现在设计的重要属性的话。

我们可能需要牺牲的属性包括:

用户可以线下生成账号,通过该地址领取资金,并且可以在链条上显示该地址之前默默任意时间的属性。

地址保持在20个字节的长度。地址的长度可能会因为抵抗冲突而立即改变。

状态可视为纯键值存储的属性,不需要在状态树上各节点存储元数据的属性。

现有的应用程序需要不同程度的重写,以确保用户在不存储所有失活状态的情况下生成目击数据。

Gas消耗量或创建新合同,写新存储槽的困难。

如果我们准备牺牲的话,有些方案可以马上开始实现。另一方面,也许是时间,我们可以修补或者更好地总结这些观念,减少问题,特别是技术上容易实现(例如,允许使用纯粹的键来存储)。我们应该更深入地理解自己更愿意/更不愿意接受哪些方面的牺牲,并继续积极研究改进建议。

作者:Vitalik,Buterin翻译:阿剑,在《202021年,2月。

作者:Vitalik,Buterin翻译:阿剑,在《202021年,2月。

标签:

区块链热门资讯
从六轮红包试验看数字人民币进程的推进

从六轮红包试验看数字人民币进程的推进。 导游:截至2021年2月18日,数字人民币试验形成了十地一场景(十地一)的结构,在深圳、苏州、北京进行了六次红包试验,共发行了数字人民币1亿1千万元,超过877万人参加抽签,超过50万人接受使用。总的来说,数字人民币的试验工作一直以成熟、试验、垄断面扩大、并发量增加的节奏稳步推进。

2021/2/21 16:44:18
火币行情分析周报|USDT持续增加,但溢价率从正转变为负

火币行情分析周报|USDT持续增加,但溢价率从正转变为负。 本文为火币行情分析周报,时间为2021.02.13-2021.02.20。 相距甚远,取得实质性进展可能需要一段时间,在此之前,需要保持宽松的政策。

2021/2/21 15:41:54
暴风雨龙王袭击比特币每天进入3000美元

暴风雨龙王袭击比特币每天进入3000美元。 昨晚20点,比特币的高度上升到火币网的价格为57600美元。到目前为止,本轮牛市首次月线水平上升的西游已经进入了舒适的疯唐僧段。关于最近几天的上升,上周的报道几乎完全符合现在盘面的预测。

2021/2/21 15:30:22
你相信金色观察两者吗?BTC价格预计8月份将达到115、212美元

你相信金色观察两者吗?BTC价格预计8月份将达到115、212美元。 金色财经块链2月21日,最近利用STOCK-TO-FLOW模型分析了比特币的价格,结果令人吃惊。根据这个模型,比特币在2021年8月达到了115、212美元的价格峰值。 众所周知,根据比特币协议,比特币的供应量和代币分配不是量化宽松,而是完全基于数学原则,设计原理非常透明,可以预测。

2021/2/21 14:45:22
金色观察两DeFi行业的风向在2021年迎来了新的未来吗?

金色观察两DeFi行业的风向在2021年迎来了新的未来吗? 金融中心区块链2月21日中心化金融概念从2019年开始在加密货币市场兴起,2020年被称为DeFi元年。这是因为中心化金融在Compound首次的流动性开采中爆炸,促进了行业的第一个春天。

2021/2/21 14:45:08
金色观察两算力货币知道多少?

金色观察两算力货币知道多少? 金色财经块链2月21日,现在加密货币市场的两个主要计算能力商业模式是直接购买矿山机械的采矿和云计算能力,现在又出现了新的竞争对手。今天,让金色财经和大家一起深入研究。 计算能力是矿山机械运算速度的量化指标,也是加密货币和块链行业员工最常听到的词语。

2021/2/21 14:44:45
ads