Remix

混音無法辨識數組中的 WMATIC 地址

  • July 9, 2021

我被困在嘗試使用 Remix 編譯契約。我正在初始化一個數組,如下所示:

address[] public wmaticToUsdcPath =[0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270, 0x2791bca1f2de4661ed88a30c99a7a9449aa84174];

但是 Remix 不會編譯並且抱怨 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270 不是錯誤。確切的錯誤是,這看起來像一個數組,但校驗和無效。它建議我在它前面加上“00”並將我引導到https://docs.soliditylang.org/en/develop/types.html#address-literals但我似乎不明白該怎麼做。前置“00”將更改地址。我正在研究 MATIC/Polygon 網路。

有趣的是,如果我聲明一個地址變數並將 WMATIC 地址分配給它,它就會被編譯器接受。

有誰知道為什麼數組中不接受 MATIC 地址。

乙太坊地址具有校驗和,solidity 強制執行該校驗和以避免“拼寫”錯誤。

如果他們分配給一個 uint 前置 0 將使它跳過校驗和

uint a = 0x002791bca1f2de4661ed88a30c99a7a9449aa84174;

分配給地址時它不起作用,因為需要校驗和。在這種情況下,解決方案是添加它

address b = 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174;

另一種方法是定義為 bytes20

bytes20 c = hex"2791bca1f2de4661ed88a30c99a7a9449aa84174";

或者使用solidity 0.4,這是缺少校驗和不是錯誤的最新版本。

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