JSON-RPC API
最終編集者: @HiroyukiNaito(opens in a new tab), 2024年8月6日
ブロックチェーンデータの読み取りやネットワークへのトランザクションの送信など、ソフトウェアアプリケーションがイーサリアムブロックチェーンとやり取りするには、イーサリアムノードに接続する必要があります。
そのため、すべてのイーサリアムクライアントはJSON-RPC仕様(opens in a new tab)を実装しており、ノードやクライアントの実装がどのようなものであっても、アプリケーションは統一されたメソッドのセットを使用できます。
JSON-RPC(opens in a new tab)は、ステートレスで軽量なリモートプロシージャコール(RPC)プロトコルです。 いくつかのデータ構造とその処理に関するルールを定義しています。 トランスポートに依存しないため、同じプロセス内だけでなく、ソケット経由、HTTP経由など、さまざまなメッセージパッシング環境で利用できます。 データ形式としては、JSON(RFC 4627)を使用します。
クライアントの実装
各イーサリアムクライアントでは、JSON-RPC仕様を実装する際に異なるプログラミング言語を使用できます。 特定のプログラミング言語に関連する詳細については、各クライアントのドキュメントを参照してください。 最新のAPIサポート情報についても、各クライアントのドキュメントを確認することをお勧めします。
便利なライブラリ
JSON-RPC APIを介してイーサリアムクライアントと直接やり取りすることもできますが、dappデベロッパーの作業が多くの場合に簡単になるオプションもあります。 JavaScriptとバックエンドAPIには、JSON-RPC APIの上にラッパーを提供する多くのライブラリが存在します。 これらのライブラリを使用することで、デベロッパーは任意のプログラミング言語による直感的な1行のメソッドを作成するだけで、イーサリアムとやり取りするJSON-RPCリクエストを(内部的に)初期化できるようになります。
コンセンサスクライアントAPI
このページでは、主にイーサリアムの実行クライアントで使用されるJSON-RPC APIについて説明します。 しかし、コンセンサスクライアントには、ユーザーがノードについての情報のクエリを行えるRPC APIが用意されており、ビーコンブロック、ビーコンの状態、その他のコンセンサス関連の情報を直接ノードにリクエストできます。 このAPIについては 、ビーコンAPIのウェブページ(opens in a new tab)に記載されています。
内部APIは、ノード内のクライアント間通信にも使用されます。 つまり、コンセンサスクライアントと実行クライアントとの間のデータ交換を可能にします。 これは「Engine API」と呼ばれており、仕様はGithub(opens in a new tab)で参照できます。
実行クライアントの仕様
GitHub上でJSON-RPC APIの全仕様を読む(opens in a new tab)。
慣例
16進数のエンコーディング
フォーマットされていないバイト配列とそのバイト数という、2つのキーデータ型がJSONで渡されます。 どちらも16進数エンコーディングで渡されますが、フォーマットの要件は異なります。
バイト数
バイト数(整数、数字)をエンコーディングする際は、接頭辞「0x」の16進数でエンコードするのが最も簡潔です。ただし、ゼロは「0x0」と表記する必要があります。
以下に、いくつかの例を示します。
- 0x41(10進数で65)
- 0x400(10進数で1024)
- 誤り: 0x(常に少なくとも1桁の数字が必要です。ゼロは「0x0」)
- 誤り: 0x0400(先頭にゼロは入力できません)
- 誤り: ff(接頭辞は0xでなければなりません)
フォーマットされていないデータ
フォーマットされていないデータ(バイト配列、アカウントアドレス、ハッシュ、バイトコード配列)をエンコードする場合、16進数としてエンコードし、接頭辞を「0x」とし、1バイトごとに2桁の16進数でエンコードします。
以下に、いくつかの例を示します。
- 0x41(サイズ1、「A」)
- 0x004200 (サイズ3, "0B0")
- 0x(サイズ0、「」)
- 誤り: 0xf0f0f(偶数でなければなりません)
- 誤り: 004200(接頭辞が0xでなければなりません)
デフォルトのブロックパラメータ
以下のメソッドには、追加のデフォルトブロックパラメータがあります。
イーサリアムの状態に作用するリクエストを行う場合は、最後のデフォルトブロックパラメータによってブロックの高さが決定します。
デフォルトブロックパラメータには、以下のオプションがあります。
HEX String
- 整数のブロック番号String "earliest"
- 最も古い/始まりのブロックString "latest"
- 最も新しいマイニング済みブロックString "safe"
- 最も新しい安全な先頭ブロックString "finalized"
- 最も新しい確定済みブロックString "pending"
- 保留中の状態/トランザクション
使用例
このページでは、コマンドラインツールであるcurl(opens in a new tab)を使用した、各JSON-RPC APIエンドポイントの使用方法の例を紹介します。 各エンドポイントの使用例は、curlの使用例セクションで確認できます。 ページの下方には、Gethノード、JSON-RPC API、curlを使用したスマートコントラクトのコンパイルとデプロイのエンドツーエンドの例もあります。
Curlの使用例
以下に、curl(opens in a new tab)でイーサリアムノードへのリクエストを行うことによってJSON-RPC APIを使用する例をいくつか示します。 それぞれの例には、エンドポイントの説明、パラメータ、戻り値の型、使用方法の範例が含まれています。
curlリクエストは、コンテンツタイプに関するエラーメッセージを返すことがあります。 この理由は、--data
オプションによって、コンテンツタイプがapplication/x-www-form-urlencoded
に設定されるためです。 これによってノードがエラーになる場合は、呼び出しの最初に、手動で-H "Content-Type: application/json"
と記述してヘッダーを設定してください。 また、使用例には、curlで最後に指定する引数であるURL/IPとポートの組み合わせ(例: 127.0.0.1:8545
)が含まれていません 。 これらの追加データが含まれた完全なcurlリクエストは、次の形式になります。
1curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545
ゴシップ、状態、履歴
少数のコアJSON-RPCメソッドは、イーサリアムネットワークからのデータを必要とします。該当メソッドは、ゴシップ、状態、履歴という、3つの主要カテゴリーに明確に分類できます。 各メソッドは、セクションにあるリンクからジャンプするか、目次でメソッドの全リストを調べることで見つけられます。
ゴシップメソッド
チェーンの先頭までたどるメソッドです。 これにより、トランザクションがどのようにネットワークを進み、ブロックへたどり着くのか、また、クライアントがどのようにして新しいブロックについての情報を得るのかがわかります。
状態メソッド
このメソッドは、すべての保存データの現在の状態を報告します。 「状態」は、RAM内の1つの大きな共有部分です。アカウントの残高、コントラクトデータ、ガスの推定値が含まれています。
履歴メソッド
このメソッドは、各ブロックの履歴レコードを始まりのブロックまでさかのぼって取得します。 これは、1つの大きな追加専用ファイルのようなもので、すべてのブロックヘッダー、ブロックボディ、アンクルブロック、トランザクションレシートが含まれます。
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
JSON-RPC APIプレイグラウンド
APIメソッドの発見と試用にプレイグラウンドツール(opens in a new tab)が使えます。 プレイグラウンドツールでは、さまざまなノードプロバイダーによってサポートされているメソッドとネットワークも表示されます。
JSON-RPC APIメソッド
web3_clientVersion
現在のクライアントバージョンを返します。
パラメータ
なし
戻り値
String
- 現在のクライアントのバージョン
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1"8}コピー
web3_sha3
標準のSHA3-256ではなく、指定されたデータのKeccak-256__を返します。
パラメータ
DATA
- SHA3ハッシュに変換するデータ
1params: ["0x68656c6c6f20776f726c64"]コピー
戻り値
DATA
- 指定された文字列のSHA3結果
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}コピー
net_version
現在のネットワークIDを返します。
パラメータ
なし
戻り値
String
- 現在のネットワークID
現在のネットワークIDの全リストは、chainlist.org(opens in a new tab)で入手できます。 よく使われるネットワークIDは、以下の通りです。
1
: イーサリアムメインネット5
: Goerliテストネット11155111
: Sepoliaテストネット
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}コピー
net_listening
クライアントのネットワーク接続のリッスンがアクティブな場合に、true
を返します。
パラメータ
なし
戻り値
Boolean
- リッスンしている場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}コピー
net_peerCount
クライアントに現在接続されているピアの数を返します。
パラメータ
なし
戻り値
QUANTITY
- 接続されているピア数(整数)。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}コピー
eth_protocolVersion
現在のイーサリアムプロトコルのバージョンを返します。 このメソッドは、Gethでは利用できないこと(opens in a new tab)に注意してください。
パラメータ
なし
戻り値
String
- 現在のイーサリアムプロトコルのバージョン
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}コピー
eth_syncing
同期ステータスに関するデータを含むオブジェクトか、false
を返します。
パラメータ
なし
戻り値
クライアント実装によって、厳密にはリターンデータが異なります。 ノードが同期していない場合、すべてのクライアントはFalse
を返します。また、すべてのクライアントは次のフィールドを返します。
Object|Boolean
- 同期ステータスデータを含むオブジェクト、または同期していない場合はFALSE
startingBlock
:QUANTITY
- インポートを開始したブロック(同期がブロックの先頭に達したときのみリセットされる)currentBlock
:QUANTITY
- 現在のブロックであり、eth_blockNumberと同一highestBlock
:QUANTITY
- 最大ブロック高の推定値
ただし、クライアントによっては、追加のデータを提供する場合もあります。 例えば、Gethでは以下のデータを返します。
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": {5 "currentBlock": "0x3cf522",6 "healedBytecodeBytes": "0x0",7 "healedBytecodes": "0x0",8 "healedTrienodes": "0x0",9 "healingBytecode": "0x0",10 "healingTrienodes": "0x0",11 "highestBlock": "0x3e0e41",12 "startingBlock": "0x3cbed5",13 "syncedAccountBytes": "0x0",14 "syncedAccounts": "0x0",15 "syncedBytecodeBytes": "0x0",16 "syncedBytecodes": "0x0",17 "syncedStorage": "0x0",18 "syncedStorageBytes": "0x0"19 }20}すべて表示コピー
それに対して、Besuでは以下のデータを返します。
1{2 "jsonrpc": "2.0",3 "id": 51,4 "result": {5 "startingBlock": "0x0",6 "currentBlock": "0x1518",7 "highestBlock": "0x9567a3",8 "pulledStates": "0x203ca",9 "knownStates": "0x200636"10 }11}すべて表示コピー
詳細については、各クライアントのドキュメントを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}すべて表示コピー
eth_coinbase
クライアントのコインベースアドレスを返します。
パラメータ
なし
戻り値
DATA
、20バイト - 現在のコインベースアドレス。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}コピー
eth_chainId
リプレイ保護されたトランザクションの署名に使われるチェーンIDを返します。
パラメータ
なし
戻り値
chainId
、16進数の文字列で表された現在のチェーンIDの整数値。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "0x1"8}コピー
eth_mining
クライアントの新規ブロックのマイニングがアクティブな場合に、true
を返します。 プルーフ・オブ・ワークのネットワークに対してのみ true
を返します。マージ以降、一部のクライアントでは使用できない場合があります。
パラメータ
なし
戻り値
Boolean
- クライアントがマイニングしている場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}コピー
eth_hashrate
ノードがマイニングしている1秒あたりのハッシュの数を返します。 プルーフ・オブ・ワークのネットワークに対してのみ true
を返します。マージ以降、一部のクライアントでは使用できない場合があります。
パラメータ
なし
戻り値
QUANTITY
- 1秒あたりのハッシュの数
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}コピー
eth_gasPrice
現在のガス価格の見積りをweiで返します。 例えば、Besuクライアントではデフォルトで、最新の100ブロックを検査し、ガスのユニット価格における中央値を返します。
パラメータ
なし
戻り値
QUANTITY
- 現在のガス価格(wei単位の整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}コピー
eth_accounts
クライアントが所有するアドレスのリストを返します。
パラメータ
なし
戻り値
DATA配列
、20バイト - クライアントが所有するアドレス
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}コピー
eth_blockNumber
最も新しいブロックの番号を返します。
パラメータ
なし
戻り値
QUANTITY
- クライアントの現在のブロックの番号(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}コピー
eth_getBalance
指定されたアドレスのアカウントの残高を返します。
パラメータ
DATA
、20バイト - 残高を確認するアドレスQUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]コピー
戻り値
QUANTITY
- 現在の残高(wei単位の整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}コピー
eth_getStorageAt
指定されたアドレスのストレージの位置の値を返します。
パラメータ
DATA
、20バイト - ストレージのアドレスQUANTITY
- ストレージの位置(整数)QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
戻り値
DATA
- このストレージの位置の値
例: 正確な位置計算は、取得するストレージによって変わります。 ここでは、アドレス0x391694e7e0b0cce554cb130d723a9d27458f9298
で、0x295a70b2de5e3953354a6a8344e616ed314d7251
にデプロイされているコントラクトについて考えます。
1contract Storage {2 uint pos0;3 mapping(address => uint) pos1;4 function Storage() {5 pos0 = 1234;6 pos1[msg.sender] = 5678;7 }8}
pos0の値の取得は簡単です。
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}コピー
ただし、マップの要素の取得は、より複雑になります。 マップの要素の位置は、次のように計算されます。
1keccak(LeftPad32(key, 0), LeftPad32(map position, 0))コピー
つまり、pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"]のストレージを取得するためには、次のように位置を計算する必要があります。
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)コピー
これは、web3ライブラリに付属するGethコンソールを使用して、次のように計算できます。
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"コピー
これにより、以下のようにしてストレージを取得できます。
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}コピー
eth_getTransactionCount
アドレスから送信されたトランザクションの数を返します。
パラメータ
DATA
、20バイト - アドレスQUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block4]コピー
戻り値
QUANTITY
- このアドレスから送信されたトランザクションの数(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}コピー
eth_getBlockTransactionCountByHash
指定されたブロックハッシュに一致するブロック内のトランザクションの数を返します。
パラメータ
DATA
、32バイト - ブロックハッシュ
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]コピー
戻り値
QUANTITY
- このブロック内のトランザクションの数(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xb" // 118}コピー
eth_getBlockTransactionCountByNumber
指定されたブロック番号に一致するブロックのトランザクションの数を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0xe8", // 2323]コピー
戻り値
QUANTITY
- このブロック内のトランザクションの数(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa" // 108}コピー
eth_getUncleCountByBlockHash
指定されたブロックハッシュに一致するブロックのアンクルの数を返します。
パラメータ
DATA
、32バイト - ブロックハッシュ
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]コピー
戻り値
QUANTITY
- このブロック内のアンクルの数(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}コピー
eth_getUncleCountByBlockNumber
指定されたブロック番号に一致するブロック内のアンクルの数を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0xe8", // 2323]コピー
戻り値
QUANTITY
- このブロック内のアンクルの数(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}コピー
eth_getCode
指定されたアドレスのコードを返します。
パラメータ
DATA
、20バイト - アドレスQUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",3 "0x2", // 24]コピー
戻り値
DATA
- 指定されたアドレスからのコード
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"8}コピー
eth_sign
この署名メソッドは、イーサリアム固有の署名を次のように計算します。sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))
。
メッセージに接頭辞を追加することで、計算された署名がイーサリアム固有の署名として認識されるようになります。 これにより、悪意のあるdappによって任意のデータ(トランザクションなど)が署名され、被害者のなりすましに悪用される被害を防ぐことができます。
注: 署名するアドレスのロックを解除する必要があります。
パラメータ
DATA
、20バイト - アドレスDATA
、Nバイト - 署名するメッセージ
戻り値
DATA
: 署名
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}コピー
eth_signTransaction
eth_sendRawTransactionを使用して、ネットワークに後から送信可能なトランザクションに署名します。
パラメータ
Object
- トランザクションオブジェクト
type
:from
:DATA
、20バイト - トランザクションの送信元アドレスto
:DATA
、20バイト - (新規コントラクトの作成時はオプション)トランザクションの宛先アドレスgas
:QUANTITY
- (オプション、デフォルトは90000)トランザクションを実行するために提供されているガス(整数)で、 使用されなかったガスは返却されるgasPrice
:QUANTITY
- (オプション、デフォルトは未確定)ガスごとに支払われるガス価格(wei単位の整数)value
:QUANTITY
- (オプション)このトランザクションで送信された値(wei単位の整数)data
:DATA
- コンパイルされたコントラクトのコード。または呼び出されたメソッドの署名とエンコードされたパラメータのハッシュnonce
:QUANTITY
- (オプション)ノンス(nonce)の整数で、 同じノンス(nonce)を使用している保留中のトランザクションを上書きできる
戻り値
DATA
、特定のアカウントによって署名され、RLPエンコードされたトランザクションオブジェクト。
例
1// Request2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Result4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}コピー
eth_sendTransaction
データフィールドにコードが含まれている場合は、新しいメッセージコールトランザクションまたはコントラクト作成を行います。また、from
で指定されたアカウントを使ってデータフィールドに署名します。
パラメータ
Object
- トランザクションオブジェクト
from
:DATA
、20バイト - トランザクションの送信元アドレスto
:DATA
、20バイト - (新規コントラクトの作成時はオプション)トランザクションの宛先アドレスgas
:QUANTITY
- (オプション、デフォルトは90000)トランザクションを実行するために提供されているガス(整数)で、 使用されなかったガスは返却されるgasPrice
:QUANTITY
- (オプション、デフォルトは未確定)ガスの支払いに適用されたガス価格(整数)value
:QUANTITY
- (オプション)このトランザクションで送信された値(整数)input
:DATA
- コンパイルされたコントラクトのコード。または呼び出されたメソッドの署名とエンコードされたパラメータのハッシュnonce
:QUANTITY
- (オプション)ノンス(nonce)の整数で、 同じノンス(nonce)を使用している保留中のトランザクションを上書きできる
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 input:9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",10 },11]すべて表示コピー
戻り値
DATA
、32バイト - トランザクションのハッシュ、またはトランザクションがまだ使用可能でない場合はゼロハッシュ
コントラクトのアドレスを取得するには、コントラクトを作成したトランザクションがマイニングされた後にeth_getTransactionReceiptを使用します。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}コピー
eth_sendRawTransaction
署名されたトランザクションについて、新規メッセージ呼び出しのトランザクションの作成、またはコントラクトの作成を行います。
パラメータ
DATA
- 署名されたトランザクションのデータ
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]コピー
戻り値
DATA
、32バイト - トランザクションのハッシュ、またはトランザクションがまだ使用可能でない場合はゼロハッシュ
コントラクトのアドレスを取得するには、コントラクトを作成したトランザクションがマイニングされた後にeth_getTransactionReceiptを使用します。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}コピー
eth_call
ブロックチェーン上にトランザクションを作成せずに、即座に新規メッセージ呼び出しを実行できます。 読み取り専用のスマートコントラクト関数を実行するために頻繁に使われます(例えば、ERC-20 コントラクトのbalanceOf
など)。
パラメータ
Object
- トランザクションの呼び出しオブジェクト
from
:DATA
、20バイト - (オプション)トランザクションの送信元アドレスto
:DATA
、20バイト - トランザクションの宛先アドレスgas
:QUANTITY
- (オプション)トランザクションを実行するために提供されているガス(整数) 。 eth_callはガスを消費しませんが、一部の実行ではこのパラメータが必要になる場合があります。gasPrice
:QUANTITY
- (オプション)ガスの支払いに適用されるガス価格(整数)value
:QUANTITY
- (オプション)このトランザクションで送信された値(整数)input
:DATA
- (オプション)メソッド署名とエンコードされたパラメータのハッシュ。 詳細については、SolidityのドキュメントのイーサリアムコントラクトABI(opens in a new tab)を参照してください。
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください
戻り値
DATA
- 実行されたコントラクトの戻り値
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}コピー
eth_estimateGas
トランザクションの完了に必要なガスの推定値を計算して返します。 このトランザクションはブロックチェーンに追加されません。 推定値は、EVMの仕組みやノードのパフォーマンスなどのさまざまな理由により、トランザクションによって実際に使われるガス量を大幅に上回る可能性があることに注意してください。
パラメータ
eth_callパラメータを参照してください。ただし、すべてのプロパティはオプションです。 ガスリミットが指定されていない場合、Gethでは保留中のブロックのガスリミットが上限値として使用されます。 その結果、保留中のブロックのガスリミットよりガス量が多い場合には、返される推定値の量では、呼び出し/トランザクションを実行するには十分でないことがあります。
戻り値
QUANTITY
- ガス使用量
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}コピー
eth_getBlockByHash
ハッシュを使用して、ブロックに関する情報を返します。
パラメータ
DATA
、32バイト - ブロックのハッシュBoolean
-true
の場合は、完全なトランザクションオブジェクトを返します。false
の場合は、トランザクションのハッシュのみを返します
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]コピー
戻り値
Object
- ブロックオブジェクト、またはブロックが見つからなかった場合はnull
number
:QUANTITY
- ブロック番号。 保留中のブロックの場合はnull
hash
:DATA
、32バイト - ブロックのハッシュ。 保留中のブロックの場合はnull
parentHash
:DATA
、32バイト - 親ブロックのハッシュnonce
:DATA
、8バイト - 生成されたプルーフ・オブ・ワークのハッシュ。 保留中のブロックの場合はnull
sha3Uncles
:DATA
、32バイト - ブロックのアンクルデータのSHA3logsBloom
:DATA
、256バイト - ブロックのログのブルームフィルタ。 保留中のブロックの場合はnull
transactionsRoot
:DATA
、32バイト - ブロックのトランザクションツリーのルートstateRoot
:DATA
、32バイト - ブロックの最終状態ツリーのルートreceiptsRoot
:DATA
、32バイト - ブロックのレシートツリーのルートminer
:DATA
、20バイト - マイニング報酬が支払われる受益者のアドレスdifficulty
:QUANTITY
- このブロックの難易度(整数)totalDifficulty
:QUANTITY
- このブロックまでのチェーンの合計難易度(整数)extraData
:DATA
- このブロックの「追加データ」フィールドsize
:QUANTITY
- このブロックのサイズのバイト数(整数)gasLimit
:QUANTITY
- このブロックで許可されているガスの最大量gasUsed
:QUANTITY
- このブロックのすべてのトランザクションで使用されたガスの合計量timestamp
:QUANTITY
- ブロックが照合されたときのUNIXタイムスタンプtransactions
:Array
- 最後に指定したパラメータに応じて、トランザクションオブジェクトの配列、または32バイトのトランザクションハッシュuncles
:Array
- アンクルハッシュの配列
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Result4{5{6"jsonrpc": "2.0",7"id": 1,8"result": {9 "difficulty": "0x4ea3f27bc",10 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",11 "gasLimit": "0x1388",12 "gasUsed": "0x0",13 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",14 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",15 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",16 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",17 "nonce": "0x689056015818adbe",18 "number": "0x1b4",19 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",20 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",21 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",22 "size": "0x220",23 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",24 "timestamp": "0x55ba467c",25 "totalDifficulty": "0x78ed983323d",26 "transactions": [27 ],28 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",29 "uncles": [30 ]31}32}すべて表示コピー
eth_getBlockByNumber
ブロック番号を使用して、ブロックに関する情報を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してくださいBoolean
-true
の場合は、完全なトランザクションオブジェクトを返します。false
の場合は、トランザクションのハッシュのみを返します
1params: [2 "0x1b4", // 4363 true,4]コピー
戻り値については、eth_getBlockByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'コピー
結果については、eth_getBlockByHashを参照してください。
eth_getTransactionByHash
トランザクションハッシュを使用して、リクエストされたトランザクションに関する情報を返します。
パラメータ
DATA
、32バイト - トランザクションのハッシュ
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]コピー
戻り値
Object
- トランザクションオブジェクト、またはトランザクションが見つからなかった場合はnull
blockHash
:DATA
、32バイト - このトランザクションが組み込まれていたブロックのハッシュ。 保留中の場合はnull
blockNumber
:QUANTITY
- このトランザクションが組み込まれていたブロックの番号 保留中の場合はnull
from
:DATA
、20バイト - 送信者のアドレスgas
:QUANTITY
- 送信者が提供するガスgasPrice
:QUANTITY
- 送信者が指定したガス価格(wei単位)hash
:DATA
、32バイト - トランザクションのハッシュinput
:DATA
- トランザクションと共に送信されるデータnonce
:QUANTITY
- 送信者がこのトランザクションより前に送信したトランザクションの数to
:DATA
、20バイト - 受信者のアドレス。 コントラクト作成時のトランザクションはnull
transactionIndex
:QUANTITY
- ブロック内のトランザクションのインデックスの位置(整数)。 保留中の場合はnull
value
:QUANTITY
- 送金された価値(wei単位)v
:QUANTITY
- ECDSAのリカバリIDr
:QUANTITY
- ECDSA署名rs
:QUANTITY
- ECDSA署名s
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 5000012 "gasPrice":"0x4a817c800", // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 6518 "value":"0xf3dbb76162000", // 429000000000000019 "v":"0x25", // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}すべて表示コピー
eth_getTransactionByBlockHashAndIndex
ブロックのハッシュとトランザクションのインデックスの位置を使用して、トランザクションに関する情報を返します。
パラメータ
DATA
、32バイト - ブロックのハッシュQUANTITY
- トランザクションのインデックスの位置(整数)
1params: [2 "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",3 "0x0", // 04]コピー
戻り値については、eth_getTransactionByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'コピー
結果については、eth_getTransactionByHashを参照してください。
eth_getTransactionByBlockNumberAndIndex
ブロック番号とトランザクションのインデックスの位置を使用して、トランザクションに関する情報を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号、または文字列"latest"
、"earliest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してくださいQUANTITY
- トランザクションのインデックスの位置
1params: [2 "0x9c47cf", // 102419993 "0x24", // 364]コピー
戻り値については、eth_getTransactionByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}'コピー
結果については、eth_getTransactionByHashを参照してください。
eth_getTransactionReceipt
トランザクションのハッシュを使用して、トランザクションのレシートを返します。
注 : 保留中のトランザクションでは、レシートは取得できません。
パラメータ
DATA
、32バイト - トランザクションのハッシュ
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]コピー
戻り値 Object
- トランザクションレシートのオブジェクト、またはレシートが見つからなかった場合はnull
transactionHash
:DATA
、32バイト - トランザクションのハッシュtransactionIndex
:QUANTITY
- ブロック内のトランザクションのインデックスの位置(整数)。blockHash
:DATA
、32バイト - このトランザクションが組み込まれていたブロックのハッシュ。blockNumber
:QUANTITY
- このトランザクションが組み込まれていたブロックの番号from
:DATA
、20バイト - 送信者のアドレスto
:DATA
、20バイト - 受信者のアドレス。 コントラクト作成時のトランザクションはnullcumulativeGasUsed
:QUANTITY
- ブロック内でこのトランザクションの実行時に使用されたガスの総量effectiveGasPrice
:QUANTITY
- ガスユニットごとに支払われるベースフィーとチップの合計gasUsed
:QUANTITY
- この特定のトランザクションのみで使用されたガスの量contractAddress
:DATA
、20バイト - コントラクト作成のトランザクションの場合は、作成されたコントラクトのアドレス、その他の場合はnull
logs
:Array
- このトランザクションが生成したログオブジェクトの配列logsBloom
:DATA
、256バイト - 関連ログを迅速に取得するためのライトクライアント用のブルームフィルター。type
:QUANTITY
- トランザクションタイプの整数、0x0
でレガシートランザクション、0x1
でアクセスリストタイプ、0x2
で動的フィー。
また、以下のうちいずれかを返します。
root
:DATA
、32バイト - トランザクション後の状態ルート(ビザンチウム以前)status
:QUANTITY
-1
(成功)、または0
(失敗)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// Result4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // string of the address if it was created12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // logs as returned by getFilterLogs, etc.18 }],19 "logsBloom": "0x00...0", // 256 byte bloom filter20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}すべて表示コピー
eth_getUncleByBlockHashAndIndex
ハッシュとアンクルインデックスの位置を使用して、ブロックのアンクルに関する情報を返します。
パラメータ
DATA
、32バイト - ブロックのハッシュQUANTITY
- アンクルのインデックスの位置
1params: [2 "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",3 "0x0", // 04]コピー
戻り値については、eth_getBlockByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'コピー
結果については、eth_getBlockByHashを参照してください。
注: アンクルには、個々のトランザクションは含まれていません。
eth_getUncleByBlockNumberAndIndex
ブロック番号とアンクルのインデックスの位置を使用して、ブロックのアンクルに関する情報を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号、または文字列"earliest"
、"latest"
、"pending"
、"safe"
、"finalized"
のいずれか。デフォルトのブロックパラメータを参照してください。QUANTITY
- アンクルのインデックスの位置
1params: [2 "0x29c", // 6683 "0x0", // 04]コピー
戻り値については、eth_getBlockByHashを参照してください。
注: アンクルには、個々のトランザクションは含まれていません。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'コピー
結果については、eth_getBlockByHashを参照してください。
eth_newFilter
(ログの)状態変更を通知するために、フィルターオプションに基づいてフィルターオブジェクトを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。
トピックフィルターを指定する際の注: トピックは順序に依存します。 トピック [A, B] を持つログのトランザクションは、下記のトピックフィルターによってマッチングされます。
[]
「条件なし」[A]
「最初の位置がA(その後の位置については条件なし) 」[null, B]
「最初の位置は条件なし、かつ2番目の位置がB(その後の位置については条件なし) 」[A, B]
「最初の位置がA、かつ2番目の位置がB(その後の位置については条件なし) 」[[A, B], [A, B]]
「最初の位置が(AまたはB)、かつ2番目の位置が(AまたはB)(その後の位置については条件なし) 」- パラメータ
Object
- フィルターオプション
fromBlock
:QUANTITY|TAG
- (オプション、デフォルトは"latest"
)ブロック番号(整数)、または"latest"
(最後にマイニングされたブロック)、"safe"
(最新のセーフブロック)、"finalized"
(最新の確定されたブロック)、"pending"
、"earliest"
(まだマイニングされていないトランザクション)のいずれかtoBlock
:QUANTITY|TAG
- (オプション、デフォルトは"latest"
)ブロック番号(整数)、または"latest"
(最後にマイニングされたブロック)、"safe"
(最新のセーフブロック)、"finalized"
(最新の確定されたブロック)、"pending"
、"earliest"
(まだマイニングされていないトランザクション)のいずれかaddress
:DATA|Array
、20バイト - (オプション)ログの生成元となるコントラクトアドレス、またはアドレスのリストtopics
:Array of DATA
、- (オプション)32バイトのDATA
トピックの配列。 トピックは順序に依存します。 各トピックは「or」オプションのDATA配列にすることも可能
1params: [2 {3 fromBlock: "0x1",4 toBlock: "0x2",5 address: "0x8888f1f195afa192cfee860698584c030f4c9db1",6 topics: [7 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",8 null,9 [10 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",11 "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc",12 ],13 ],14 },15]すべて表示コピー
戻り値 QUANTITY
- フィルターID
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}コピー
eth_newBlockFilter
新しいブロックの到着を通知するために、ノードにフィルターを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。
パラメータ なし
戻り値 QUANTITY
- フィルターID
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}コピー
eth_newPendingTransactionFilter
新しい保留中のトランザクションの到着を通知するために、ノードにフィルターを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。
パラメータ なし
戻り値 QUANTITY
- フィルターID
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}コピー
eth_uninstallFilter
指定されたIDを使用して、フィルターをアンインストールします。 ウォッチが不要になったら、必ず呼び出す必要があります。 また、フィルターは一定期間、eth_getFilterChangesを使用してリクエストされなければタイムアウトします。
パラメータ
QUANTITY
- フィルターID
1params: [2 "0xb", // 113]コピー
戻り値 Boolean
- フィルターのアンインストールに成功した場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}コピー
eth_getFilterChanges
フィルターのポーリングメソッド。最後のポーリング以降に発生したログの配列を返します。
パラメータ
QUANTITY
- フィルターID
1params: [2 "0x16", // 223]コピー
戻り値 Array
- ログオブジェクトの配列、または最後のポーリングから変化がない場合は空の配列
eth_newBlockFilter
で作成したフィルターでは、ブロックハッシュ(DATA
、32バイト)が返されます(例:["0x3454645634534..."]
)eth_newPendingTransactionFilter
で作成したフィルターでは、トランザクションハッシュ(DATA
、32バイト)が返されます(例:["0x6345343454645..."]
)eth_newFilter
で作成されたフィルターでは、ログは下記のパラメータを持つオブジェクトになりますremoved
:TAG
- チェーンの再編成によってログが削除された場合はtrue
。 ログが有効な場合はfalse
logIndex
:QUANTITY
- ブロック内のログインデックスの位置(整数)。 保留中のログの場合はnull
transactionIndex
:QUANTITY
- ログの作成元のトランザクションのインデックスの位置(整数) 。 保留中のログの場合はnull
transactionHash
:DATA
、32バイト - このログが作成されたトランザクションのハッシュ。 保留中のログの場合はnull
blockHash
:DATA
、32バイト - このログが存在したブロックのハッシュ。 保留中の場合はnull
保留中のログの場合はnull
blockNumber
:QUANTITY
- このログが存在したブロックの番号。 保留中の場合はnull
保留中のログの場合はnull
address
:DATA
、20バイト - このログの作成元のアドレスdata
:DATA
- ゼロまたは32バイト以上のインデックス付けがされていないログの引数を含むtopics
:Array of DATA
- 0から4つの32バイトのインデックス付けされたログの引数のDATA
配列。 (Solidityの場合: 最初のトピックはイベント(例:Deposit(address,bytes32,uint256)
)の署名のハッシュ。ただし、anonymous
指定子でイベントを宣言した場合を除く)
- 例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 19 "blockNumber":"0x1b4", // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}すべて表示コピー
eth_getFilterLogs
指定されたIDのフィルターに一致する、すべてのログの配列を返します。
パラメータ
QUANTITY
- フィルターID
1params: [2 "0x16", // 223]コピー
戻り値については、 eth_getFilterChangesを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'コピー
結果については、eth_getFilterChangesを参照してください。
eth_getLogs
指定されたフィルターオブジェクトに一致する、すべてのログの配列を返します。
パラメータ
Object
- フィルターオプション
fromBlock
:QUANTITY|TAG
- (オプション、デフォルトは"latest"
)ブロック番号(整数)、または"latest"
(最後にマイニングされたブロック)、"safe"
(最新のセーフブロック)、"finalized"
(最新の確定されたブロック)、"pending"
、"earliest"
(まだマイニングされていないトランザクション)のいずれかtoBlock
:QUANTITY|TAG
- (オプション、デフォルトは"latest"
)ブロック番号(整数)、または"latest"
(最後にマイニングされたブロック)、"safe"
(最新のセーフブロック)、"finalized"
(最新の確定されたブロック)、"pending"
、"earliest"
(まだマイニングされていないトランザクション)のいずれかaddress
:DATA|Array
、20バイト - (オプション)ログの生成元となるコントラクトアドレス、またはアドレスのリストtopics
:Array of DATA
、- (オプション)32バイトのDATA
トピックの配列。 トピックは順序に依存します。 各トピックは「or」オプションのDATA配列にすることも可能blockhash
:DATA
、32バイト - (オプション、実装予定) EIP-234が追加されたことにより、blockHash
が新たなフィルターオプションになります。これは、返されるログを32バイトのハッシュblockHash
を持つ単一のブロックに制限します。blockHash
を使用することは、fromBlock
とtoBlock
にblockHash
のハッシュのブロック番号を指定することと同等です。blockHash
がフィルター条件にある場合、fromBlock
とtoBlock
は使用できません。
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]コピー
戻り値については、 eth_getFilterChangesを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'コピー
結果については、eth_getFilterChangesを参照してください。
使用例
JSON_RPCを使用してコントラクトをデプロイする
このセクションでは、RPCインターフェースのみを使用してコントラクトをデプロイする方法について、実例を交えて説明します。 コントラクトをデプロイする際には、複雑さを抽象化できる別の方法があります。例えば、RPCインターフェースを基盤としたライブラリ(web3.js(opens in a new tab)、web3.py(opens in a new tab)など)を使用できます。 通常、抽象化すると簡単に理解できるようになり、エラーも起こりにくくなります。それでも、内部の仕組みを知っておくことで、理解を深めることができます。
以下は、JSON-RPCインターフェースを使用してイーサリアムノードにデプロイされる、Multiply7
と呼ばれる簡単なスマートコントラクトです。 このチュートリアルは、読者がすでにGethノードを実行していることを前提としています。 ノードとクライアントの詳細については、こちらをご覧ください。 また、Gethクライアント以外のHTTP JSON-RPCを起動する方法については、それぞれのクライアントのドキュメントを参照してください。 ほとんどのクライアントは、デフォルトではlocalhost:8545
で動作します。
1contract Multiply7 {2 event Print(uint);3 function multiply(uint input) returns (uint) {4 Print(input * 7);5 return input * 7;6 }7}
まず、HTTP RPCインターフェースが有効になっていることを確認します。 つまり、Gethの起動時に--http
フラグを設定します。 この例では、プライベート開発チェーン上のGethノードを使用します。 このアプローチを使用する際には、本物のネットワーク上のEtherは必要ありません。
geth --http --dev console 2>>geth.log
これにより、HTTP RPCインターフェースがhttp://localhost:8545
で開始します。
curl(opens in a new tab)を使用してCoinbaseアドレスと残高を取得することにより、インターフェースが実行されていることを確認できます。 例で示されているデータは、ローカルノードによって異なりますのでご注意ください。 これらのコマンドを試す場合は、2番目のcurlリクエストのrequestパラメータの値を、1番目のcurlリクエストから返されたresultパラメータに置き換えてください。
curl --data '{"jsonrpc":"2.0","method":"eth_coinbase", "id":1}' -H "Content-Type: application/json" localhost:8545{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]}curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"}
数値は16進数でエンコードされているため、残高は16進数のweiで返されます。 Ether単位で残高を確認したい場合は、GethコンソールからWeb3を使用できます。
1web3.fromWei("0x1639e49bba16280000", "ether")2// "410"
これで、プライベート開発チェーンにEtherが存在するようになったため、コントラクトをデプロイできるようになりました。 最初のステップは、Multiply7コントラクトをEVMに送信できるバイトコードにコンパイルすることです。 Solidityのコンパイラであるsolcをインストールするには、Solidityドキュメント(opens in a new tab)を参照してください (この例で使用しているコンパイラのバージョン(opens in a new tab)に適合するように、古いsolc
リリースを使用することをお勧めします)。
次のステップでは、Multiply7コントラクトを、EVMに送信できるバイトコードにコンパイルします。
echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin======= <stdin>:Multiply7 =======Binary:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029
これで、コードがコンパイルされました。次に、デプロイに必要なガスの量を特定する必要があります。 RPCインターフェースには、推定値を取得するためのeth_estimateGas
メソッドがあります。
curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":5,"result":"0x1c31e"}
最後に、コントラクトをデプロイします。
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"}
トランザクションがノードによって受け入れられると、トランザクションのハッシュが返されます。 このハッシュはトランザクションの追跡に使用されます。 次のステップは、コントラクトがデプロイされているアドレスを特定することです。 実行された各トランザクションによって、レシートが作成されます。 このレシートには、トランザクションが含まれていたブロックや、EVMによって使用されたガスの量など、トランザクションに関するさまざまな情報が含まれています。 トランザクション でコントラクトが作成される場合は、コントラクトのアドレスも含まれています。 レシートは、eth_getTransactionReceipt
RPCメソッドで取得できます。
curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}
これで、コントラクトが0x4d03d617d700cf81935d7f797f4e2ae719648262
に作成されました。 レシートの代わりにnullの結果が得られた場合は、トランザクションがまだブロックに含まれていないことを意味します。 しばらく待ってから、自分のマイナーが実行中になっていることを確認してから再試行してください。
スマートコントラクトとのやりとり
この例では、eth_sendTransaction
を使用して、コントラクトのmultiply
メソッドにトランザクションを送信します。
eth_sendTransaction
にはいくつかの引数、具体的にはfrom
、to
、data
が必要です。 from
は、アカウントの公開アドレスで、to
はコントラクトアドレスです。 引数data
には、どのメソッドがどの引数で呼び出されるのかが定義されたペイロードが含まれています。 ここで、ABI(アプリケーション・バイナリー・インターフェース)(opens in a new tab)を使用します。 ABIは、EVMのためにデータの定義とエンコードの方法を明示したJSONファイルです。
ペイロードのバイトによって、コントラクトのどのメソッドが呼び出されるかが定義されています。 これは、関数名とその引数の型を16進数でエンコードしたKeccakハッシュの最初の4バイトです。 multiply関数はuint256のエイリアスであるuintを受け取ります。 そのため、以下のようになります。
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"
次のステップでは、引数をエンコードします。 uint256は1つのみです。この例では6とします。 ABIには、uint256型のエンコード方法を指定するセクションがあります。
int<M>: enc(X)
は、Xのビッグエンディアンの2の補数表現でのエンコーディングです。長さが32バイトの倍数になるように、Xが負の場合は0xffを使用して、正の場合は0>バイトを使用して左詰めされます。
これにより、00000000000000000000000000000000000000000000006
とエンコードされます。
関数セレクターとエンコードされた引数を組み合わせると、データは 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006
になります。
これを、以下のようにノードに送信します。
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}
トランザクションが送信されたので、トランザクションハッシュが返されました。 取得したレシートには、以下が含まれています。
1{2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",3 blockNumber: 268,4 contractAddress: null,5 cumulativeGasUsed: 22631,6 gasUsed: 22631,7 logs: [{8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",10 blockNumber: 268,11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",12 logIndex: 0,13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",15 transactionIndex: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}すべて表示
レシートには、ログが含まれています。 このログは、EVMによってトランザクションの実行時に生成され、レシートに含まれます。 multiply
関数によって、Print
イベントが入力の7倍で発生したことが示されています。 Print
イベントの引数はuint256であるため、ABIルールに従ってデコードできます。これにより、期待される10進数である42が得られます。 このデータのほかに、トピックを使用することでどのイベントによってログが作成されたかを把握することもできます。
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"
ここまで、最も一般的なタスクをいくつか簡単に紹介し、JSON-RPCを直接使用するための方法を実例を交えて説明しました。