mo_00 2025-05-14 17:40 采纳率: 66.7%
浏览 8
已结题

对于solidity使用openzeppelin的可升级合约;

对于solidity使用openzeppelin的可升级合约;
如v1版本:

img

对于v2版本,根据 OpenZeppelin 的可升级合约规范,如果新合约版本继承了之前的合约(例如 V2 继承了 V1),那么在新版本的初始化函数中,必须显式调用父合约的 initializer 函数(即父合约的初始化函数),否则会出现这个错误。
我试了好几种方法都报错,直接super调用父合约的initialize也不行,通过下面这种也会报错。

    /// @custom:oz-upgrades-unsafe-allow constructor
    constructor() {
        _disableInitializers();
    }

    /// @custom:oz-upgrades-validate-as-initializer
    function initializeV2() public reinitializer(2) {}

img

  • 写回答

4条回答 默认 最新

  • mo_00 2025-05-15 17:37
    关注

    这样就可以解决了

    
    function initializeV2(address initalOwner) public reinitializer(2) {
      RealEstateRental.initialize(initialOwner);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月14日