Foundry 单元测试
SignatureChecker库是一个用于链上签名验证的helper库。该库提供的验签函数既支持EOA账户地址的签名验证也支持IERC1271标准合约地址的签名验证。
本文介绍了以太坊开发框架Foundry中的Fuzz测试技术。Fuzz测试通过生成大量随机输入来测试智能合约在各种条件下的行为,帮助开发者发现边界情况和潜在安全漏洞。文章通过一个简单的存款和取款智能合约示例,展示了如何在Foundry中实现Fuzz测试。
本文档介绍了如何将 OpenZeppelin Foundry Upgrades 与 OpenZeppelin Defender 集成,以便通过 Defender 进行合约部署和升级。主要包括安装配置、环境设置、网络选择以及可升级和不可升级合约的部署示例,强调了使用 Defender 部署时的注意事项,如API密钥配置、网络选择、以及如何在Defender界面监控部署状态。
本文档介绍了 OpenZeppelin Foundry Upgrades API,涵盖了 Foundry artifact 和 Annotation 格式的合约名称规范,以及 deployUUPSProxy、deployTransparentProxy、upgradeProxy、deployBeacon 和 proposeUpgrade 等函数的详细用法和参数选项,旨在帮助开发者使用 Foundry 脚本或测试来部署和管理可升级的合约,以及与 OpenZeppelin Defender 集成。
本文介绍了如何使用 Foundry 库来部署和管理可升级合约,包括安装 OpenZeppelin Contracts v5 或 v4 的步骤、使用 NPM 或 Soldeer 进行替代安装的方法、Foundry 的要求、运行前的配置(如安装 Node.js、配置 foundry.toml)以及在 Windows 环境下的设置等。
Openzeppelin中的ERC20库只提供了mint接口,而具体的发行逻辑需要开发者在其子合约中使用_mint()自行编写。该库同样遵循了OpenZeppelin的合约设计思路:当函数因产生错误返回false时,直接revert掉。这种设计思路与ERC20的期望标准并不冲突。
_mint()
本文介绍了LI.FI为解决在多链环境下部署和管理智能合约的挑战而开发的自定义脚本框架。该框架结合了Bash和Solidity脚本功能,简化了在25个以上网络中数百个智能合约的部署、配置和管理。LI.FI通过使用Foundry工具和Bash脚本,实现了安全、高效、可控的多链合约管理。
在外部审计前 使用不变量模糊测试之前找到高风险漏洞
内联汇编中,Instruction "staticcall"的功能及使用方法与Instruction "call"类似。唯一不同的是在"staticcall"的过程中不允许发生storage的修改。
Ownable库提供了一种基本的访问控制机制——设置一个owner具有对某些函数特殊的访问权限。通常owner就是本合约的deployer。合约部署后可通过函数transferOwnership()进行owner的修改。本库还提供了modifier onlyOwner,用于为函数限定访问权限。
ERC165Checker库是用来查询已实现IERC165的目标合约自身实现了哪些interface的工具库。在使用时需要注意:利用ERC165Checker提供的查询方法进行查询的过程不会因为目标合约没有实现待查询interface而发生revert。
ERC165Storage合约是ERC165的一种拓展。IERC165的supportsInterface(bytes4)函数的标准实现方式是静态地将已实现接口的interface id硬编码到bytecode中,而ERC165Storage则可在合约部署后动态地添加支持的interface id。
Ownable2Step库是Ownable库的拓展版本。其提供的访问权限机制同Ownable完全一致,只是owner的更换机制从由原owner直接指定(一次交互)变成原owner指定 + 新owner确认(两次交互)。Ownable2Step库具有Ownable库所有的功能函数。
本文档是 Aave v3 不变量测试套件的内部文档,介绍了如何运行测试套件、属性格式、如何添加对新函数的支持、如何从 Foundry 迁移测试、如何迁移 Certora 属性以及如何调试broken属性。该套件使用 Echidna 工具来检查 Aave v3 协议的不变量和后置条件,并通过 property mode 和 assertion mode 两种不同的模式执行。