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

JSON-RPC API

最終更新: 2026年2月23日

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

この目的のために、すべてのEthereumクライアント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デベロッパーの作業が多くの場合に簡単になるオプションもあります。 JSON-RPC API上にラッパーを提供する、多くのJavaScriptライブラリやバックエンドAPIライブラリが存在します。 これらのライブラリを使用することで、デベロッパーは任意のプログラミング言語による直感的な1行のメソッドを作成するだけで、イーサリアムとやり取りするJSON-RPCリクエストを(内部的に)初期化できるようになります。

コンセンサスクライアントAPI

このページでは、主にイーサリアムの実行クライアントで使用されるJSON-RPC APIについて説明します。 しかし、コンセンサスクライアントには、ユーザーがノードについての情報のクエリを行えるRPC APIが用意されており、ビーコンブロック、ビーコンの状態、その他のコンセンサス関連の情報を直接ノードにリクエストできます。 このAPIはBeacon APIウェブページ (opens in a new tab)に文書化されています。

内部APIは、ノード内のクライアント間通信にも使用されます。 つまり、コンセンサスクライアントと実行クライアントとの間のデータ交換を可能にします。 これは「エンジンAPI」と呼ばれ、仕様はGitHub (opens in a new tab)で入手できます。

実行クライアント仕様

GitHubでJSON-RPC APIの全仕様を読む (opens in a new tab)。 このAPIは、Execution 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でなければなりません)

ブロックパラメータ

以下のメソッドにはブロックパラメータがあります:

Ethereumの状態を照会するリクエストが行われる際、指定されたブロックパラメータがブロックの高さを決定します。

ブロックパラメータには、以下のオプションが使用できます:

  • 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)を使用してEthereumノードにリクエストを行うことで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メソッドはEthereumネットワークからのデータを必要とし、_ゴシップ、状態、履歴_の3つの主要なカテゴリにきれいに分類されます。 各メソッドは、セクションにあるリンクからジャンプするか、目次でメソッドの全リストを調べることで見つけられます。

ゴシップメソッド

チェーンの先頭までたどるメソッドです。 これにより、トランザクションがどのようにネットワークを進み、ブロックへたどり着くのか、また、クライアントがどのようにして新しいブロックについての情報を得るのかがわかります。

状態メソッド

このメソッドは、すべての保存データの現在の状態を報告します。 「状態」は、RAM内の1つの大きな共有部分です。アカウントの残高、コントラクトデータ、ガスの推定値が含まれています。

履歴メソッド

このメソッドは、各ブロックの履歴レコードを始まりのブロックまでさかのぼって取得します。 これは、1つの大きな追加専用ファイルのようなもので、すべてのブロックヘッダー、ブロックボディ、アンクルブロック、トランザクションレシートが含まれます。

JSON-RPC APIプレイグラウンド

プレイグラウンドツール (opens in a new tab)を使用して、APIメソッドを発見し、試すことができます。 プレイグラウンドツールでは、さまざまなノードプロバイダーによってサポートされているメソッドとネットワークも表示されます。

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

指定されたデータのKeccak-256 (標準化されたSHA3-256では_ない_)を返します。

パラメータ

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

戻り値

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

1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'
3// 結果
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: Ethereumメインネット
  • 11155111: Sepoliaテストネット
  • 560048 : Hoodiテストネット

1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'
3// 結果
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "3"
8}

net_listening

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

パラメータ

なし

戻り値

Boolean - リッスンしている場合はtrue、それ以外はfalse

1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'
3// 結果
4{
5 "id":67,
6 "jsonrpc":"2.0",
7 "result":true
8}

net_peerCount

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

パラメータ

なし

戻り値

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

1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'
3// 結果
4{
5 "id":74,
6 "jsonrpc": "2.0",
7 "result": "0x2" // 2
8}

eth_protocolVersion

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

パラメータ

なし

戻り値

String - 現在のEthereumプロトコルバージョン

1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'
3// 結果
4{
5 "id":67,
6 "jsonrpc": "2.0",
7 "result": "54"
8}

eth_syncing

同期ステータスに関するデータを含むオブジェクト、またはfalseを返します。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

