Contract-Invocation

如何查詢乙太坊合約以從中獲取數據?

  • January 1, 2020

如何查詢乙太坊合約以從中獲取數據?

您可以eth_call按如下方式使用:

https://api.etherscan.io/api?module=proxy&action=eth_call&to=0xbc1869a652f68260428b382fd06c96196d92d02d&data=0x8620410b&tag=latest

傳遞該方法的 Keccak 雜湊的前 4 個字節(8 個字元)0x作為data參數。您可以使用這樣的工具來獲取雜湊。在您的情況下,您希望對字元串進行雜湊處理buyPrice()(如果方法接受參數,則不同)。這的前 8 個字元是8620410b,導致上面提供的數據參數。

返回值為十六進制。使用您喜歡的方法轉換回十進制。這是一個線上的。如果您的語言在字元串長度上阻塞,您可以刪除任何前導零。例如,在發佈時,返回值為0x0000000000000000000000000000000000000000000000000002e1d9ae30ae00。您可以將0x2e1d9ae30ae00其減少為811275000000000wei (0.000811275ETH)。

請注意,速率限制為每秒 5 個請求。超過這個值,你可能會被列入黑名單。

您可以使用 API。您需要使用的函式是 eth_call。但是,您將需要以下字節碼:function buyPrice您可以通過 web3 1.0 獲得。

另一種方法是也使用 web3,如下所示:

首先,buyPrice 由一個名為 same 的函式返回buyPrice

function buyPrice() public

其次,您需要為合約創建一個實例,因為您需要合約的 ABI,您可以通過在 remix 中複製粘貼合約程式碼來獲得它,然後您可以使用 Infura 訪問乙太坊(免費)像這樣:

web3 = new Web3(new Web3.providers.HttpProvider("use infura acces token here")); 
ABI = "here all the ABI string"
var pyramidContract = web3.eth.contract(ABI);
var pyramidInstance = contrato.at('0xBc1869a652F68260428b382fd06C96196D92d02D')
pyramidInstance.buyPrice(function(err,result){
   console.log(result) // this is the returned value
})

希望這有幫助。

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