以太坊JSON-RPC(JavaScript Object Notation-Remote Procedure Call)是一個基于JSON的遠程過程調用協議,可以讓Web3應用程序通過HTTP或IPC(進程間通信)與以太坊節點進行通信,并訪問以太坊區塊鏈上的數據和功能。
在使用JSON-RPC時,Web3應用程序會向以太坊節點發送一個HTTP請求或IPC請求,以請求某個方法或查詢某個狀態。請求會包含一個JSON對象,其中至少包含一個方法名和其他必要參數,以及一個指示要返回結果的ID。
{ "jsonrpc": "2.0", "method": "eth_blockNumber", "params": [], "id": 1 }
以太坊節點會解析請求并執行相應的方法或查詢,并返回一個JSON對象響應,其中包含結果或錯誤信息,以及請求ID以便與請求對應。
{ "jsonrpc": "2.0", "result": "0x4b7", // hex表示的最新區塊編號 "id": 1 }
Web3應用程序可以使用各種庫(如web3.js、ethjs、ethers.js等)處理JSON-RPC請求和響應,以便與以太坊節點進行交互。
以下是一些常用的eth命令和JSON-RPC方法:
// 獲取最新塊編號 eth.blockNumber // 獲取指定塊編號的塊對象 eth.getBlock(blockHashOrBlockNumber[, returnTransactionObjects]) // 獲取指定交易哈希的交易對象 eth.getTransaction(txHash) // 發送交易到以太坊網絡 eth.sendTransaction(transactionObject) // 獲取指定地址的以太幣余額 eth.getBalance(address[, defaultBlock]) // 獲取指定地址的交易歷史記錄 eth.getTransactionsByAddress(address[, options]) // 獲取指定地址的合約代碼 eth.getCode(address[, defaultBlock]) // 發送RPC請求 web3.eth.call(callObject[, defaultBlock])
需要注意的是,JSON-RPC是一個無狀態的協議,節點不會保存任何關于請求的狀態信息。每個請求都是相互獨立的,因此必須在請求的每個響應中包含請求ID。