Openzeppelin
在可升級智能合約中使用多個初始化器
對於可升級智能合約,遵循此處指定的模式:
“建構子”/初始化程序具有以下形式:
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'}
並將所有值放入其中有效。IEfunction initialize() public initializer { constructor values & initial value field declarations }
在部署/測試智能合約時,如何指定多個初始化程序?
特別是作為在可升級智能合約中邏輯分離不相關組件的一種手段。即建構子值與初始值欄位聲明
其他對此感到疑惑的人,請參閱此回复:OpenZeppelin 論壇