メインコンテンツへスキップ
Change page

JSON-RPC API

最終編集者: @HiroyukiNaito(opens in a new tab), 2024年4月1日

ブロックチェーンデータの読み取りやネットワークへのトランザクションの送信など、ソフトウェアアプリケーションがイーサリアムブロックチェーンとやり取りするには、イーサリアムノードに接続する必要があります。

そのため、すべてのイーサリアムクライアント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、「\0B\0」)
  • 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つの大きな追加専用ファイルのようなもので、すべてのブロックヘッダー、ブロックボディ、アンクルブロック、トランザクションレシートが含まれます。

JSON-RPC APIメソッド

web3_clientVersion

現在のクライアントバージョンを返します。

パラメータ

なし

戻り値

String - 現在のクライアントのバージョン

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'
3// Result
4{
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__を返します。

パラメータ

  1. DATA - SHA3ハッシュに変換するデータ
1params: ["0x68656c6c6f20776f726c64"]
コピー

戻り値

DATA - 指定された文字列のSHA3結果

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
3// Result
4{
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// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "3"
8}
コピー

net_listening

クライアントのネットワーク接続のリッスンがアクティブな場合に、trueを返します。

パラメータ

なし

戻り値

Boolean - リッスンしている場合はtrue、その他の場合はfalse

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc":"2.0",
7 "result":true
8}
コピー

net_peerCount

クライアントに現在接続されているピアの数を返します。

パラメータ

なし

戻り値

QUANTITY - 接続されているピア数(整数)。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
3// Result
4{
5 "id":74,
6 "jsonrpc": "2.0",
7 "result": "0x2" // 2
8}
コピー

eth_protocolVersion

現在のイーサリアムプロトコルのバージョンを返します。 このメソッドは、Gethでは利用できないこと(opens in a new tab)に注意してください。

パラメータ

なし

戻り値

String - 現在のイーサリアムプロトコルのバージョン

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
3// Result
4{
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// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": {
8 startingBlock: '0x384',
9 currentBlock: '0x386',
10 highestBlock: '0x454'
11 }
12}
13// Or when not syncing
14{
15 "id":1,
16 "jsonrpc": "2.0",
17 "result": false
18}
すべて表示
コピー

eth_coinbase

クライアントのコインベースアドレスを返します。

パラメータ

なし

戻り値

DATA、20バイト - 現在のコインベースアドレス。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'
3// Result
4{
5 "id":64,
6 "jsonrpc": "2.0",
7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"
8}
コピー

eth_chainId

リプレイ保護されたトランザクションの署名に使われるチェーンIDを返します。

パラメータ

なし

戻り値

chainId、16進数の文字列で表された現在のチェーンIDの整数値。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}'
3// Result
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "0x1"
8}
コピー

eth_mining

クライアントの新規ブロックのマイニングがアクティブな場合に、trueを返します。 プルーフ・オブ・ワークのネットワークに対してのみ trueを返します。マージ以降、一部のクライアントでは使用できない場合があります。

パラメータ

なし

戻り値

Boolean - クライアントがマイニングしている場合はtrue、その他の場合はfalse

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'
3//
4{
5 "id":71,
6 "jsonrpc": "2.0",
7 "result": true
8}
コピー

eth_hashrate

ノードがマイニングしている1秒あたりのハッシュの数を返します。 プルーフ・オブ・ワークのネットワークに対してのみ trueを返します。マージ以降、一部のクライアントでは使用できない場合があります。

パラメータ

なし

戻り値

QUANTITY - 1秒あたりのハッシュの数

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'
3// Result
4{
5 "id":71,
6 "jsonrpc": "2.0",
7 "result": "0x38a"
8}
コピー

eth_gasPrice

現在のガス価格の見積りをweiで返します。 例えば、Besuクライアントではデフォルトで、最新の100ブロックを検査し、ガスのユニット価格における中央値を返します。

パラメータ

なし

戻り値

QUANTITY - 現在のガス価格(wei単位の整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'
3// Result
4{
5 "id":73,
6 "jsonrpc": "2.0",
7 "result": "0x1dfd14000" // 8049999872 Wei
8}
コピー

eth_accounts

クライアントが所有するアドレスのリストを返します。

パラメータ

なし

戻り値

DATA配列、20バイト - クライアントが所有するアドレス

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]
8}
コピー

eth_blockNumber

最も新しいブロックの番号を返します。

