Hardhat

使用安全帽部署時,如果有相同的合約名稱,我應該如何將參數放入getContractFactory?

  • November 27, 2022

我目前正在嘗試使用 OpenZeppelin 的升級外掛。我正在更改一個邏輯合約,但它與之前的合約同名。

這是部署 UUTP 程式碼

import { ethers, upgrades } from "hardhat";

async function main() {
   const _ERC721 = await ethers.getContractFactory("ERC721");
   console.log("Deploying Box...");
   const ERC721 = await upgrades.deployProxy(_ERC721,{kind:'uups'})
   await ERC721.deployed();
   console.log("Box deployed to:", ERC721.address);
}

這是升級邏輯合約程式碼

async function main() {
   // Here ERC721 is the name of the contract being updated.
   const _ERC721 = await ethers.getContractFactory("ERC721"); 
   console.log("Upgrading Box...");
   await upgrades.upgradeProxy(PROXY, _ERC721);
   console.log("_MyERC721V2 upgraded");
}

查看兩個程式碼中的 getContractFactory() 參數,合約具有相同的名稱“ERC721”。但是 Solidity 文件不同。我應該如何區分它們?

您可以在兩者中加入相同的參數getContractFactory(),但它不允許輕鬆重現升級過程。我建議使用不同版本的契約名稱,例如ERC721V2.

請參閱:https ://forum.openzeppelin.com/t/can-the-same-implementation-contract-name-be-used-with-upgradeproxy/4071/2

引用自:https://ethereum.stackexchange.com/questions/140113