比特币交易 比特币交易
Ctrl+D收藏比特币交易
ads

以太坊状态规模管理诸提议(下)

作者:

时间:2/16/2021 4:47:20 PM

观点 | 以太坊状态规模管理诸提议(上)

从状态树上移除 vs. 给状态树安排一个 “退休” 部分

另一个区分不同状态过期提议的技术角度是 “一树流” 和 “二树流”。也就是说,我们到底是像现在这样,只有一棵状态树,只不过把某些状态标记为过期;还是直接把失活的状态从主状态树上移除,转移到另一棵专门的(只包含过期状态的)树(或者其他数据)上?

一树流

- 激活节点以白色标记,失活节点以灰色标记 -

注意,即使是树上的中间节点,也会被标记为激活或者失火(或者,更现实一点的方案,每个节点都会带有失活日期的标记,所以能够容易检查其活性);标记工作可以在状态树上的每个节点(叶子节点和中间节点)处完成。

二树流

- 白色的树包含激活状态;灰色的树存储失活状态 -

一树流的好处是,最起码,其工作方式看起来会跟当前的状态树相似,失活和复活的流程也比较简单:复活流程只需刷新树上相关节点的 “过期日期” 参数,而失活则是自动化的。但它的缺点在于:它需要一种能够在节点中以此种方式存储过渡信息(intermediate information)的树结构,而且不能很好地扩展到 Verkle 树。此外,它还需要额外的默克尔证明元件,不仅要能够下沉到叶子节点,还要能够(在需要证明某部分状态已经过期时)停在中间节点处。

二树流的好处是:当前的、形式纯粹的状态累加器就能支持这类方案,而无需为每个节点增加元数据。缺点是,它需要对整个协议做一些更深层次的变更,而且需要一个显式的流程来灭活状态(所以过期不再是自动化的了)。另外,它也没有为复活冲突两难(见下一节)提供内置的解决方案,所以需要在两种办法中作出选择。

注意,在二树流中,存储失活状态的数据结构不是非树不可。事实上,完全有可能出现这样一种设计:需要复活一个状态对象时,只需提供一个指向该对象失活时候收据的默克尔树,再附上一些密码学证据,证明此前该对象未被复活过(或者最近又重新过期),即可。

复活冲突

然后我们就到了状态过期方案的一个关键难题上:“复活冲突”。复活冲突的概念如下。假设某个账户由地址 A 生成;这个账户过期了;然后,地址 A 又创建了一个新的账户(例如,使用 CREATE2 操作码保证两次生成的账户的地址是同一个);最后,地址 A 再尝试复活那个最开始的账户。这时候会出现什么情况?

这里有几种可能的解决方案:

显式的 “账户合并” 流程:类似于规定 “除了两个账户的 ETH 余额相累加以外,以旧账户的状态为准”或者 “除了累加 ETH 之外,以新账户的状态为准”;甚至于,可以由旧账户的合约代码来规定特殊的合并流程

通过消除同一地址重复部署的功能来确保复活冲突不会发生:也就是调整 CREATE2 的功能,比如在最终哈希成地址的数据原像中包含当前时间,因此即使未来使用同样的数据来生成,也无法得到同样的地址

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

要求生成新账户时都必须附带该账户此前未过期的证明:某种意义上等价于存根方案,只不过这种办法是把存根放在状态的一个单独部分中,所以任何想要创建合约账户的用户都必须跟踪这部分状态

(注意,如果我们使用存储槽过期方案,则上述任一解决方案都必须延伸到单个存储槽层面,而不能止步于账户层)

主要的担忧有:(1)会给应用增加很多复杂性,他们需要加入合并的逻辑;(2)这样做了之后,除非在链上 “注册” 一个地址,否则用户就没法再轻易获得可以与之交互、可以积累资产(例如 ERC20 token)的地址了。未注册的地址是很重要的:任何第一次收到 ETH 的用户都是在使用一个尚未注册的地址。这第 (2) 的担忧的根源是:未注册的地址实际上有了时间限制,如果用户生成了一个地址、收到了资金,但在接下来一年里忘了发送交易(也就是忘了 “注册”),那他的资金就会被锁住。