クライアント実装によって、厳密にはリターンデータが異なります。 すべてのクライアントは、ノードが同期していない場合に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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

注: このメソッドはv1.14.0で廃止され、サポートされなくなりました。 このメソッドを使用しようとすると、「メソッドはサポートされていません」というエラーが発生します。

パラメータ

なし

戻り値

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を返します。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

chainId、現在のチェーンIDの整数を表す16進値の文字列。

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を返し、マージ以降、一部のクライアントでは利用できない場合があります。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

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を返し、マージ以降、一部のクライアントでは利用できない場合があります。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

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ブロックを検査し、ガスのユニット価格における中央値を返します。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

Array of 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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

なし

戻り値

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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. DATA、20バイト - 残高を確認するアドレス。
  2. QUANTITY|TAG - 整数のブロック番号、または文字列"latest""earliest""pending""safe"、または"finalized"。詳細はブロックパラメータを参照
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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. DATA、20バイト - ストレージのアドレス。
  2. QUANTITY - ストレージ内の位置の整数。
  3. QUANTITY|TAG - 整数のブロック番号、または文字列"latest""earliest""pending""safe""finalized"。詳細はブロックパラメータを参照

戻り値

DATA - このストレージ位置の値。

正しい位置の計算は、取得するストレージによって異なります。 アドレス0x391694e7e0b0cce554cb130d723a9d27458f9298によって、0x295a70b2de5e3953354a6a8344e616ed314d7251にデプロイされた以下のコントラクトについて考えてみましょう。

1contract Storage {
2 uint pos0;
3 mapping(address => uint) pos1;
4 constructor() {
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"}

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

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"
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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. DATA、20バイト - アドレス。
  2. QUANTITY|TAG - 整数のブロック番号、または文字列"latest""earliest""pending""safe"または"finalized"。詳細はブロックパラメータを参照
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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. DATA、32バイト - ブロックのハッシュ
1params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"]

戻り値

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

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x8b" // 139
8}

eth_getBlockTransactionCountByNumber

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. QUANTITY|TAG - ブロック番号の整数、または文字列"earliest""latest""pending""safe"または"finalized"ブロックパラメータを参照。
1params: [
2 "0x13738ca", // 20396234
3]

戻り値

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

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x8b" // 139
8}

eth_getUncleCountByBlockHash

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. DATA、32バイト - ブロックのハッシュ
1params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"]

戻り値

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

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

eth_getUncleCountByBlockNumber

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. QUANTITY|TAG - 整数のブロック番号、または文字列"latest""earliest""pending""safe""finalized"。詳細はブロックパラメータを参照
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": "0x0" // 0
8}

eth_getCode

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. DATA、20バイト - アドレス
  2. QUANTITY|TAG - 整数のブロック番号、または文字列"latest""earliest""pending""safe"または"finalized"。詳細はブロックパラメータを参照
1params: [
2 "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
3 "0x5daf3b", // 6139707
4]

戻り値

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

1// Request
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}'
3// Result
4{
5 "id":1,
6 "jsonrpc": "2.0",
7 "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029"
8}

eth_sign

署名メソッドは、sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))で、Ethereum固有の署名を計算します。

