Etherscan
為什麼從乙太幣呼叫時執行合約給了我錯誤的代幣符號?
我正在嘗試獲取令牌的符號和小數。我開始意識到有些合約只是代理,它們的實現在其他地方。這就是混亂開始的地方。
我已經成功獲取了
implementation
合約的地址,並且可以從中獲取 ABI。但是,implementation
契約數據如symbol
或與契約數據decimals
不同proxy
。例如,如果您在此處查看 WBTC 令牌 - https://polygonscan.com/token/0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6#readContract
在
Read as Proxy
您可以看到該符號是,但是如果您在https://polygonscan.com/address/0x7ffb3d637014488b63fb9858e279385685afc1e2#codeWBTC
轉到其實施契約,它會說。這正是我在程式碼中得到的。USDT
我如何獲得
WBTC
而WBTC
不是USDT
?謝謝!
代理模式通常的工作方式是主令牌地址(
0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6
在您的情況下)持有合約的 storage,並使用 .將所有函式呼叫轉發給implementation
合約delegatecall
。這將在implementation
主代理合約的儲存上執行合約中的功能。因此,如果要讀取正確的儲存值,則需要從主代理合約中讀取它們。
您可以在主代理合約本身上使用實現合約的 ABI。