首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用硬件部署插件部署OpenZeppelin可升级合同

使用硬件部署插件部署OpenZeppelin可升级合同
EN

Ethereum用户
提问于 2021-06-08 10:54:20
回答 2查看 751关注 0票数 4

部署OpenZeppelin可升级合同的正确方法是什么?OpenZeppelin可升级合同具有默认的initialize()函数,由hardhat-upgrades插件自动调用。

没有来自hardhat-deploy的自动调用,只有升级后的方法,例如:

代码语言:javascript
复制
const deployResult = await deploy('ContractX', {
    from: deployer,
    proxyContract: 'OpenZeppelinTransparentProxy',
    method: 'postUpgrade',
    args: []
  });

我应该先通过deploy文件夹中的脚本部署契约,然后从deploy文件夹之外的某个脚本调用initialize()函数吗?或者是否有一种方法可以结合从部署文件夹本身调用initialize()函数?

EN

回答 2

Ethereum用户

发布于 2021-09-26 17:25:58

代码语言:javascript
复制
const deployResult = await deploy('ContractX', {
    from: deployer,
    proxy: {
        proxyContract: 'OpenZeppelinTransparentProxy',
        execute: {
            methodName: "initialize",
            args: []
        }
    }    
});
票数 1
EN

Ethereum用户

发布于 2023-01-20 09:33:09

一个更复杂的例子:

代码语言:javascript
复制
import { HardhatRuntimeEnvironment } from 'hardhat/types';
import { DeployFunction } from 'hardhat-deploy/types';

const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
  const { deployments, getNamedAccounts } = hre;
  const { deploy } = deployments;
  const { deployer, proxyAdminOwner } = await getNamedAccounts();

  const DataTypes = await deploy('DataTypes', {
    from: deployer,
  });

  const Errors = await deploy('Errors', {
    from: deployer,
  });

  const MintingLogic = await deploy('MintingLogic', {
    from: deployer,
  });

  const ValidationLogic = await deploy('ValidationLogic', {
    from: deployer,
  });

  await deploy('ContractName', {
    from: deployer,
    contract: 'ContractName',
    log: true,
    proxy: {
      owner: proxyAdminOwner,
      proxyContract: 'OptimizedTransparentProxy',
      execute: {
        init: {
          methodName: 'initialize',
          args: [],
        },
        onUpgrade: {
          methodName: 'postUpgrade',
          args: [],
        },
      },
    },
    libraries: {
      Errors: Errors.address,
      DataTypes: DataTypes.address,
      ValidationLogic: ValidationLogic.address,
      MintingLogic: MintingLogic.address,
    },
  });
};

export default func;
func.tags = ['ContractName'];

如果你想要更多的信息,不要犹豫地问一些具体的问题。这里有太多的东西要打开来解释这一切。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/101535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档