hardhat vs foundry
ERC20FlashMint库是ERC20的拓展。本库在ERC20的基础上实现了IERC3156FlashLender接口,在token层面上支持了闪电贷功能。但是该库默认没有闪电贷手续费,开发者可以通过重写flashFee()
方法来自定义手续费计算逻辑。
ERC20Pausable库是ERC20的拓展。该库提供了可暂停的transfer、mint及burn功能。需要注意的是:ERC20Pausable库并没有提供切换暂停状态的函数,需要开发人员自行开发——同时需要注意切换暂停状态的权限问题。
Pausable库实现了功能函数紧急关停机制,可以继承该合约并使管理员账户来调控合约的开关。合约内有两个修饰器whenNotPaused
和whenPaused
,可以根据业务需求将其修饰在对应的函数上来进行开放或关停状态下的访问限制。
ERC20Permit库是ERC20的拓展。本库通过permit方法允许调用者携带owner的链下签名来进行token的授权。这样,ERC20 token的owner不再需要自己调用approve方法进行授权,进而实现了owner的EOA账户无eth也可完成授权操作。
Solidity 面试问题汇总
ERC20Capped库是ERC20的拓展。该库设置了ERC20发行量的上限。
ERC20Burnable库是ERC20的拓展。该库允许用户销毁自己和给自己授权的人名下的token。
Openzeppelin中的ERC20库只提供了mint接口,而具体的发行逻辑需要开发者在其子合约中使用_mint()
自行编写。该库同样遵循了OpenZeppelin的合约设计思路:当函数因产生错误返回false时,直接revert掉。这种设计思路与ERC20的期望标准并不冲突。
Solidity宣布发布Solidity编译器v0.8.23
AccessControlEnumerable库用于管理函数的调用权限,是AccessControl库的拓展版。与AccessControl库相比,AccessControlEnumerable支持在编成员的迭代导出,这大大方便了各个角色权限的统计查询。
同大多数编程语言一样,用Solidity编写的智能合约无法直接在以太坊虚拟机(EVM)上运行,必须先将其编译成字节码。
Solidity开发者应掌握的十个智能合约: ERC-20 合约,ERC-721 合约,简单拍卖合约,众筹合约,托管合约,多签钱包合约,投票合约,域名注册合约,预测市场合约,游戏合约
AccessControl库用于管理函数的调用权限,所有继承了AccessControl的子合约均可为自己的业务函数设置调用权限。AccessControl是一个轻量级的基础库且各个role不支持在编成员的迭代导出,所以授权和撤销role成员的操作会抛出event。
Ownable2Step库是Ownable库的拓展版本。其提供的访问权限机制同Ownable完全一致,只是owner的更换机制从由原owner直接指定(一次交互)变成原owner指定 + 新owner确认(两次交互)。Ownable2Step库具有Ownable库所有的功能函数。
Ownable库提供了一种基本的访问控制机制——设置一个owner具有对某些函数特殊的访问权限。通常owner就是本合约的deployer。合约部署后可通过函数transferOwnership()进行owner的修改。本库还提供了modifier onlyOwner,用于为函数限定访问权限。
本手册涵盖了合约部署、跨合约调用、设计模式、Calldata优化、汇编技巧、编译器等等各个方面的优化技巧!不管你是新手还是老手,这本手册都能给你带来惊喜和启发!