パラメータ

なし

戻り値

QUANTITY - クライアントの現在のブロックの番号(整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'
3// Result
4{
5 "id":83,
6 "jsonrpc": "2.0",
7 "result": "0x4b7" // 1207
8}
コピー

eth_getBalance

指定されたアドレスのアカウントの残高を返します。

パラメータ

  1. DATA、20バイト - 残高を確認するアドレス
  2. QUANTITY|TAG - ブロック番号 (整数)、もしくは文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]
コピー

戻り値

QUANTITY - 現在の残高(wei単位の整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x0234c8a3397aab58" // 158972490234375000
8}
コピー

eth_getStorageAt

指定されたアドレスのストレージの位置の値を返します。

パラメータ

  1. DATA、20バイト - ストレージのアドレス
  2. QUANTITY - ストレージの位置(整数)
  3. QUANTITY|TAG - ブロック番号 (整数)、もしくは文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください

戻り値

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:8545
2{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}
コピー

ただし、マップの要素の取得は、より複雑になります。 マップの要素の位置は、次のように計算されます。

1keccack(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"
2undefined
3> web3.sha3(key, {"encoding": "hex"})
4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"
コピー

これにより、以下のようにしてストレージを取得できます。

1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545
2{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}
コピー

eth_getTransactionCount

アドレスから送信されたトランザクションの数を返します。

パラメータ

  1. DATA、20バイト - アドレス
  2. QUANTITY|TAG - ブロック番号 (整数)、もしくは文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
1params: [
2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",
3 "latest", // state at the latest block
4]
コピー

戻り値

QUANTITY - このアドレスから送信されたトランザクションの数(整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}
コピー

eth_getBlockTransactionCountByHash

指定されたブロックハッシュに一致するブロック内のトランザクションの数を返します。

パラメータ

  1. DATA、32バイト - ブロックハッシュ
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]
コピー

戻り値

QUANTITY - このブロック内のトランザクションの数(整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xb" // 11
8}
コピー

eth_getBlockTransactionCountByNumber

指定されたブロック番号に一致するブロックのトランザクションの数を返します。

パラメータ

  1. QUANTITY|TAG - ブロックの番号(整数)、または文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
1params: [
2 "0xe8", // 232
3]
コピー

戻り値

QUANTITY - このブロック内のトランザクションの数(整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xa" // 10
8}
コピー

eth_getUncleCountByBlockHash

指定されたブロックハッシュに一致するブロックのアンクルの数を返します。

パラメータ

  1. DATA、32バイト - ブロックハッシュ
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]
コピー

戻り値

QUANTITY - このブロック内のアンクルの数(整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}
コピー

eth_getUncleCountByBlockNumber

指定されたブロック番号に一致するブロック内のアンクルの数を返します。

パラメータ

  1. QUANTITY|TAG - ブロックの番号(整数)、または文字列"latest"、"earliest" 、"pending"のいずれか。デフォルトのブロックパラメータを参照してください
1params: [
2 "0xe8", // 232
3]
コピー

戻り値

QUANTITY - このブロック内のアンクルの数(整数)

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}
コピー

eth_getCode

指定されたアドレスのコードを返します。

パラメータ

  1. DATA、20バイト - アドレス
  2. QUANTITY|TAG - ブロック番号 (整数)、もしくは文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
1params: [
2 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
3 "0x2", // 2
4]
コピー

戻り値

DATA - 指定されたアドレスからのコード

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"
8}
コピー

eth_sign

この署名メソッドは、イーサリアム固有の署名を次のように計算します。sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))

メッセージに接頭辞を追加することで、計算された署名がイーサリアム固有の署名として認識されるようになります。 これにより、悪意のあるdappによって任意のデータ(トランザクションなど)が署名され、被害者のなりすましに悪用される被害を防ぐことができます。

注: 署名するアドレスのロックを解除する必要があります。

パラメータ

  1. DATA、20バイト - アドレス
  2. DATA、Nバイト - 署名するメッセージ

戻り値

DATA: 署名

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
8}
コピー

eth_signTransaction

eth_sendRawTransactionを使用して、ネットワークに後から送信可能なトランザクションに署名します。

パラメータ

  1. 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// Request
2curl -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// Result
4{
5 "id": 1,
6 "jsonrpc": "2.0",
7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"
8}
コピー

eth_sendTransaction

