Contract-Invocation

Infura Json RPC:如何呼叫傳遞參數的函式?

  • January 10, 2020

重要的

我的最終目標是通過 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,對嗎?

我必須指定函式的名稱,但是如何?

然後我必須傳遞參數,但是……如何?

文件eth_call function

data:

$$ optional $$方法簽名和編碼參數的雜湊。詳見乙太坊合約 ABI

這個data參數是為呼叫指定函式名稱和參數的地方嗎?如果是的話….怎麼樣?!

核心問題

如果一切真的是關於數據參數……

我可以生成具有函式名稱和參數的數據雜湊嗎?如何?有沒有關於如何進行這種編碼的文件?更好:你知道編碼 php 庫嗎?

web3.js 也可以在伺服器端環境中使用,具體取決於您的語言實現,這是最好的方法。

可以手動執行此操作,但您需要對所有參數和簽名進行編碼,並對交易進行簽名。

這是一篇關於乙太坊交易格式的文章:在乙太坊交易 中它描述了實現這種事情的所有必要步驟。

您正在嘗試更新合約的狀態,為此您必須執行區塊鏈交易,但eth_call不適用於觸發交易,請在此處閱讀更多內容。對您的情況有用的是使用eth_sendRawTransaction 在這裡閱讀更多內容。在參數中,您必須放置必須由交易創建者的私鑰簽名的交易數據。

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