我的团队正在验证一个?“状态可得性”问题的解决方案是否可行。
方案概述
我们的方向大致如下:
网络是一个分布式哈希表。
账户和合约存数据存储在它们各自的trie节点中。
网络中的节点拥有所有区块头数据。
每个区块中新的trie数据都以证明的形式发送到网络中。
我们将这个方案称为GetNodeData方案,因为它与快速同步方案获取状态的方式差不多。
trie节点vs叶节点证明存储
我们选择将数据存储在各个trie节点中,因为这样比较简单。
Glassnode:目前流通中的约570万枚比特币的持有者处于浮亏状态:金色财经报道,Glassnode在其每周通讯中表示,随着加密货币持续下跌,目前流通中的约570万枚比特币的持有者处于浮亏状态,其所持比特币的价值低于他们买入时的价格,这相当于比特币流通供应量的30%左右。[2022/1/20 9:00:50]
另一种方法是仅存储叶子节点的值和附带的证明。这个方法比较复杂,因为证明需要不断更新。更新证明可以在本地完成,但是需要进行EVM计算并广播完整的区块见证消息。EVM计算成本很高,而完整的区块见证消息很大。
通过将数据存储在各个trie节点中,网络节点只需存储这些trie数据,并验证新数据的默克尔证明即可。
深圳某科技公司申请的两枚“元宇宙”商标状态变更为“已注册”:12月9日消息,天眼查App显示,近日,深圳某科技公司申请的两枚“元宇宙”商标状态变更为“已注册”,国际分类为金融物管、运输贮藏,商标专用权期限为2021年11月14日至2031年11月13日,其商标申请日期为2021年4月29日。[2021/12/9 13:00:40]
迄今为止的发现
预期延迟
基于DiscV5DHT的经验,我们预期网络查询时间约为100毫秒。
每笔交易的Trie节点
NickGheorghita一直在研究常见交易类型所涉及的trie节点的数量。在样本数量较少的情况下,他得到的初步结果是:
币安加入Celer状态守卫者网络,上线CELR锁仓:据官方消息,币安今日上线Celer状态守卫者网络节点,宣布加入状态守卫者网络并与Celer共同维护其二层扩容网络的可用性和安全性。币安同时上线了面向所有身份认证用户的质押产品,本次币安节点的加入也标志着Celer状态守卫者网络成功进入主网第二阶段。
?Celer状态守卫者网络(State Guardian Network,以下简称SGN)是一个可扩展的、去中心化的“瞭望塔”侧链,通过一个分布式状态监控网络的架构,保证二层网络在用户离线时状态的持续保存,确保了二层状态通道网络的可用性和安全性。
?Celer Network致力于以链下扩容技术为基石构建匹配互联网规模的区块链应用入口平台,让所有人都能够在该平台上便捷快速地开发、运行与使用高性能的分布式区块链应用。[2021/2/4 18:54:30]
简单价值转移:~30个trie节点
动态 | 比特币基金会网站出现故障 董事会成员称不清楚状态但明确基金会运行正常:BitMEX Research今日发推文称,在其提交关于比特币基金会的报告后,比特币基金会网站似乎宕机了,且仍未恢复正常。BitMEX Research质疑比特币基金会已被关闭。随即向比特币基金会几个成员求证,并出示相关工资财务报表,询问比特币基金会薪资发放状况。对此,比特币基金会董事会成员兼前执行董事Bruce Fenton回应称,比特币基金会仍正常运行,但不确定网站是什么状态,因为其管理者都是志愿者。Bruce Fenton还表示,基金会董事会成员都是志愿者。前执行董事有报酬,但几个月前就离职了,且不确定其离职确切日期。现在基金会没有带薪员工。就其个人而言,Bruce Fenton称其从来没有从基金会得到过任何报酬,也没有捐献过超过25个比特币,也没付出很多时间。注:BitMEX Research曾于9月3日、9月23日、9月27日相继发布比特币基金会报告及更新;经查,比特币基金会网站目前似乎仍未恢复正常。[2019/10/25]
ERC20转账/批准:~50个trie节点
如果延迟为100毫秒,则执行eth_estimateGas和eth_call需要的时间上限分别为3秒和5秒。我们还可以通过一些基础的优化来降低延迟。
我们正在进行更深入的实验,来测量大型主网交易区块的延迟情况。
垃圾回收和冷状态
BrianCloutier已经对冷状态访问模式进行了一些调查。
关于冷状态的定义,请参见这张术语表。
的那部分状态。)
Brian的发现是,大多数区块都会触及之前100万个区块都没有触及的状态。
这就涉及到垃圾回收。
如果网络有足够的空间存储完整的归档状态,我们就不需要垃圾回收。
如果网络没有足够的空间来存储完整的归档状态,则该网络必须执行某个机制来防止冷状态丢失。
待解决问题
重复数据删除和垃圾收集
存储trie相同的两个合约拥有同样的trie节点。
同样地,余额、nonce、代码和状态相同的两个账户的账户数据也存储在同样的叶节点上。如果我们使用节点哈希作为键来存储节点,必须通过引用计数来实现垃圾收集,否则就无法知道从一个trie中移除的节点有没有在另一个trie中使用。
一种解决方法是,将节点在trie中的位置及其节点哈希作为键。这样可以使用排除证明来删除节点,但是会因为需要存储重复数据而造成额外的成本。
一个待解决问题是,这会在多大程度上提高存储需求。
归档vs垃圾收集
我们需要想清楚如何实现垃圾回收,或者说,确认网络是否可以成为归档节点。
解决垃圾回收问题的方案:
移除重复数据删除机制,并使用(trie_path,node_hash)作为键来查找数据。
监控网络并主动重新添加冷状态。
弄清楚垃圾回收的子集是否可以仅发生在账户trie中的中间trie节点上。
确保网络能够像归档节点那样运行。
数据入站
我们需要将新创建的trie数据推送到网络中。网络中的节点预期会存储所有区块头的最新快照,从而将证明与最新状态根锚定。
待解决问题有:
新的trie数据的完整区块证明有多大?
区块证明中每个节点各自的证明有多大?
原文链接:
https://ethresear.ch/t/state-availability-getnodedata-dht-approach-dev-update/8657
作者:??PiperMerriam
翻译&校对:?闵敏&?阿剑
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。