注意,EOA 也不能幸免。虽然看起来能够,因为 EOA 的合并流程比较简单(只需把旧的 ETH 余额加到新的里,对 nonce 则有 EIP 169)这样的方案。不过,这里也有两个问题。首先,账户抽象的目标是用合约来替代 EOA,而账户抽象化的合约的合并流程可能并不简单。其次,会受过期和复活事件影响的不仅有 EOA 本身,还有该 EOA 所参与的应用中的相关存储键(例如 ERC20 token 余额),所以还是需要复杂的合并逻辑。

因此,从我的角度来看,破坏性最小的是某种形式的存根方案。不过,存根方案里存在一个信息理论问题,会导致一些奇怪的结果。为了防止新的状态对象在 N 个已经过期的状态对象位置处创建,一个覆盖(cover)了这 N 个地址(以及/或者 存储键)的集合必须是状态的一部分。如果这个集合是信息最小化的(即,只包含了这些地址),那么这个集合的大小会是 O(N),因此其状态规模也是 O(N);那么,激活状态的规模就将与失活状态的规模成比例,所以实际上我们并没有解决这个问题。

Tree rot

解决这个问题的唯一办法就是覆盖超过那 N 个账户的信息;实际上,我们将不得不让整棵树都变得不可访问(再次提醒,这就是一树流解决方案的实质:如果两个账户过期了,它们之间的所有空间都会隐式过期( if two accounts get expired, all the space in between them also implicitly gets expired))。

而这里还有一个问题:这产生了一种形式的 “树发霉(tree rot)”,随着时间推移,对于新帐户的创建来说,状态树的所有部分都是不可访问的,至少对那些没有跟踪该区域过期状态的用户来说是这样的。

而树发霉导致的次生问题也必须解决。举个例子:如果一个合约要创建子合约,它必须能够在要么未发霉,要么用户具有见证数据的状态区域创建合约(也许需要用户提供的 “提示”)。树发霉问题的一个解决方案见此处:持续地开放状态的新区域以供账户创建。另一种思路是每个用户都选择状态的某些区域(例如状态的 1/256),跟踪该区域的变化(包括过期状态)以便能创建见证消息,并且只在该区域创建帐户。

树发霉的另一个问题是,它需要一个显式的数据结构来存储和检查范围。如果一棵树有能够放在节点中、指明该节点以下的哪些部分已经过期的数据(就像一树流解决方案所用的那样),那是最好的,但一个键值对存储要做到这一点还是相当有难度的。

在状态过期方案中使用树结构所产生的许多问题,都可以被追溯到这样一个事实:我们需要对哪些状态是活跃的、哪些状态是失活的,达成共识。在二树流模式中,这一点更加明显;但即使是在一树流模式中,状态树上也需要有显式的标记,以便近期使用快速同步下载了状态的以太坊节点能够确定一笔尝试访问某个账户、但又没有提供见证消息的交易,应该成功还是失败。那我们能不能做到不需要明确这个区别呢?

如果我们实现了完全的无状态性,然后能帮助交易发送者和区块生产者可靠地获得见证消息生成所需的状态,不就解决这个问题了吗?那什么办法能帮助交易发送者和区块生产者做到这些呢?

一种自然而然的办法是:网络中的节点都仅保存状态树的一部分,例如,在过去一年中访问到的那部分。只需在客户端设定中加入一个自愿的设定即可。如果我们想要更可靠一些,我们可以通过引入一种 proof of custody 方案,强制至少矿工(后面就是 PoS 的验证者)存储一些数据。

有一点需要注意:如果共识层不能感知哪些状态是活跃的、哪些状态是失活的,那访问近期状态和老旧状态的 Gas 开销就是一样的。这会导致两个结果:

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

