Ethernaut题库闯关连载的第20篇
文章非常严谨讨论了各种实现的 gas 消耗,以及低效代码带来的深远影响,并给出了实现方案。
在本文中,通过 7 个任务,如何来编写可升级合约,测试以及自动、活动实施升级。 在 7 个任务中,分别介绍了可升级合约可能遇到的各种情况: 在新实现合约中添加函数、添加状态变量、修改状态变量可见性(修改函数)。
Solidity有两种模式实现升级:透明代理与UUPS代理, 他们的实现由细微差别,本文一起来看一看。
使用检查、影响和交互模式(简称CEI:Checks, Effects, and Interactions)、互斥锁、Pull 支付方式以及gas限制都是防止可重入攻击的有效技术。
对比使用mapping、默克尔树、及离线签名 3 中方式处理白名单的优缺点。
你能做些什么来防止合约变得太大?
本文通过大概100行代码演示了Uniswap 原理
call()与delegatecall()的异同。在delegatecall()的情况下,我们需要关心字段变量的顺序
call()
delegatecall()
译者推荐:这是我看到关于合约升级及治理写的最好的好文章,有点长,但读完必定有收获。原文来自 OpenZeppelin首席开发人员 Santiago Palladino 关于合约升级的报告,本文详细讨论了当前各种升级方式的原理、各自的优缺点,同时列举了采用相应方案的项目,以便大家进行代码级的参考。在最后一部分,作者还提出了多种配合升级的治理方案。