Contract-Invocation
獲得不改變任何狀態變數的智能合約方法的結果
我知道在乙太坊中,如果一種智能合約方法不改變狀態變數,我們可以在不進行任何交易的情況下看到它的結果。
現在我想知道如何以程式方式查看此方法的結果?
例如,通過瀏覽器網站的 api,我可以向它發送一些數據,它會向我顯示一些結果。
我正在使用 php。所以請不要給我 web3.js 或 python 等。
例如,我想在此地址中獲取網路上
totalSupply
呼叫的智能合約方法的DS2Token
結果:ropsten``0x53778036dce23a22303142923316af257d7ee813
我想有人在某處為 PHP 編寫了 web3 實現,但不管怎樣,您都可以通過對節點的簡單 HTTP 呼叫或諸如 infura 之類的代理來做到這一點。
要從函式中讀取,您需要知道它的簽名和要傳遞的參數。因為
totalSupply()
,這只是函式名的 keccak256 散列的前 4 個字節作為字元串,即keccak256("totalSupply()")
,即0x18160ddd
。您可以將其設置data
為交易的地址,並將您的合約地址設置為to
欄位,然後向eth_call
. 在 curl 中,這看起來像:curl https://ropsten.infura.io/ \ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_call","params": [ {"from": "0x53778036dce23a22303142923316af257d7ee813", "to": "0x53778036dce23a22303142923316af257d7ee813", "gas": "0x76c0","gasPrice": "0x9184e72a000","value": "0x0", "data": "0x18160ddd"}, "latest"],"id":1}'
from
andgasPrice
值可以是任何值,但需要gas
足夠大以允許完成讀取操作。你會得到一個類似的結果
{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000052b7d2c7f6fac568ea0000"}
。然後,只需將收到的十六進制數轉換為十進制數,您就可以獲得總供應量。