Etherscan

地圖的 getter 函式的 ABI 程式碼是什麼?

  • September 19, 2019

我目前正在嘗試呼叫 Etherscan 的 APIeth_call來檢查智能合約中的數據。為此,我需要傳遞函式 ABI 程式碼和數據。但是,我需要的數據儲存在地圖中,我不確定會映射到什麼程式碼。

有問題的契約在這裡,變數為

mapping (address => bool) public sendAllowed;

但是,通過做

Keccack (“sendAllowed(地址)”) = 2f0c92d385bd4391c0edec32b0ac39252f8a9ecbcfb630748ddb154a80318288

我得到了 0x2f0c92d3 的 ABI 程式碼。將其插入 Etherscan API,但我沒有得到正確的數據:

http://api-rinkeby.etherscan.io/api?module=proxy&action=eth_call&address=0xf455105e41f84e3f980d0908887a311233bb9953&data=0x2f0c92d3dc1f5d644e4016f3da89fe002f63fbeb8e071cf1&apikey=YOURAPIKEY

{
jsonrpc: "2.0",
id: 1,
result: "0x"
}

(應該返回真)

用於公共 getter 的正確 ABI 程式碼是什麼/如何正確呼叫 Etherscan API 來獲取數據?

您獲得了正確的函式選擇器 ( 0x2f0c92d3),但您未能正確地對address參數進行 ABI 編碼。它應該用零填充,以便它是 32 字節寬。試試這個:

0x2f0c92d3000000000000000000000000dc1f5d644e4016f3da89fe002f63fbeb8e071cf1

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