UUPSUpgradeable库是专为UUPS代理设计的一种合约升级机制的实现。当本合约被设置为ERC1967Proxy代理合约背后的逻辑合约后,可以对其进行合约升级操作。作为逻辑合约的父合约,本库的安全机制可保证不会因某次错误的升级而打破合约的可升级性。
本文介绍了如何在Foundry环境中使用OpenZeppelin安全地创建和验证ECDSA签名,提供了Verifier.sol合约和测试代码Verifier.t.sol的示例。
Clones库是最小代理合约的工厂合约实现,也称之为克隆工厂。ERC1167指定了一种将全部调用都delegatecall到一个已知固定地址的最小字节码实现,它可以以一种不可变且成本极低的方式克隆目标合约。
UpgradeableBeacon库是信标代理模式中的信标合约的实现,与一个或多个BeaconProxy库实例配合使用。所有到BeaconProxy的调用都会被委托到本库指向的逻辑合约上。本库的owner具有更换逻辑合约地址的权限,从而实现信标代理合约的升级功能。
BeaconProxy
TransparentUpgradeableProxy库是一个透明代理合约的实现,其背后的逻辑合约可由admin来升级。一般的代理合约本身需要管理函数,当这些函数同其背后的逻辑合约的函数产生selector冲突时可能会暴露潜在的漏洞。透明代理模式解决了以上问题。
使用 OpenZeppelin Monitor 监控智能合约的链上活动
可升级合约中可以使用 immutable 变量么? 让我们深入探索一番
文章介绍了Solidity中的onlyOwner修饰符及其在智能合约中的应用,特别讨论了Ownable2Step相较于Ownable的安全性改进,包括所有权转移的两步验证机制。
onlyOwner
PaymentSplitter库可以在一组领取地址无感知的情况下,将定量eth或某ERC20 token按照shares占比释放给该组中的某地址。当eth或ERC20 token被转入该合约后,在册的领取地址就可以来领取属于自己占比的那部分。各领取人的shares数量只能在该合约部署时被设置。
本文为OpenZeppelin开展的EIP-4337审计安全评估,详细分析了智能合约的高严重性问题及其他找出的潜在安全漏洞,提供了相关的修复更新信息和对文档的改进建议,同时提出了对监控合约活动的推荐。全面探讨了包括代码库中的建议更改、bug修复和更新方法。
ProxyAdmin库是指定用于做透明代理TransparentUpgradeableProxy库admin的管理员合约。
本文档介绍了如何在使用OpenZeppelin升级插件等工具部署可升级合约时,使用@openzeppelin/contracts-upgradeable包。 该包通过使用initializer函数替换构造函数,并在小版本之间检查存储不兼容性,遵循可升级合约的编写规则,同时还讨论了多重继承和命名空间存储等问题。
@openzeppelin/contracts-upgradeable
本文介绍了OpenZeppelin Hardhat Upgrades插件如何通过.openzeppelin文件夹中的网络文件来跟踪已部署的合约版本。
.openzeppelin
本文档介绍了如何在Solidity中使用OpenZeppelin Contracts进行合约扩展。主要讨论了通过继承进行功能扩展和通过重写(override)改变父合约行为的方法,包括如何调用super来扩展父合约的行为。同时强调了自定义重写可能带来的安全风险,并建议开发者在更新OpenZeppelin Contracts版本时重新验证其假设。
super
本文介绍了OpenZeppelin的升级插件,该插件集成了Hardhat和Foundry,用于在以太坊上部署和管理可升级合约。插件支持部署和升级合约,管理代理管理员权限,并易于在测试中使用,支持UUPS、透明和信标代理模式。