包含了见证消息的区块大小上限可能非常之大,如果一个区块里满是访问老旧状态的事务的话(大概是 800 bytes * 12.5 m gas / 2400 gas per access ~= 4.1 MB,已假设实行了 EIP-2929,转成了二进制树)

如果我们想避免这些不利因素,就需要在共识中跟踪哪些状态对象(包括尚未填满的地址空间区域)是活跃状态,这又会让我们回到接近于状态过期方案的属性。这再一次地说明了,“无状态性 vs. 状态过期(状态租金)” 是一条光谱,是一个复杂的权衡空间,而不是一个非此即彼的选择。

以太坊的一种重要的中期可扩展性解决方案是 rollups(中文译本)。不过,rollup 本身并非不再需要担忧状态数据规模问题;实际上,rollup 系统的状态规模问题,与以太坊链本身的,性质完全相同。

幸运的是,如果我们能推出一种解决方案,则至少 EVM rollup(尝试最大程度复制以太坊运行环境的 rollup 方案)能够使用同样的解决方案,来解决其内部状态的规模问题。因此,状态规模管理方案,与 rollup 和 分片等可扩展性方案是互补的(state size management is complementary to rollups, sharding and other scaling strategies)。

(译者注:个人认为此处的 “互补”一词有严重误导性。)

状态规模是一个日益恶化的问题,而状态规模的解决方案也能为大幅提高区块 Gas 上限铺平道路。我们应该对某种形式的状态过期方案达成共识并加以实现。不过,不同的解决方案之间存在重大技术权衡,尤其如果我们还想要保持当前设计的一些重要属性的话。

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

用户可以离线生成账户并以该地址接收资金、并且在使该地址在链上显明之前可以静默任意时长的属性

地址保持 20 字节的长度(rolling state expansion 方案需要更大的地址空间,虽然地址的长度可能本来就需要为抗碰撞的缘故很快改变)

状态可以被视为 “纯粹的” 键值对存储的属性,以及无需在状态树上每个节点内存储元数据的属性

现有的应用需要程度不等的重写,以保证用户无需存储全部失活状态就能生成见证数据

Gas 消耗量;或者创建新合约、写入新存储槽的难度

我们如果已经准备好作出牺牲,有些方案可以很快开始着手实现。另一方面,也许假以时日,我们能修补或者更好地汇总这些观念,减少问题,尤其是使它们在技术上更容易实现(例如,允许使用 “纯粹的” 键值对存储)。我们应该更深入地理解我们 更愿意/更不愿意 接受哪些方面的牺牲,并继续积极研究改进提案。

原文链接:

https://hackmd.io/@HWeNw8hNRimMm2m2GH56Cw/state_size_management

作者: Vitalik Buterin

翻译: 阿剑

- 激活节点以白色标记,失活节点以灰色标记 -

- 白色的树包含激活状态;灰色的树存储失活状态 -

以太坊的一种重要的中期可扩展性解决方案是 rollups(中文译本)。不过,rollup 本身并非不再需要担忧状态数据规模问题;实际上,rollup 系统的状态规模问题,与以太坊链本身的,性质完全相同。

原文链接:

https://hackmd.io/@HWeNw8hNRimMm2m2GH56Cw/state_size_management

作者: Vitalik Buterin

翻译: 阿剑

星火矿池邱晓栋:预计以太坊将长时间出现“PoW+PoS”双挖现象:在今日由A网(AEX)主办,金色财经联合出品的“矿业新机遇”线上论坛中,星火矿池商务负责人邱晓栋针对“以太坊挖矿现状及未来预期”作出个人分享:目前以太坊显卡挖矿生存力强,预计未来以太坊会出现很长一段时间“PoW+PoS”双挖的现象。 \n2019年的牛熊波动曾导致BTC暴跌,很多ASIC矿机到达了“关机币价”,只能被迫选择关机或者亏本硬扛,而以太坊的显卡矿机就可以测算币种收益进行切换,生存力非常强。以太坊转PoS是技术革新的必然,但它不太可能一夜之间全部转PoS,因为放弃多年发展积累且守护公链安全性的PoW算力的代价过大,因此预计未来以太坊会出现很长一段时间“PoW+PoS”双挖的现象。[2020/3/4]

