使用UUPS升级智能合约

  • Merz
  • 更新于 2022-08-12 17:46
  • 阅读 2959

使用UUPS升级智能合约

编写智能合约

pragma solidity >=0.4.22 <0.9.0;

import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";

contract Box is Initializable, OwnableUpgradeable, UUPSUpgradeable {
    function initialize() public initializer {
        __Ownable_init();
        __UUPSUpgradeable_init();
    }
    uint256 private value;

    event ValueChanged(uint256 value);

    function store(uint256 _value) public {
        value = _value;
        emit ValueChanged(_value);
    }

    function retrieve() public view returns (uint256) {
        return value;
    }

    function _authorizeUpgrade(address newImplementation)
        internal
        onlyOwner
        override
    {}
}

部署智能合约

智能合约地址: 0x5e17b14ADd6c386305A32928F985b29bbA34Eff5 代理合约地址: 0xe2899bddFD890e320e643044c6b95B9B0b84157A

截图1.png

测试智能合约

调用代理合约的store方法, 设置value=10 调用代理合约的retrieve方法, value=10

修改智能合约

function retrieve() public view returns (uint256) {
        // 修改方法
        return value + 100;
}

升级智能合约

智能合约地址: 0x93f8dddd876c7dBE3323723500e83E202A7C96CC 代理合约地址: 0xe2899bddFD890e320e643044c6b95B9B0b84157A

截图2.png

测试升级之后的智能合约

调用代理合约的retrieve方法, value=110, 证明升级成功

点赞 1
收藏 5
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Merz
Merz
江湖只有他的大名,没有他的介绍。