Ropsten

代理合約呼叫結果返回錯誤

  • May 4, 2020

我將我的代理 (AdminUpgradeabilityProxy) 和邏輯合約發佈到 Ropsten 測試網路。

但是我的呼叫結果通過我的代理契約返回了錯誤的值。例如我在邏輯合約中呼叫 totalsupply() 函式(我使用代理合約地址)然後呼叫結果是錯誤的:

{
   "totalSupply": "3963877391197344453575983046348115674221700746820753546331534351508065746944"
}

(結果必須是 ‘0’… :( )

然後我通過代理呼叫邏輯合約中的 owner() 函式,我又得到了錯誤的結果

合約所有者呼叫結果:

{
   "owner": "0x0000000000000000000000000000000000000000"
}

然而,當我將合約發佈到 Ropsten 網路時,我看到所有者和 ProxyAdmin 地址設置正確。

我的錯是什麼?為什麼結果返回錯誤值:(

我的部署腳本:

await deployer.deploy(logic); const instance = await logic.deployed();
await instance.initialize("0x5f1007A94861275Ca739D1B16ac2fdb673bf2002");
await deployer.deploy(AdminUpgradeability, logic.address, "0x5f1007A94861275Ca739D1B16ac2fdb673bf2002");

謝謝你

它按混音的預期工作。

  • 總供應量:0
  • 所有者:0x0000..00
  • 名稱:’’(空字元串)
  • 符號:’’(空字元串)

邏輯地址可能已經初始化,但沒關係,因為將從代理地址讀取儲存。

錯誤可能是您如何呼叫代理。


問題出在部署腳本中

await deployer.deploy(logic);

// Logic contract will be used for the bytecode
// it is not necessary to initialize
// const instance = await logic.deployed();
// await instance.initialize("deployerAccount");

await deployer.deploy(AdminUpgradeability, logic.address, "deployerAccount");
// const instanceAdminUpgrade = await AdminUpgradeability.deployed();

// To use logic from proxy we need an instance of logic
// that points to AdminUpgradeability.address
const instanceAdminUpgrade = await logic.at(AdminUpgradeability.address);

// Initialize proxied instance
await instanceAdminUpgrade.initialize("deployerAccount");

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