Forge是一个以太坊开发框架。您可以使用它来创建Solidity项目,管理依赖关系,运行测试等等。这是一个初学者指南。我将介绍如何创建项目,管理依赖
ERC20Permit库是ERC20的拓展。本库通过permit方法允许调用者携带owner的链下签名来进行token的授权。这样,ERC20 token的owner不再需要自己调用approve方法进行授权,进而实现了owner的EOA账户无eth也可完成授权操作。
OpenZeppelinFoundryUpgradesupgradeProxy升级合约源码分析Upgrades.upgradeProxy源码分析Upgradesaproxytoanewimplementationcontract.Onlysupportedfor
ERC20和ERC721都是单代币标准,一个合约中只能管理一种代币。而ERC1155的设计目标是统一管理同质化代币(FungibleToken)和非同质化代币(Non-FungibleToken),提高批量操作的效率,减少Gas成本:https://learnblockchain.cn/shawn_
ERC20Votes库是一个具备类Compound委托投票功能的ERC20拓展库。本库的发行量上限是2^224-1,比Compound更通用。合约内部使用快照结构Checkpoint来记录每个投票目标地址的总票数,每个token持有者可以采用直接或者离线签名两种方式委托投票给任何地址。
PullPayment库是对Openzeppelin中Escrow库的一种封装。从安全角度看,PullPayment是一对多发送eth的最佳解决方案。它可以防止收款人阻塞发送eth的行为并消除重入问题。
Pausable库实现了功能函数紧急关停机制,可以继承该合约并使管理员账户来调控合约的开关。合约内有两个修饰器whenNotPaused和whenPaused,可以根据业务需求将其修饰在对应的函数上来进行开放或关停状态下的访问限制。
whenNotPaused
whenPaused
本文介绍了 Foundry 相对于 Hardhat 的优势,包括 Solidity 原生测试、更快的迭代速度和内置模糊测试,使得 Foundry 成为顶级开发者的选择。Foundry 通过 Rust 编写,速度快,并且可以通过 cheatcodes 直接在测试中操作 EVM 状态。此外,Foundry 还具有精简的 CLI 工具和简单的依赖管理方式。
Challenge1-UnstoppableUnstoppable为了系统的学习solidity和foundry,我基于foundry测试框架重新编写damnvulnerable-defi的题解,欢迎交流和共建~🎉https://github.com/zach030/damnvulnerable
本文介绍了 Foundry 的一个非常有用的 Cheatcode:vm.prank,它允许开发者在测试中模拟任何地址作为 msg.sender,从而方便地测试访问控制和各种边界情况。
msg.sender
本文是Foundry cheatcodes系列文章的第三部分,主要介绍了 Foundry 中的断言作弊码,包括 vm.expectRevert(用于测试必须抛出的情况)、vm.expectEmit(用于验证事件和topic)和 vm.expectCall(用于断言外部交互)。
本文介绍了Foundry框架中的vm.roll和vm.warp两个作弊码,它们允许开发者在测试中快速调整区块链的区块高度和时间戳,方便模拟时间锁、截止日期、权益归属等与时间相关的合约逻辑。通过结合这两个作弊码,开发者可以轻松地测试合约在不同时间点和区块高度下的行为。
Initializable库用于开发可升级合约或代理合约背后的逻辑合约。由于代理合约无法执行constructor函数,通常是将该函数逻辑放到一个external函数中(称为initialize函数)。本库可确保initializer函数全局只能被调用一次。
constructor
ERC20Pausable库是ERC20的拓展。该库提供了可暂停的transfer、mint及burn功能。需要注意的是:ERC20Pausable库并没有提供切换暂停状态的函数,需要开发人员自行开发——同时需要注意切换暂停状态的权限问题。