Blast是一个3/5多重签名的存款合约,可以用来修复错误或添加功能,但没有L2,测试网,桥接,rollup等功能。用户需要信任3-5个陌生人为他们抵押资金,才能提取资金,但存在潜在风险,最终由投资者自己决定。
原文标题:"Blast is just a 3/5 multisig..."
原文作者:Jarrod Watts
原文来源:twitter
编译:Kate, 火星财经
注:本文来自@jarrodWattsDev 推特,火星财经整理如下:
“Blast 只是 3/5 多重签名……”
我花了几天时间深入研究源代码,看看这个说法是否属实。
以下是我学到的一切:
让我们从头开始。
一个新的钱包0x52c31部署了两个合约:
1/ 0xa01:Blast存款代理合约
2/ 0x5f6:Blast存款执行合约
如果你不熟悉这些“代理合约”设置,我们将在稍后讨论。
在0x52c31部署这些合约后,它将所有权转移到Gnosis Safe智能合约。
Gnosis Safe或“Safe”合约是最受欢迎和最值得信赖的多重签名智能合约。
它们需要大多数签名者签名才能执行交易。
现在拥有Blast合约的Safe合约中设置了5个签名者。
这意味着大多数人,即3/5的签名者需要代表该Safe合约执行交易。
这5个钱包都很新,主人不明。
好的,一个3/5多重签名合约现在是Blast 存款合约的“所有者”。
正如我们所提到的,Blast 存款合约包括两个合约,代理和实现。
但作为“所有者”到底是什么意思呢?
对于常规的智能合约,一旦它们被部署到区块链上,你就不能改变代码。
代理智能合约允许你对智能合约执行“升级”(更改),而无需替换整个合约。
这通常用于修复错误或添加功能。
Blast代理实现了OpenZeppelin的UUPSUpgradeable合约。
这包括像“_upgradeTo”这样的函数,允许实现合约的逻辑改变。
但这意味着与用户交互的合约能够保持相同的合约地址。
这种可升级性的最坏情况是,所有者(多重签名)将合约的逻辑更改为恶意的东西。
这听起来有点吓人,对吧?
嗯…实际上,这些“辅助轮(training wheels)”已被大多数L2采用。
Optimistic Rollups像Optimistic和Arbitrum也有这个功能。
根据L2Beat:
- OP主网和Base的代码,允许系统可以任意更改,无需通知。
- Arbitrum One有大约12天的升级延迟,但议会可以立即进行
在zkEVM世界中也是如此:
根据L2Beat:
- Linea, Scroll & zkSync的代码,允许系统可以任意更改,无需通知。
- Polygon zkEVM有10天的升级延迟(除非激活紧急状态)
这些rollup具有可以执行升级的多重签名的原因是为了在技术成熟时实现临时安全。
正如L2Beat在其L2阶段博客中概述的那样,rollup的最后阶段应该限制这些安全委员会解决“严重缺陷”的能力。
安全委员会的能力会随着时间的推移而减弱。
然而,让公众知道这些成员也是很重要的。
例如,Polygon PIP-29提出了13个成员来管理“对系统智能合约的范围狭窄、时间限制的变更”。
https://twitter.com/0xPolygonLabs/status/1714974723682009418
因此,虽然Blast确实有可能通过多重签名执行代码升级并立即窃取资金,但*目前*许多其他L2解决方案也具有相同的功能。
到目前为止我一直在捍卫 Blast...
但是,现在是坏消息的时候了……让我们继续。
Blast不是L2。
Blast智能合约:
1/接受用户资金。
2/将用户资金投入LIDO等协议。
没有测试网,没有交易,没有桥接,没有rollup,也没有向以太坊发送交易数据。
它不是L2。
通过向Blast合约汇款,你基本上信任3-5个陌生人为你抵押资金。
除非这3-5个人决定在未来做正确的事情,否则你将无法在任何时间点提取这笔钱。
再说一遍,这里没有桥。
这对我来说真的很疯狂,哈哈…
Blast没有办法把你的钱拿回来,直到:
- 由陌生人组成的3/5多重签名部署新合约
- 那份合约有一个功能,可以让你从中提取资金
- 他们将所有资金转移到新合约上
但是,情况会变得更糟。
如果我告诉你他们甚至不需要做“升级”来窃取合约中的所有资金(没有人可以提取),怎么办?
好吧,让我看看。
函数“enableTransition”请求一个“mainnetBridge”合约作为参数。
这个“mainnetBridge”合约:
- 获取所有质押的 ETH
- 获取所有 DAI
那么,这个“mainnetBridge”合约是什么?
嗯,它绝对可以是任何东西!
Blast批准了任意的“mainnetBridge”合约,以花费尽可能多的LIDO和DAI…
合约的内容肯定是有限制的,对吧?
好的,是的,让我们看看代码。
这里是“_setMainnetBridge”函数中的assert语句。
它……检查地址是否有任何代码!
是的,只要不是EOA地址就行,已获批准拥有合同中的所有资金。已经超过 2 亿美元了。
所以,假设地说,他们可以:
1/创建一个极其简单的智能合约,并将其设置为mainnetBridge合约
2/让该智能合约接收所有的质押ETH和DAI (2 亿+)
调用智能合约将所有资金提取到EOA钱包中。
我们研究的两个主要威胁是:
1/恶意代码升级被3/5多重签名批准窃取资金。
2/恶意智能合约被制作并设置为“mainnetBridge”智能合约来窃取资金,同样是通过3/5多重签名。
现实地说,这会发生吗?
就我个人而言,如果要我猜的话,我认为资金不会被盗。
顺便说一句,我认为Blast的原生收益理念是一种非常有趣的权衡。
所以虽然我个人认为在目前的状态下发送Blast资金是有风险的,但最终这是你的决定,我只是在这里分享我的经验。
我仍然祝愿 Blast 团队和所有已经汇款的人一切顺利。