データフィールドにコードが含まれている場合は、新しいメッセージコールトランザクションまたはコントラクト作成を行います。また、fromで指定されたアカウントを使ってデータフィールドに署名します。

パラメータ

  1. 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", // 30400
6 gasPrice: "0x9184e72a000", // 10000000000000
7 value: "0x9184e72a", // 2441406250
8 input:
9 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
10 },
11]
すべて表示
コピー

戻り値

DATA、32バイト - トランザクションのハッシュ、またはトランザクションがまだ使用可能でない場合はゼロハッシュ

コントラクトのアドレスを取得するには、コントラクトを作成したトランザクションがマイニングされた後にeth_getTransactionReceiptを使用します。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
8}
コピー

eth_sendRawTransaction

署名されたトランザクションについて、新規メッセージ呼び出しのトランザクションの作成、またはコントラクトの作成を行います。

パラメータ

  1. DATA - 署名されたトランザクションのデータ
1params: [
2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
3]
コピー

戻り値

DATA、32バイト - トランザクションのハッシュ、またはトランザクションがまだ使用可能でない場合はゼロハッシュ

コントラクトのアドレスを取得するには、コントラクトを作成したトランザクションがマイニングされた後にeth_getTransactionReceiptを使用します。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
8}
コピー

eth_call

ブロックチェーン上にトランザクションを作成せずに、即座に新規メッセージ呼び出しを実行できます。 読み取り専用のスマートコントラクト関数を実行するために頻繁に使われます(例えば、ERC-20 コントラクトのbalanceOfなど)。

パラメータ

  1. Object - トランザクションの呼び出しオブジェクト
  • from: DATA、20バイト - (オプション)トランザクションの送信元アドレス
  • to: DATA、20バイト - トランザクションの宛先アドレス
  • gas: QUANTITY - (オプション)トランザクションを実行するために提供されているガス(整数) 。 eth_callはガスを消費しませんが、一部の実行ではこのパラメータが必要になる場合があります。
  • gasPrice: QUANTITY - (オプション)ガスの支払いに適用されるガス価格(整数)
  • value: QUANTITY - (オプション)このトランザクションで送信された値(整数)
  • input: DATA - (オプション)メソッド署名とエンコードされたパラメータのハッシュ。 詳細については、SolidityのドキュメントのイーサリアムコントラクトABI(opens in a new tab)を参照してください。
  1. QUANTITY|TAG - ブロック番号 (整数)、もしくは文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください

戻り値

DATA - 実行されたコントラクトの戻り値

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x"
8}
コピー

eth_estimateGas

トランザクションの完了に必要なガスの推定値を計算して返します。 このトランザクションはブロックチェーンに追加されません。 推定値は、EVMの仕組みやノードのパフォーマンスなどのさまざまな理由により、トランザクションによって実際に使われるガス量を大幅に上回る可能性があることに注意してください。

パラメータ

eth_callパラメータを参照してください。ただし、すべてのプロパティはオプションです。 ガスリミットが指定されていない場合、Gethでは保留中のブロックのガスリミットが上限値として使用されます。 その結果、保留中のブロックのガスリミットよりガス量が多い場合には、返される推定値の量では、呼び出し/トランザクションを実行するには十分でないことがあります。

戻り値

QUANTITY - ガス使用量

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x5208" // 21000
8}
コピー

eth_getBlockByHash

ハッシュを使用して、ブロックに関する情報を返します。

パラメータ

  1. DATA、32バイト - ブロックのハッシュ
  2. 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バイト - ブロックのアンクルデータのSHA3
  • logsBloom: 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// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'
