Foundry是一个Solidity智能合约开发工具链。...[ 百科 ]
ERC20Permit库是ERC20的拓展。本库通过permit方法允许调用者携带owner的链下签名来进行token的授权。这样,ERC20 token的owner不再需要自己调用approve方法进行授权,进而实现了owner的EOA账户无eth也可完成授权操作。
ERC20Capped库是ERC20的拓展。该库设置了ERC20发行量的上限。
ERC20Burnable库是ERC20的拓展。该库允许用户销毁自己和给自己授权的人名下的token。
Openzeppelin中的ERC20库只提供了mint接口,而具体的发行逻辑需要开发者在其子合约中使用`_mint()`自行编写。该库同样遵循了OpenZeppelin的合约设计思路:当函数因产生错误返回false时,直接revert掉。这种设计思路与ERC20的期望标准并不冲突。
学习使用模糊测试(Fuzz Test)及不变性测试( Invariant Test)提高合约安全性。
AccessControlEnumerable库用于管理函数的调用权限,是AccessControl库的拓展版。与AccessControl库相比,AccessControlEnumerable支持在编成员的迭代导出,这大大方便了各个角色权限的统计查询。
对于智能合约开发者来说,编写合约测试是非常重要的一项技能。 这里推荐VSCode的一款插件CoverageGutters它可以根据你所生成的 Code Coverage Report 文件
AccessControl库用于管理函数的调用权限,所有继承了AccessControl的子合约均可为自己的业务函数设置调用权限。AccessControl是一个轻量级的基础库且各个role不支持在编成员的迭代导出,所以授权和撤销role成员的操作会抛出event。
Ownable2Step库是Ownable库的拓展版本。其提供的访问权限机制同Ownable完全一致,只是owner的更换机制从由原owner直接指定(一次交互)变成原owner指定 + 新owner确认(两次交互)。Ownable2Step库具有Ownable库所有的功能函数。
Ownable库提供了一种基本的访问控制机制——设置一个owner具有对某些函数特殊的访问权限。通常owner就是本合约的deployer。合约部署后可通过函数transferOwnership()进行owner的修改。本库还提供了modifier onlyOwner,用于为函数限定访问权限。
MerkleProof库提供了用于验证merkle树proof的工具函数。在生成merkle树和对应proof时应当避免使用64字节长度的leaf(进行hash之前)或避免使用非keccak256的哈希函数(进行leaf的hash计算)。这是因为树中经排序的内部节点的拼接可以被重新解释为leaf值。
EIP-712是一个专门用于对结构化数据求hash值以及签名的标准,大大解决了数据“链下签名+链上验证”的问题并提高了链上消息签名的可用性。EIP712合约提供了EIP 712 domain separator的定义与获取——是结构化数据完整编码的一部分。
SignatureChecker库是一个用于链上签名验证的helper库。该库提供的验签函数既支持EOA账户地址的签名验证也支持IERC1271标准合约地址的签名验证。
在查看Foundry官方文档时发现其安装步骤描述并不详细,起初跟着安装问题迟迟无法解决,故记录下此详细安装过程,且选择的是最快捷最不占硬盘空间方式的下载方式官方文档给出的下载步骤
IERC1271是合约地址作为signer的签名验证标准。EOA地址可以通过其私钥对msg进行签名,而合约地址理论上是没有私钥的。当合约地址作为msg.sender时,可以通过IERC1271标准进行相关的签名验证工作。
2247 回答,2140赞同
0 回答,829赞同
3 回答,174赞同
0 回答,31赞同
0 回答,30赞同
0 回答,20赞同
0 回答,14赞同
0 回答,12赞同
0 回答,8赞同
1 回答,6赞同