Skip to content

Latest commit

 

History

History
59 lines (44 loc) · 3.94 KB

安全注意事项.md

File metadata and controls

59 lines (44 loc) · 3.94 KB

安全注意事项和陷阱

要在 Arbitrum 上构建以太坊 Dapp 的开发者,要对经验、工具和协议的原理非常熟悉。 也就是说开发人员应该意识到一些安全的重要因素和"陷阱"。对于许多智能合约应用程序,以下内容不全适应,但建议开发人员进行尽职调查:

  • 不同的 EVM/Soldity 表现: Arbitrum 支持每个 EVM 操作码,这意味着你编写的任何 Solidity(或 Vyper、Yuul 等)都将在 Arbitrum 上编译和运行。但是,某些操作在 Arbitrum 上的行为与在 Ethereum 上的表现不同; 如需完整列表,请参阅Solidity 支持。此外,Arbitrum 支持大多数(但不是全部)以太坊预编译

  • 带有区块号和时间戳的时序假设: 人们可能在 L1 上 根据时间顺序推出区块时间(即平均每 15 秒产生一个新q块),但这不会在 Arbitrum 上成立。L2 块的产生/划定速率没法准确的预测。在 Arbitrum 上 通过 block.timestamp(区块时间戳) 来度量时间是一个好方法,但即便如此,想通过 L2 的 block.timestampblock.number 来获得可靠的时间,这个时间跨度要大些才行。有关更多信息,请参阅区块编号和时间

  • L1 到 L2 交易地址的别名: “可重试票证”是一种特殊的交易类型,用于从 L1 向 L2 发送消息; 如果你打算使用它们,强烈建议你在部署到主网上之前阅读他们的文档并仔细测试你的合约的表现。 特别注意:在 L2 消息的接收方,msg.sender 不返回 L1 合约,而是返回地址别名

  • L1 到 L2 的交易票据创建失败: 如果您在尝试创建可重试票证时少付了基本提交成本,那么尽管 L1 交易被确认,但不会在 L2 上创建票证。这可能非常糟糕,当然取决于你的跨链应用程序正在做什么。当前基础提交费用可直接从 Arbitrum 节点查询,每24小时更新一次,它最多可以在前值的基础上增加 50%。您多付的任何金额都不会丢失,它将在你指定的 L2 地址上收集。为了安全起见,我们强烈建议你多付钱。 (在未来的版本中,基础提交成本将直接在 L1 上收集,完全避免上述故障模式。)

    如果你在你的 dApp 中使用了可重试的票证,那么上一段中的任何内容对你来说都没有意义(或者即使它有), 那么觉得你真的应该阅读文档

  • 硬编码 Gas 值: ArbGas 的计价方式与以太坊 L1 Gas 不同。因此,包含硬编码的合约部署在L1 上可能没有问题,但是如果为做修改直接部署到L2上可能会失败,所以应该调整硬编码的 Gas 值(或者可能的话直接删除)。

  • ETH 存款特殊性: 可重试票据以一种特殊杠杆的方式来处理从 L1 到 Arbitrum 的 ETH 存款。 如果你的应用程序将直接使用 ETH 存款,则值得了解其设计的细节。此外,没有在 L2 上发布签名交易就将 ETH 入 L2 帐户可能会在 L1 上未知的行为,即没有触发合约的回退函数(receive/fallback 函数) 即可将 ETH入账。

  • 区块哈希值的随机性: 不应依赖 Arbitrum 的 L2 区块哈希值随机性的作为安全来源。

如果你有任何疑问,请随时通过我们的Discord与我们和我们的社区进行互动。

教程

前端集成