3// Result
4{
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

ブロック番号を使用して、ブロックに関する情報を返します。

パラメータ

  1. QUANTITY|TAG - ブロックの番号(整数)、または文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
  2. Boolean - trueの場合は、完全なトランザクションオブジェクトを返します。 falseの場合は、トランザクションのハッシュのみを返します
1params: [
2 "0x1b4", // 436
3 true,
4]
コピー

戻り値については、eth_getBlockByHashを参照してください。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'
コピー

結果については、eth_getBlockByHashを参照してください。

eth_getTransactionByHash

トランザクションハッシュを使用して、リクエストされたトランザクションに関する情報を返します。

パラメータ

  1. 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のリカバリID
  • r: QUANTITY - ECDSA署名r
  • s: QUANTITY - ECDSA署名s

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'
3// Result
4{
5 "jsonrpc":"2.0",
6 "id":1,
7 "result":{
8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",
9 "blockNumber":"0x5daf3b", // 6139707
10 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",
11 "gas":"0xc350", // 50000
12 "gasPrice":"0x4a817c800", // 20000000000
13 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",
14 "input":"0x68656c6c6f21",
15 "nonce":"0x15", // 21
16 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",
17 "transactionIndex":"0x41", // 65
18 "value":"0xf3dbb76162000", // 4290000000000000
19 "v":"0x25", // 37
20 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",
21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"
22 }
23}
すべて表示
コピー

eth_getTransactionByBlockHashAndIndex

ブロックのハッシュとトランザクションのインデックスの位置を使用して、トランザクションに関する情報を返します。

パラメータ

  1. DATA、32バイト - ブロックのハッシュ
  2. QUANTITY - トランザクションのインデックスの位置(整数)
1params: [
2 "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
3 "0x0", // 0
4]
コピー

戻り値については、eth_getTransactionByHashを参照してください。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'
コピー

結果については、eth_getTransactionByHashを参照してください。

eth_getTransactionByBlockNumberAndIndex

ブロック番号とトランザクションのインデックスの位置を使用して、トランザクションに関する情報を返します。

パラメータ

  1. QUANTITY|TAG - ブロックの番号、または文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
  2. QUANTITY - トランザクションのインデックスの位置
1params: [
2 "0x29c", // 668
3 "0x0", // 0
4]
コピー

戻り値については、eth_getTransactionByHashを参照してください。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'
コピー

結果については、eth_getTransactionByHashを参照してください。

eth_getTransactionReceipt

トランザクションのハッシュを使用して、トランザクションのレシートを返します。

: 保留中のトランザクションでは、レシートは取得できません。

パラメータ

  1. DATA、32バイト - トランザクションのハッシュ
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]
コピー

戻り値 Object - トランザクションレシートのオブジェクト、またはレシートが見つからなかった場合はnull

  • transactionHash: DATA、32バイト - トランザクションのハッシュ
  • transactionIndex: QUANTITY - ブロック内のトランザクションのインデックスの位置(整数)。
  • blockHash: DATA、32バイト - このトランザクションが組み込まれていたブロックのハッシュ。
  • blockNumber: QUANTITY - このトランザクションが組み込まれていたブロックの番号
  • from: DATA、20バイト - 送信者のアドレス
  • to: DATA、20バイト - 受信者のアドレス。 コントラクト作成時のトランザクションはnull
  • cumulativeGasUsed: 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// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'
3// Result
4{
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 created
12 "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 filter
20 "status": "0x1",
21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
22 "transactionHash":
23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",
24 "transactionIndex": "0x66",
25 "type": "0x2"
26 }
27}
すべて表示
コピー

eth_getUncleByBlockHashAndIndex

ハッシュとアンクルインデックスの位置を使用して、ブロックのアンクルに関する情報を返します。

パラメータ

  1. DATA、32バイト - ブロックのハッシュ
  2. QUANTITY - アンクルのインデックスの位置
1params: [
2 "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",
3 "0x0", // 0
4]
コピー

戻り値については、eth_getBlockByHashを参照してください。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'
コピー

結果については、eth_getBlockByHashを参照してください。

: アンクルには、個々のトランザクションは含まれていません。

eth_getUncleByBlockNumberAndIndex

ブロック番号とアンクルのインデックスの位置を使用して、ブロックのアンクルに関する情報を返します。

パラメータ

  1. QUANTITY|TAG - ブロックの番号、または文字列"latest""earliest""pending"のいずれか。デフォルトのブロックパラメータを参照してください
  2. QUANTITY - アンクルのインデックスの位置
1params: [
2 "0x29c", // 668
3 "0x0", // 0
4]
コピー

戻り値については、eth_getBlockByHashを参照してください。

: アンクルには、個々のトランザクションは含まれていません。

1// Request
2curl -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)(その後の位置については条件なし) 」
  • パラメータ
  1. Object - フィルターオプション
  • fromBlock: QUANTITY|TAG - (オプション、デフォルトは"latest")ブロック番号(整数)、または"latest"(最後にマイニングされたブロック)、"pending""earliest"(まだマイニングされていないトランザクション)のいずれか
  • toBlock: QUANTITY|TAG - (オプション、デフォルト: "latest")ブロック番号(整数) 。 "latest"(最後にマイニングされたブロック)。"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// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}
