今年 7 月 由 ConsenSys 团队开发的 Layer2 网络 Linea 宣布向整个社区开放 Linea Mainnet Alpha 访问,正式加入 Layer2 大战。
在众多 L2 方案中,Linea 与 zkSync、 Optimism 等其它 Layer2 相比有何优势?Linea 生态系统目前情况如何?Linea 安全原则与最佳实践是什么?
为探寻这些问题,同时也为更加广泛地传播 Linea 生态的技术和愿景,同时鼓励更多 Web3 开发者积极参与在 Linea 生态中部署和创新,9 月 19 日,区块链安全团队 ScaleBit 携手 Linea 和 Web3 Future,联合主办了以 From Alpha To Peak, Let』s Dive Into Linea! 为主题的线下活动。
期间,众多 Web3 领域从业者汇聚一堂,面向 Linea 生态深入交流,分享洞见,激发创新思维。来自 ScaleBit 团队的安全研究员 Alex 以 Linea 的安全原则与最佳实践为切入点,为与会者呈现了精彩的技术分享。
现在,我们将 Tech Talk 整理成文,以供更多 Web3 开发者参考。
Linea 是一个完全等效于以太坊虚拟机(EVM)的零知识扩展协议(zk-rollup),旨在提高以太坊的吞吐量并降低交易费用。Linea 依赖于一种创新的、内部构建的证明器,该证明器利用 zkSNARK 技术。
在 Linea 上,交易费用比以太坊主网便宜 15 倍到 20 倍。与他们开发的一些工具和基础设施平台一样,Linea 被设计成对开发者友好,原生支持 Consensys 的 MetaMask、Truffle 和 Infura。该链还被设计为可组合和易于使用,这意味着开发者不需要成为 zkEVM 或 zk-rollup 的专家,就可以在其上构建应用程序。
众多生态纷纷部署、迁移至 Linea 网络,这其中涉及各种 DeFi、跨链桥、NFT 等协议,Linea 生态系统增长迅速。自上线以来,Linea Mainnet Alpha 的总锁定价值(TVL)一路飙升,最高突破 3000 万美元,目前稳定在 2000 万美元左右。
Linea 能够达到 4800 TPS,zkSync 能够达到 2000 TPS,Optimism 能够达到 500 TPS。
- Linea:一些用户反馈,通过 Linea 官方跨链桥从第 2 层到第 1 层(以太坊)的兑换过程存在延迟,延迟范围从 8 至 32 小时到最多 4 天不等。官方解释称,为了严密监控交易,保护用户资产安全,团队初步为 Linea 主网增加了至少 8 小时的提现延迟。随着系统的成熟,这种延迟会逐渐减少并最终消除。
- zkSync:验证和汇总交易在 Layer 2 上进行,因此提现速度相对较快。
- Optimism:乐观地认为由定序器提交上来的 Rollup 交易都是有效的。然后在挑战期内,验证者如果发现无效交易,可以发起欺诈证明。如果挑战期过后都没有人挑战的话,就默认这笔交易是有效的,此时交易具有最终性。所以提现时间比较长,7 天时间左右。
目前,以太坊上的所有交易都是透明的,任何人都可以看到发送者、接收者以及交易的所有详细信息。但是,各个区块链也非常重视隐私问题,大多数人不愿意将大部分财产的转移公开暴露出来。因此,隐私是各区块链路线图的重要组成部分。
- Linea & zkSync:Linea 和 zkSync 对用户具有很高的隐私性,因为他们使用零知识证明来隐藏侧链和主链上的交易和签名。只有交易的发送者和接收者才能知道其详细信息,没有人可以将其与用户的地址或身份联系起来。
- OptiOptimis:OptiOptimis 对于用户来说隐私性较低,因为他们必须在侧链和主链上公开他们的交易和签名。任何人都可以观察和分析这些交易,并将它们与用户的地址和身份联系起来。
- Linea:几乎可以达到 100% 兼容,solidity 代码几乎可以无缝部署到 Linea 链上。
- zkSync:修改了很多 opcode,引入了全新的账户抽象模式,solidity 的代码需要做相应的调整。
- OptiOptimis:有少量的 opcode 变更,需要对代码做少许变更才能部署到链上。
ZK rollups 的实现很复杂。计算零知识证明既困难又耗时,因此计算成本较高。而 OptiOptimis「欺诈证明」的交易方案省去了大规模的部署验证,从而节省了计算资源,保证了交易的确切性。
EIP-4337 - Linea 中的账户抽象,没有更改共识层协议,通过入口点合约规范进行账户抽象,这是一项巨大的成就。
这个提案其实引入了一个更高层的伪交易对象,称为 UserOperation。通过自定义内存池发送交易。之后,UserOperations 通过 Bundler 打包成单个事务,类似于矿工在现有交易内存池中的操作方式。Bundler(使用 Flashbots 服务)调用 EntryPoint 合约进行验证,如果没有错误,交易将包含在网络上的下一个区块中。
EntryPoint 合约是基础设施的关键部分,当通过 Bundler 调用此智能合约时首先验证 UserOperations 是否遵循帐户预先指定的规则,然后执行它们。请务必记住,EIP-4337 没有协议级别的更改。这意味着 Bundler 是一个将所有这些交易提交到链上的 EOA 地址。
EntryPoint 合约可以通过添加 Paymaster 进一步扩展。Paymaster 提供了一些好处,它允许用户以 ERC20 代币支付费用,并以合约作为中介来收集 ERC20 代币,然后付款人会将其转换为 ETH 以实现系统兼容性。
当开始进行 Linea 的开发时,以下的建议是非常重要的。这些指南对于优化代码,确保安全性,并与 Linea 链的独特特性保持一致是至关重要的。
在 Solidity 中,有三种发送 Ether 的方式:send,transfer 和 call
.send 和 .transfer 是向另一个合约发送 ETH 的简化方法,但是它们有一些限制。它们仅为接收合约的回退函数的执行提供有限的 gas(2300 gas),并且如果执行失败或接收合约耗尽 gas,它们会 revert。
call 是一个更底层的函数,提供了更多的控制和灵活性。它允许指定要发送的 gas 量,并能处理错误。使用 call,可以处理返回值,并检查外部合约调用的成功或失败。如果调用失败,它会返回 false,而不是 revert。
尽管使用 call 提供了更多的灵活性和控制,但开发人员需要注意,与 send 或 transfer 相比,它可能带来的重入性漏洞。
使用 call 时,接收合约的回退函数可能在当前调用完成之前被重入,可能导致意外的行为和安全漏洞。为了降低这种风险,需要遵循最佳实践,例如实现 checks-effects-interactions 模式,并加入重入性防护。
虽然 Linea 进行了大量测试以确保与以太坊虚拟机(EVM))的完全兼容性,但仍可能出现问题。
为了应用这些错误修复,可能需要升级智能合约。作为预防措施,我们建议首次在 Linea 上部署后的几个月内实施代理模式。使用代理模式可以在不需要完全重新部署合约的情况下,更灵活地对合约逻辑进行更新和修复。它作为一个抽象层,使无缝升级和错误修复成为可能,同时保持应用的完整性和连续性。
重组(reorg)是本来属于权威链的区块变成不再是权威链的一部分了,因为有一个竞争区块把它击败了。在以太坊这样的 PoW 区块链里,我们通常看到的是「最长链规则」(或更准确来说,是「最高总挖矿难度规则」)。这意味着,当客户端看到两条区块链时,它会选择总难度(即该链里所有区块的难度总和)最高的那条。
所有 EVM 链都可能发生重组。在某些链 Layer2 链上,重组比以太坊主网上更为常见。
(1) 假设我们从难度为 100 的区块 1 开始同步。
(2) 区块 2a 和 3a 都以难度 100 到达,我们把它们嵌入到我们的区块链里,构成总难度为 300 的分叉。
(3) 区块 3b 以难度 110 到达,并声称 2a 是它的父区块,构成总难度为 310 的分叉。分叉选择规则会发现目前「最重」的链是第二个分叉,然后转为选它。这种情况属于 1 个区块的重组,因为只有区块 3a 被改变了。
假设,Alice 调用某函数部署了一个新的金库,然后向其中发送资金。Bob 看到网络块重组发生并调用同样的函数。因此,它创建了一个带有 Alice 发送资金地址的金库。然后 Alice 的交易被执行,Alice 将资金转移到 Bob 的金库合约中。
重入攻击是 Solidity 智能合约中最具破坏性的攻击之一。当函数对另一个不受信任的合约进行外部调用时,就会发生重入攻击。然后,不受信任的合约会递归调用原始函数,试图耗尽资金。
著名的重入攻击事件是 DAO 攻击,造成了 6000 万美元的损失。
Solidity 使用定点运算,除法会导致精度损失,而乘法前除法会将这种精度损失放大。因此在组合计算之前,solidity 中的数字也需要缩放到相同的精度。
今年 4 月 28 日,一名白帽向 DFX Finance 提交了一个严重漏洞,就是计算代币出现舍入错误。在提交时,237,143 美元处于易受攻击的池中,有被恶意黑客窃取的风险。不过,DFX Finance 在收到报告后迅速采取措施修复了该漏洞。最后,DFX Finance 向白帽公司支付了 100,000 USDT 的赏金。
然后还有一些别的漏洞比如存储冲突,闪电贷,预言机价格操作,随机数可以预测,Dos 攻击等,在这里就不列举了。
在 2023 年 8 月,Linea 上构建的借贷协议 Mendi Finance 的 staking 合约受到攻击,损失了约 93 万枚 mendi,黑客通过多个新地址 staking 来获取奖励。我们在注意到这个安全事件后,迅速与 Mendi Finance 进行沟通,并立刻启动安全响应。经过调查,发现根本原因是协议中参数设置不一致和提款延迟时间配置不正确导致的。
1. 合约在部署时未设置 延时提取的参数值,用户充值后可以立刻提取资金。事件发生后,我们在历史区块高度查询了下延时提取的参数值,确实是 0。
2. 能够领取未获得的奖励是由于一个 for 循环从 1 开始而不是从 0 开始。这使得每个人都能在抵押后立刻领取奖励,因为自动将第一个奖励分配给了新地址。
本文来自投稿,不代表 BlockBeats 观点。
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia