Etherscan

為什麼從乙太幣呼叫時執行合約給了我錯誤的代幣符號?

  • December 13, 2021

我正在嘗試獲取令牌的符號和小數。我開始意識到有些合約只是代理,它們的實現在其他地方。這就是混亂開始的地方。

我已經成功獲取了implementation合約的地址,並且可以從中獲取 ABI。但是,implementation契約數據如symbol或與契約數據decimals不同proxy

例如,如果您在此處查看 WBTC 令牌 - https://polygonscan.com/token/0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6#readContract

Read as Proxy您可以看到該符號是,但是如果您在https://polygonscan.com/address/0x7ffb3d637014488b63fb9858e279385685afc1e2#codeWBTC轉到其實施契約,它會說。這正是我在程式碼中得到的。USDT

我如何獲得WBTCWBTC不是USDT?謝謝!

代理模式通常的工作方式是主令牌地址(0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6在您的情況下)持有合約的 storage,並使用 .將所有函式呼叫轉發給implementation合約delegatecall。這將在implementation主代理合約的儲存上執行合約中的功能。

因此,如果要讀取正確的儲存值,則需要從主代理合約中讀取它們。

您可以在主代理合約本身上使用實現合約的 ABI。

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