コピー

eth_newBlockFilter

新しいブロックの到着を通知するために、ノードにフィルターを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。

パラメータ なし

戻り値 QUANTITY - フィルターID

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}
コピー

eth_newPendingTransactionFilter

新しい保留中のトランザクションの到着を通知するために、ノードにフィルターを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。

パラメータ なし

戻り値 QUANTITY - フィルターID

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x1" // 1
8}
コピー

eth_uninstallFilter

指定されたIDを使用して、フィルターをアンインストールします。 ウォッチが不要になったら、必ず呼び出す必要があります。 また、フィルターは一定期間、eth_getFilterChangesを使用してリクエストされなければタイムアウトします。

パラメータ

  1. QUANTITY - フィルターID
1params: [
2 "0xb", // 11
3]
コピー

戻り値 Boolean - フィルターのアンインストールに成功した場合はtrue、その他の場合はfalse

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": true
8}
コピー

eth_getFilterChanges

フィルターのポーリングメソッド。最後のポーリング以降に発生したログの配列を返します。

パラメータ

  1. QUANTITY - フィルターID
1params: [
2 "0x16", // 22
3]
コピー

戻り値 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// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'
3// Result
4{
5 "id":1,
6 "jsonrpc":"2.0",
7 "result": [{
8 "logIndex": "0x1", // 1
9 "blockNumber":"0x1b4", // 436
10 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
12 "transactionIndex": "0x0", // 0
13 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",
15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
16 },{
17 ...
18 }]
19}
すべて表示
コピー

eth_getFilterLogs

指定されたIDのフィルターに一致する、すべてのログの配列を返します。

パラメータ

  1. QUANTITY - フィルターID
1params: [
2 "0x16", // 22
3]
コピー

戻り値については、 eth_getFilterChangesを参照してください。

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'
コピー

結果については、eth_getFilterChangesを参照してください。

eth_getLogs

指定されたフィルターオブジェクトに一致する、すべてのログの配列を返します。

パラメータ

  1. Object - フィルターオプション
  • fromBlock: QUANTITY|TAG - (オプション、デフォルトは"latest")ブロック番号(整数)、または"latest"(最後にマイニングされたブロック)、"pending""earliest"(まだマイニングされていないトランザクション)のいずれか
  • toBlock: QUANTITY|TAG - (オプション、デフォルト: "latest")ブロック番号(整数) 。 "latest"(最後にマイニングされたブロック)。"pending""earliest"(まだマイニングされていないトランザクション)のいずれか
  • address: DATA|Array、20バイト - (オプション)ログの生成元となるコントラクトアドレス、またはアドレスのリスト
  • topics: Array of DATA、- (オプション)32バイトのDATAトピックの配列。 トピックは順序に依存します。 各トピックは「or」オプションのDATA配列にすることも可能
  • blockhash: DATA、32バイト - (オプション、実装予定) EIP-234が追加されたことにより、blockHashが新たなフィルターオプションになります。これは、返されるログを32バイトのハッシュblockHashを持つ単一のブロックに制限します。 blockHashを使用することは、fromBlocktoBlockblockHashのハッシュのブロック番号を指定することと同等です。 blockHashがフィルター条件にある場合、fromBlocktoBlockは使用できません。
1params: [
2 {
3 topics: [
4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
5 ],
6 },
7]
コピー

戻り値については、 eth_getFilterChangesを参照してください。

1// Request
2curl -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_getTransactionReceiptRPCメソッドで取得できます。

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にはいくつかの引数、具体的にはfromtodataが必要です。 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: 0
16 }],
17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",
18 transactionIndex: 0
19}
すべて表示

レシートには、ログが含まれています。 このログは、EVMによってトランザクションの実行時に生成され、レシートに含まれます。 multiply関数によって、Printイベントが入力の7倍で発生したことが示されています。 Printイベントの引数はuint256であるため、ABIルールに従ってデコードできます。これにより、期待される10進数である42が得られます。 このデータのほかに、トピックを使用することでどのイベントによってログが作成されたかを把握することもできます。

1web3.sha3("Print(uint256)")
2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"

ここまで、最も一般的なタスクをいくつか簡単に紹介し、JSON-RPCを直接使用するための方法を実例を交えて説明しました。

この記事は役に立ちましたか?