主页 > imtoken钱包下载app > 以太坊真实全节点不足100个欺诈证明如何弥补网络的安全性?

以太坊真实全节点不足100个欺诈证明如何弥补网络的安全性?

imtoken钱包下载app 2023-07-21 05:19:16

关于比特币和以太坊的节点对比,社区最常用的方法是使用节点统计网站的数据。 例如,目前 bitnodes.earn.com 统计的比特币节点数为 10459,而 ethernodes.org 统计的以太坊节点数为 8580。乍一看,两大区块链网络似乎势均力敌分裂。

p2

(比特币节点数)

p4

(以太坊节点统计)

不是这样。

我们首先需要了解的背景是,目前完整的比特币区块链交易数据大小约为200GB,而完整的以太坊区块链数据是比特币的10倍,接近2TB。

以太坊的状态爆炸让用户完全存储数据变得不现实。 因此,以太坊目前的8000多个节点中,绝大部分都是经过剪枝的全验证节点。 这类全量验证节点称为全节点,完整存储历史状态数据的节点称为存档节点(Archive Node)。 今天,整个以太坊网络中的存档节点不到 100 个。

比特币的全节点其实相当于以太坊的“存档节点”。 当然,比特币也有类似的剪枝节点,这是Bitcoin Core 0.12.0客户端之后提供的功能。

而这种剪枝节点也可以独立完成比特币的转账确认,但不会在本地保存整个区块链,因此无法向其他节点提供完整的区块链。

可以说,无论是比特币的全节点,还是以太坊的文件节点,都是各自网络的主干。 如果网络完全失去它们,网络的安全性将大大降低,而这样的节点越多,代表网络的抵抗力越强。

让我分享一个关于真实的以太坊全节点的悲惨故事(来自 BlockCypherCEO):

“由于君士坦丁堡硬分叉,BlockCypher 的以太坊 API 几乎被淘汰了一个月。 这篇文章解释了发生了什么,我们吸取了哪些教训,以及我们正在做什么来防止此类事件在未来发生。” 停机事故。

为君士坦丁堡硬分叉做准备

以太坊团队在 2018 年 12 月中旬宣布,以太坊将于 2019 年 1 月进行君士坦丁堡硬分叉。开发者表示,即将到来的分叉将是以太坊历史上最不重要的一次分叉。 我们不同意,这个硬分叉影响了数百个源文件。 按照以太坊官员概述的协议,我们主动开始按照他们的指示进行操作,其中还涉及修改我们的备份存储。 我们的团队在圣诞节期间加班加点,并在 2019 年 1 月的第一周完成了这项工作。

我们以为我们已经准备好了。

1月8日,出大事了

1 月 8 日晚上,我们意识到我们的以太坊状态出了问题,但我们不知道发生了什么,我们只知道丢失了一些小数据。 以太坊的状态是不可解释的,所有数据都被散列成树状结构,这使得无法找出问题所在。

我们尝试了多种恢复程序,但均未成功。 我们不断收到丢失数据错误(一个 Trie 节点)。

在多次尝试发现和恢复丢失的数据后,我们开始了“快速”同步过程:用了2天多的时间才完成“快速”同步。 不幸的是,它没有帮助我们恢复丢失的数据,也没有帮助我们恢复状态。

你可能会问:

为什么快速同步不起作用? 因为它只包含整个区块链数据的一小部分。 为了可靠地服务和操作我们的 API,我们需要所有数据。

为什么我们不在君士坦丁堡更新之前备份我们的状态? 我们做到了,但它被恢复部分破坏了。 此外,以太坊状态不是一个可以轻松备份和修补的数据库。 它不能在以太坊节点在线时完成,也不能增量(远远超过 1 TB)。

(第 1 课:以太坊状态与其他区块链有很大不同。它无法使用任何传统备份方法恢复。)

完美同步的长征开始了。

作为最后的手段以太坊稳定节点,我们在 1 月 12 日开始对超过 2TB 的以太坊状态进行“完全”同步。 知道我们必须处理的规模,我们升级到可用的最大机器,试图使同步工作更快,但没有太大帮助。

我们无助地等待和检查。

1 月 14 日,君士坦丁堡硬分叉在生效前一天被推迟,显然是在安全审计发现了一个允许潜在攻击者从智能合约中窃取加密货币的漏洞之后。 我们对最后一刻的取消感到非常沮丧。 如果我们等到君士坦丁堡生效之后再实施它,我们可以节省大量的工作、焦虑和费用……而且我们的 ETH API 将始终有效。

(第 2 课:不要提前计划以太坊升级,等待它们发生。)

两周后,我们了解到“完全”同步实际上并不是完全状态修复。

两周多一点后,我们的以太坊状态恢复了,但这并不是我们灾难的结束。 因此,完全同步默认不包括完整的 Trie 状态。 如果您正在进行完全同步,为什么默认设置不包含所有内容? 这违背了逻辑,我们的下一个挑战是如何将 Trie 状态添加到“完整”状态。

Vitalik,请帮忙!

在研究了所有我们能想到的将 Trie 状态添加到以太坊状态的方法之后,我们向 Vitalik 寻求帮助。 他给我们的第一个回复是:“哦,你们是为数不多的运行那些大而可怕的节点的运营商之一。” 我们问他是否知道其他人在运行一个“大而可怕的节点”,看看我们是否可以与他们同步,但 Vitalik 不知道任何人,尽管以太坊基金会也保留了以太坊的完整存档副本区块链。 我们别无选择,只能再次开始完全同步,这次包括 Trie 状态。

(第三课:如果有链重组,可能只有我们知道以太坊的交易历史)

...

而另一种只下载区块头交易或状态数据的节点,我们称之为简化支付验证(SPV)节点,也称为轻节点,比特币和以太坊都有这样的节点。 (目前,研究人员提出了简化版的SPV节点,也称为超轻节点,如FlyClient)

正常情况下,SPV轻节点运行良好,但当大部分全节点出现失信行为时,轻节点的安全保障就会变弱。 例如,虽然比特币或以太坊网络中的大多数不诚实节点目前只能审查、逆转或重新排序交易,但如果所有客户端都使用轻节点,则多数共识将能够相互勾结以生成交易块,从而创建钱是凭空而来的,轻节点将无法检测到这一点。 另一方面,全节点会立即拒绝无效块。

由于以太坊的数据量太大,它遇到的挑战会更大。 为此,以太坊创始人等研究人员提出了欺诈证明方案和数据可用性证明系统(论文:Fraud Proof: Passing the majority Non-honest nodes, to maximize light client security and scale the blockchain)。

简单地说,如果以太坊网络有一个诚实的全节点愿意生成以最大网络延迟传播的欺诈证明,那么轻客户端可以从全节点接收并验证无效的区块欺诈证明以太坊稳定节点,同时数据的可用性证明系统负责使轻客户端能够确保全节点生成欺诈证明所需的区块数据可用。

这样,以太坊轻客户端的安全级别就可以接近全节点。 当然,这只是理论上的。

总的来说,就目前的情况来看,比特币的节点健康状况要好于以太坊,后者需要付出更多的努力来解决这个问题。