文章详细介绍了ERC20快照技术,解决双花投票和重复领取空投的问题,并探讨了其实现机制和OpenZeppelin的解决方案。
分析 ERC2771 与 Multicall 集成引发的任意地址欺骗攻击
本文详细介绍了 OpenZeppelin Contracts 的最新更新版本 5.0.0,涵盖了新增和移除的合同与库、按类别的主要变化,以及改进的安全性和合约结构,使开发者能够构建更强大和高效的去中心化应用。
本文为开发者提供了一个详细的指南,介绍了如何创建一个ERC-20 Token Factory dApp。指南覆盖了从Factory设计模式的理论到具体的智能合约代码实现和部署步骤,使用了OpenZeppelin和Foundry等工具,并提供了前端的开发指导。适合需要创建自定义ERC-20代币的开发者,以实现数字资产的生成和管理。
文章详细解释了透明可升级代理模式,该模式旨在升级代理时消除函数选择器冲突的可能性。文章介绍了代理合约的基本需求、函数选择器冲突问题及其解决方案,并通过代码示例和图表深入探讨了OpenZeppelin的实现细节。
本文详细介绍了如何使用OpenZeppelin和Foundry进行NFT的空投,包括设置项目、创建智能合约和进行测试与部署。文中也讨论了空投的概念、优点、挑战和相关的法律问题,为Web3项目提供了实用指导。
本文介绍了 ERC-6551 提案,该提案使得非同质化代币 (NFT) 可以作为“钱包”进行资产管理,支持与其他智能合约的交互。通过使用 Hardhat 和 OpenZeppelin,读者可以学习如何创建和部署符合 ERC-6551 标准的代币,并了解 Token Bound Account 的构建和操作流程。
使用OpenZeppelin升级插件部署的智能合约可以通过升级来修改代码,同时保留原合约地址、状态和余额。这让帮助我们为项目添加新功能,或修复在生产中可能发现的任何错误。
从foundry工程化的角度详细解读Openzeppelin中的Arrays库及对应测试。
Create2库本质就是对EVM opcode CREATE2进行的一个封装,可以让开发者在非内联汇编环境下直接使用该opcode。 CREATE2是一种可提前计算合约部署地址的合约部署opcode。而传统的合约部署是通过opcode CREATE完成的。
MerkleProof库提供了用于验证merkle树proof的工具函数。在生成merkle树和对应proof时应当避免使用64字节长度的leaf(进行hash之前)或避免使用非keccak256的哈希函数(进行leaf的hash计算)。这是因为树中经排序的内部节点的拼接可以被重新解释为leaf值。
ERC20FlashMint库是ERC20的拓展。本库在ERC20的基础上实现了IERC3156FlashLender接口,在token层面上支持了闪电贷功能。但是该库默认没有闪电贷手续费,开发者可以通过重写flashFee()方法来自定义手续费计算逻辑。
flashFee()
Context库是合约开发中最常见的库,同时也是最让人迷惑的库。合约代码里面只将msg.sender和msg.data封装成了函数,感觉多此一举。实际上,本库不提供任何context环境切换的细节功能,而是需要目标合约中重写这两个函数起到了可编辑msg.sender和msg.data的目的。
Multicall库提供了一个multicall(bytes[] calldata data)方法,通过该方法可以由调用者在一笔交易中自由组合调用本合约的各个可外部调用的方法。
multicall(bytes[] calldata data)
Math库为合约开发提供了solidity内置的uint256运算以外的其他整形运算方法。solidity内置的整形运算,每一步都会做overflow revert(除非unchecked{}),而Math库会在不影响结果准确性的前提下利用位溢出进行更加tricky的操作。