《代码分析:为什么说 Blast 完全不是 L2》
作者:Jarrod Watts
编译:金色财经 0xjs
编者按:新 L2 网络 Blast 自本周推出以来,一直都处在舆论热点。不仅有 NFT 巨鲸 Christian 将 500 枚 stETH 存入 Blast,在22日,Blast 还宣布其完成了 2000 万美元融资。不少开发者也围绕着 Blast 的代码和其本质展开争论,其中 Polygon 的 Jarrod Watts 更是直言,Blast 并不是一条 Layer2 网络。本文翻译自其 X 推文。
有人说「Blast 只是一个 3/5 多重签名……」
过去几天我深入研究了源代码,看看这个说法是否属实。
下面是我看到的一切:
1.一个新钱包 0x52c31 部署了两个合约: 1)0xa01:Blast Deposit 代理合约;2)0x5f6:Blast Deposit 实现合约。
如果你不熟悉这些「代理合约」设置,后文还会回到这个。
2.0x52c31 部署这些合约后,将所有权转移给 Gnosis Safe 智能合约。
Gnosis Safe 或「Safe2」合约是最受欢迎和最值得信赖的多重签名智能合约。它们要求大多数签名者签名才能执行交易。
3.现在拥有 Blast 合约的 Safe 合约中有 5 个签名者。
这意味着大多数(即 3/5)签名者需要代表此 Safe 合约执行交易。这 5 个钱包都是非常新的钱包,但主人不详。
4.所以 3/5 多重签名合约现在是 Blast Deposit 合约的「所有者」。
正如我们所提到的,Blast Deposit 合约由两个合约组成:代理和实现。
成为它们的「所有者」实际上意味着什么呢?
5.对于常规智能合约,一旦部署到区块链,你就无法更改代码。代理智能合约允许你对智能合约执行「升级」(更改),而无需替换整个合约。这通常用于修复错误或添加功能。
6.Blast 代理实现 OpenZeppelin 的 UUPSUpgradeable 合约。这包括诸如「_upgradeTo」之类的函数,允许更改实现合约的逻辑。这意味着用户交互的合约能够维护相同的合约地址。
7.这种可升级性的最坏情况是(多重签名)所有者将合约的逻辑更改为恶意的内容。
这听起来有点可怕,对吧?……实际上,这些「辅助功能」被当今大多数 L2 采用。
8.像 Optimism 和 Arbitrum 这样的 Optimistic Rollups 也有这个功能。
根据 L2Beat:
·保护 OP Mainnet 和 Base 系统的代码可以任意更改,恕不另行通知。
·Arbitrum One 的升级大约需要 12 天的延迟,但理事会可以毫不延迟批准。
9.zkEVM 世界也是如此
根据 L2Beat:
·保护 Linea、Scroll 和 zkSync 系统的代码可以任意更改,恕不另行通知。
·Polygon zkEVM 的升级有约 10 天的延迟(除非激活紧急状态)
10.这些 Rollup 具有可以执行升级的多重签名的原因是为了在技术成熟时实现临时安全。正如 L2Beat 在其 L2 阶段博客中概述的那样,Rollup 的最后阶段应该限制这些安全委员会解决「严重缺陷」的能力。
11.安全理事会的能力随着时间的推移而减弱。然而,成员知名度很重要。
例如,Polygon PIP-29 提议由 13 个成员来管理「对系统智能合约的范围狭窄、时间限制的变更」。
12.因此,虽然 Blast 确实有可能通过多重签名来执行代码升级并立即窃取资金,但*目前*许多其他 L2 解决方案也具有相同的功能。
到目前为止,我一直在为 Blast 辩护。但是,下面是坏消息了… 让我们继续。
13.Blast 不是 L2。
Blast 只是一个具有两个功能的智能合约: 1、接受用户的资金。2、将用户的资金投入 Lido 等协议中。
没有测试网,没有交易,没有桥,没有 Rollup,也没有向以太坊发送交易数据。这不是 L2。
14.通过向 Blast 合约存款,你基本上信任 3-5 个陌生人会为你质押你的资金。
除非这 3-5 个人决定将来做正确的事情,否则你将无法在任何时候提取这笔钱。再说一次,这里没有桥。
15.这对我来说真的很疯狂…
你无法从 Blast 取回你的钱,直到:
由陌生人组成的 3/5 多重签名部署了一份新合约;
该合约具有从中提取资金的功能;
他们将所有资金转移到新合约中。
16.但是,还有更糟的情况。
我可以告诉你,他们甚至不需要进行「升级」来窃取合约中的所有资金,而这个合约里用户存进的资金其他人都不能取出。
我们接着看。
17.函数「enableTransition」要求「mainnetBridge」合约作为参数。
这个「mainnetBridge」合约的功能: 获取所有质押的 ETH 、DAI。
那么,这个「mainnetBridge」合约什么样?
18.它绝对可以是任何东西!Blast 批准任意「mainnetBridge」合约,以花费最大可能数量的 LIDO 和 DAI…
这个合约的正确性肯定有一些限制?好吧,*是的*,让我们看看该代码。
19.下面是「_setMainnetBridge」函数中的断言语句。
它… 检查该地址是否有任何代码!是的,只要它不是 EOA 地址即可;它已批准拥有合约中的所有资金。目前资金总量已经超过 2 亿美元。
20.因此,可以假设,它们可以:
1)创建一个极其简单的智能合约并将其设置为 mainnetBridge 合约;
2)让该智能合约接收所有质押的 ETH 和 DAI(2 亿+)
调用智能合约将所有资金提取到 EOA 钱包。
21.我们发现的两个主要威胁是:
·经 3/5 多重签名批准升级恶意代码以窃取资金。
·制作恶意智能合约并将其设置为「mainnetBridge」智能合约来窃取资金,同样是通过 3/5 多重签名。
22.这会真的发生吗?就我个人而言,如果我必须猜测的话,我认为资金不会被盗。
无论如何,我实际上认为 Blast 原生收益的想法是一个非常有趣的权衡。
23.因此,虽然我个人认为在目前的状态下发送资金到 Blast 是有风险的,但发送不发送最终是用户的决定,我只是在这里分享我看到的东西。
我仍然祝愿 Blast 团队和所有已经存款的人一切顺利。
文章来源于互联网:Polygon工程师:为什么说Blast完全不是L2?