メッセージに接頭辞を追加することで、計算された署名がイーサリアム固有の署名として認識されるようになります。 これにより、悪意のある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 - (オプション、デフォルト: 未確定)支払われるガスごとに使用されるgasPriceの整数(Wei単位)。
  • value: QUANTITY - (オプション)このトランザクションで送信される値の整数(Wei単位)。
  • data: DATA - コントラクトのコンパイル済みコード、または呼び出されたメソッド署名のハッシュとエンコードされたパラメータ。
  • nonce: QUANTITY - (オプション)ノンスの整数。 同じノンス(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 - (オプション、デフォルト: 未確定)ガスの支払いに適用されるgasPriceの整数。
  • value: QUANTITY - (オプション)このトランザクションで送信された値の整数。
  • input: DATA - コントラクトのコンパイル済みコード、または呼び出されたメソッド署名のハッシュとエンコードされたパラメータ。
  • nonce: QUANTITY - (オプション)ノンスの整数。 同じノンス(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など、読み取り専用のスマートコントラクト関数を実行するためによく使用されます。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

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

戻り値

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の仕組みやノードのパフォーマンスなどのさまざまな理由により、トランザクションによって実際に使われるガス量を大幅に上回る可能性があることに注意してください。

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  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、プルーフオブステークのブロックの場合は0x0 (マージ以降)
  • 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// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'
3// 結果
4{
5 "jsonrpc": "2.0",
6 "id": 1,
7 "result": {
8 "difficulty": "0x4ea3f27bc",
9 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",
10 "gasLimit": "0x1388",
11 "gasUsed": "0x0",
12 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",
13 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
14 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",
15 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",
16 "nonce": "0x689056015818adbe",
17 "number": "0x1b4",
18 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",
19 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
20 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
21 "size": "0x220",
22 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",
23 "timestamp": "0x55ba467c",
24 "totalDifficulty": "0x78ed983323d",
25 "transactions": [
26 ],
27 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
28 "uncles": [
29 ]
30 }
31}
すべて表示

eth_getBlockByNumber

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. QUANTITY|TAG - ブロック番号の整数、または文字列"earliest""latest""pending""safe"または"finalized"ブロックパラメータを参照。
  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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

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

戻り値 eth_getTransactionByHashを参照

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

結果はeth_getTransactionByHashを参照

eth_getTransactionByBlockNumberAndIndex

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. QUANTITY|TAG - ブロック番号、または文字列"earliest""latest""pending""safe"または"finalized"ブロックパラメータを参照。
  2. QUANTITY - トランザクションのインデックス位置。
1params: [
2 "0x9c47cf", // 10241999
3 "0x24", // 36
4]

戻り値 eth_getTransactionByHashを参照

1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"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

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

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

戻り値 eth_getBlockByHashを参照

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

結果はeth_getBlockByHashを参照

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

eth_getUncleByBlockNumberAndIndex

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

プレイグラウンドでエンドポイントを試す (opens in a new tab)

パラメータ

  1. QUANTITY|TAG - ブロック番号、または文字列"earliest""latest""pending""safe""finalized"ブロックパラメータを参照。
  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"、最新の安全なブロックを表す"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// 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 - 可変長のインデックスなしログデータ。 (_Solidity_の場合: 0個以上の32バイトのインデックスなしログ引数。)
    • topics: Array of DATA - 0から4つの32バイトDATAからなる、インデックス付けされたログ引数の配列。 (_Solidity_の場合: 最初のトピックは、イベントの署名の_ハッシュ_です(例: Deposit(address,bytes32,uint256))。ただし、anonymous指定子でイベントを宣言した場合を除きます。)
1// リクエスト
2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'
3// 結果
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"、最新の安全なブロックを表す"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が存在する場合、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インターフェースのみを使用してコントラクトをデプロイする方法について、実例を交えて説明します。 この複雑さが抽象化されている、コントラクトをデプロイするための代替ルートがあります。例えば、web3.js (opens in a new tab)web3.py (opens in a new tab)など、RPCインターフェース上に構築されたライブラリを使用する方法です。 通常、抽象化すると簡単に理解できるようになり、エラーも起こりにくくなります。それでも、内部の仕組みを知っておくことで、理解を深めることができます。

以下は、Multiply7という単純なスマートコントラクトで、JSON-RPCインターフェースを使用してEthereumノードにデプロイされます。 このチュートリアルは、読者がすでに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)を使用して、コインベースアドレス(アカウントの配列から最初のアドレスを取得)と残高を取得することで、インターフェースが実行中であることを確認できます。 例で示されているデータは、ローカルノードによって異なりますのでご注意ください。 これらのコマンドを試す場合は、2番目のcurlリクエストのrequestパラメータの値を、1番目のcurlリクエストから返されたresultパラメータに置き換えてください。

curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "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)に従ってください。 (この例で使用されているコンパイラのバージョンに合わせるために、古いsolcリリース(v0.4.20 (opens in a new tab)など)を使用することをお勧めします。)

次のステップは、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で、正のXの場合はゼロバイトでパディングされます。

これは0000000000000000000000000000000000000000000000000000000000000006にエンコードされます。

関数セレクタとエンコードされた引数を組み合わせると、データは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を直接使用するための方法を実例を交えて説明しました。

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