Openzeppelin

在可升級智能合約中使用多個初始化器

  • August 13, 2021

對於可升級智能合約,遵循此處指定的模式:

https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#avoid-initial-values-in-field-declarations

“建構子”/初始化程序具有以下形式:

function initialize() public initializer {
      .......
      .......
      .......
   }

現在假設我有一組初始值欄位聲明,並將它們設置在一個單獨的初始化程序中 - 比如說:

function initializeInitialValues() public initializer {
      .......
      .......
      .......
   }

下面的程式碼沒有選擇初始化器

let MyContract;
let mycontract;

describe("MyContract", function() {

 beforeEach(async function () {
    MyContract= await ethers.getContractFactory("MyContract");
    mycontract= await upgrades.deployProxy(MyContract, {initializer: 'initialize', initializer: initializeInitialValues()});
 });
      .......
      .......
      .......

});

僅使用await upgrades.deployProxy(MyContract, {initializer: 'initialize'} 並將所有值放入其中有效。IE

function initialize() public initializer {
      constructor values
             &
      initial value field declarations
   }

在部署/測試智能合約時,如何指定多個初始化程序?

特別是作為在可升級智能合約中邏輯分離不相關組件的一種手段。即建構子值與初始值欄位聲明

其他對此感到疑惑的人,請參閱此回复:OpenZeppelin 論壇

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