动态 | 报告:Upbit被盗以太坊已有20,520枚被黑客完成:1月17日消息,Uppala Security发布的最新报告显示,加密货币交易所Upbit被盗的以太坊中,总计20,520枚已经被黑客小额转移到交易所进行了。黑客的交易平台包括火币、Bittrex、Bitfinex等交易所。报告还称,黑客们仍在试图洗清被偷走的34.2万枚ETH的剩余部分,且没有任何限制。(Crypto Globe )[2020/1/17]

英国数字资产服务公司Crypto Facilities推出以太坊期货合约:据Coindesk报道,英国创业公司数字资产交易服务公司Crypto Facilities已经推出了以太坊期货合约服务,这家公司是一家受到监管的企业。[2018/5/11]

标签:

区块链热门资讯
比特币:区块链世界的前菜

狂人本着负责,专注,诚恳的态度用心写每一篇分析文章,特点鲜明,不做作,不浮夸! 本内容中的信息及数据来源于公开可获得资料,力求准确可靠,但对信息的准确性及完整性不做任何保证,本内容不构成投资建议,据此投资,责任自负。

2/16/2021 6:13:48 PM
从以太坊地址分析加密做市商 Wintermute到底有多少资金

The Block 研究分析师从加密货币市场上规模最大的做市商之一 Wintermute 的以太坊地址中找到一些亮点。 Wintermute 已经成为当前加密货币市场上规模最大的做市商之一,根据当前月交易量数据显示,Wintermute 已经成为 Bitfinex 上排名第一个的做市商,而且在加密衍生品交易所 FTX 上也十分活跃。

2/16/2021 5:36:02 PM
Filecoin不可续期算力有何影响?

从2020年8月25日Filecoin太空竞赛1截止到现在,已经有5个多月了。我们都知道扇区生命周期是180至540天,而2020年11月24日是个分水岭,在此之前的扇区是不可续期的,因而未来会面临大量算力下掉的情况。那么具体会有多少算力不可续期?以及会造成怎样的影响? 首先我们看看为何会出现算力下掉的情况。

2/16/2021 5:30:24 PM
以太坊状态规模管理诸提议(下)

观点 | 以太坊状态规模管理诸提议(上) 从状态树上移除 vs. 给状态树安排一个 “退休” 部分 另一个区分不同状态过期提议的技术角度是 “一树流” 和 “二树流”。

2/16/2021 4:47:20 PM
20 亿美元?一文读懂 Flow 与 Dapper Labs 高估值背后的逻辑

Flow 是什么? Flow 是一个快速、去中心化、对开发者友好的区块链,为解决区块链的可扩展性问题而推出,旨在作为新一代游戏、应用以及为其提供动力的数字资产的基础。它基于独特的多角色架构,在速度和吞吐量方面进行大规模改进,同时保留了一个对开发者友好、符合 ACID 的环境。

2/16/2021 4:41:44 PM
波卡生态项目 KILT 的平行链发展路径

随着 KILT 主网上线的临近,KILT 的 CEO 以及创始人 Ingo Rübe 分享了他们接下来几个月的计划。未来将继续通过他们的博客、Twitter 和 Telegram 频道向大家更新 KILT 的里程碑事件和对外合作关系。首先来分享下简要概述。 KILT 为 Web 3.0 世界中的可验证凭证提供了一个基础层。

2/16/2021 4:41:39 PM
一文读懂艺术代币化的历史

概要 1)行业内的一个主要问题是中心化。 2)区块链特性将大大减少甚至完全消除欺诈行为。 3)投资者尤其受益于所有权的即时转移,当艺术品被代币化,代币可以24/7交易。 本文将详细解读颠覆性的区块链技术如何将金融、科技、法律融合在一起,为逐渐兴起的“数字复兴” 打造完美的解决方案。

2/16/2021 2:54:29 PM
ads