Contract-Invocation
Infura Json RPC:如何呼叫傳遞參數的函式?
重要的
我的最終目標是通過 php 伺服器上的 api 接收數據並使用 Infura 呼叫我的契約來保存數據
測試情況
在rinkeby上有這個測試契約
contract test008 { mapping (uint256 => string ) private storedData; function set(uint _index, string memory _data_to_store) public { storedData[_index] = _data_to_store; } function get(uint _index) public view returns (string memory) { return storedData[_index]; } }
呼叫的正確語法是什麼
set(100, 'hello world')
??
使用
curl
,如何使用該-d
選項傳遞數據?curl https://rinkeby.infura.io/v3/<project_id>\ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_call","params": [ { "to":"hex_address_of_my_contact", "data" : " ?????? " }, "latest" ]}
我必須在 中指定合約的 eth 地址
to
,對嗎?我必須指定函式的名稱,但是如何?
然後我必須傳遞參數,但是……如何?
data
:$$ optional $$方法簽名和編碼參數的雜湊。詳見乙太坊合約 ABI
這個
data
參數是為呼叫指定函式名稱和參數的地方嗎?如果是的話….怎麼樣?!核心問題
如果一切真的是關於數據參數……
我可以生成具有函式名稱和參數的數據雜湊嗎?如何?有沒有關於如何進行這種編碼的文件?更好:你知道編碼 php 庫嗎?
web3.js 也可以在伺服器端環境中使用,具體取決於您的語言實現,這是最好的方法。
可以手動執行此操作,但您需要對所有參數和簽名進行編碼,並對交易進行簽名。
這是一篇關於乙太坊交易格式的文章:在乙太坊交易 中它描述了實現這種事情的所有必要步驟。
您正在嘗試更新合約的狀態,為此您必須執行區塊鏈交易,但eth_call不適用於觸發交易,請在此處閱讀更多內容。對您的情況有用的是使用eth_sendRawTransaction 在這裡閱讀更多內容。在參數中,您必須放置必須由交易創建者的私鑰簽名的交易數據。