JSON-RPC API
最終編集者: , Invalid DateTime
ソフトウェアアプリケーションがイーサリアムブロックチェーンとやり取りする (ブロックチェーンデータの読み取りまたはネットワークへのトランザクションの送信) ためには、イーサリアムノードに接続する必要があります。
この目的のために、すべてのイーサリアムクライアントは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:85452
ゴシップ、状態、履歴
少数のコア JSON-RPC メソッドは、イーサリアムネットワークからのデータを必要とします。該当メソッドは、ゴシップ、状態、履歴という、3 つの主要カテゴリーに明確に分類できます。 各メソッドは、セクションにあるリンクからジャンプするか、目次でメソッドの全リストを調べることで見つけられます。
ゴシップメソッド
チェーンの先頭までたどるメソッドです。 これにより、トランザクションがどのようにネットワークを進み、ブロックへたどり着くのか、また、クライアントがどのようにして新しいブロックについての情報を得るのかがわかります。
状態メソッド
このメソッドは、すべての保存データの現在の状態を報告します。 「状態」は、RAM 内の 1 つの大きな共有部分です。アカウントの残高、コントラクトデータ、ガスの推定値が含まれています。
履歴メソッド
このメソッドは、各ブロックの履歴レコードを始まりのブロックまでさかのぼって取得します。 これは、1 つの大きな追加専用ファイルのようなもので、すべてのブロックヘッダー、ブロックボディ、アンクルブロック、トランザクションレシートが含まれます。
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
JSON-RPC API メソッド
web3_clientVersion
現在のクライアントバージョンを返します。
パラメータ
なし
戻り値
String
- 現在のクライアントのバージョン
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result": "Mist/v0.9.3/darwin/go1.4.1"8}9コピー
web3_sha3
指定されたデータの Keccak-256 (標準の SHA3-256 ではない) を返します。
パラメータ
DATA
- SHA3 ハッシュに変換するデータ
1params: ["0x68656c6c6f20776f726c64"]2コピー
戻り値
DATA
- 指定された文字列の SHA3 結果
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad"8}9コピー
net_version
現在のネットワーク ID を返します。
パラメータ
なし
戻り値
String
- 現在のネットワーク ID
現在のネットワーク ID の全リストは、chainlist.org(opens in a new tab)で入手できます。 一般的なネットワーク ID は、以下のとおりです。 1
: イーサリアムメインネット 2
: Morden テストネット (廃止) 3
: Ropsten テストネット 4
: Rinkeby テストネット 5
: Goerli テストネット
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "3"8}9コピー
net_listening
クライアントのネットワーク接続のリッスンがアクティブな場合に、true
を返します。
パラメータ
なし
戻り値
Boolean
- リッスンしている場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc":"2.0",7 "result":true8}9コピー
net_peerCount
クライアントに現在接続されているピアの数を返します。
パラメータ
なし
戻り値
QUANTITY
- 接続されているピア数 (整数) 。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}'3// Result4{5 "id":74,6 "jsonrpc": "2.0",7 "result": "0x2" // 28}9コピ ー
eth_protocolVersion
現在のイーサリアムプロトコルのバージョンを返します。 このメソッドは、Geth では利用できないこと(opens in a new tab)に注意してください。
パラメータ
なし
戻り値
String
- 現在のイーサリアムプロトコルのバージョン
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "54"8}9コピー
eth_syncing
同期ステータスに関するデータを含むオブジェクトか、false
を返します。
パラメータ
なし
戻り値
Object|Boolean
- 同期ステータスデータを含むオブジェクト、または同期していない場合はFALSE
startingBlock
:QUANTITY
- インポートを開始したブロック (同期がブロックの先頭に達したときのみリセットされる)currentBlock
:QUANTITY
- 現在のブロック。eth_blockNumber と同一highestBlock
:QUANTITY
- 最大ブロック高の推定値
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 startingBlock: '0x384',9 currentBlock: '0x386',10 highestBlock: '0x454'11 }12}13// Or when not syncing14{15 "id":1,16 "jsonrpc": "2.0",17 "result": false18}19すべて表示コピー
eth_coinbase
クライアントのコインベースアドレスを返します。
パラメータ
なし
戻り値
DATA
、20 バイト - 現在のコインベースアドレス。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}'3// Result4{5 "id":64,6 "jsonrpc": "2.0",7 "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1"8}9コピー
eth_mining
クライアントの新規ブロックのマイニングがアクティブな場合に、true
を返します。
パラメータ
なし
戻り値
Boolean
- クライアントがマイニングしている場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}'3//4{5 "id":71,6 "jsonrpc": "2.0",7 "result": true8}9コピー
eth_hashrate
ノードがマイニングしている 1 秒あたりのハッシュの数を返します。
パラメータ
なし
戻り値
QUANTITY
- 1 秒あたりのハッシュの数
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}'3// Result4{5 "id":71,6 "jsonrpc": "2.0",7 "result": "0x38a"8}9コピー
eth_gasPrice
現在のガス価格を wei で返します。
パラメータ
なし
戻り値
QUANTITY
- 現在のガス価格 (wei 単位の整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}'3// Result4{5 "id":73,6 "jsonrpc": "2.0",7 "result": "0x1dfd14000" // 8049999872 Wei8}9コピー
eth_accounts
クライアントが所有するアドレスのリストを返します。
パラメータ
なし
戻り値
DATA配列
、20 バイト - クライアントが所有するアドレス
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"]8}9コピー
eth_blockNumber
最も新しいブロックの番号を返します。
パラメータ
なし
戻り値
QUANTITY
- クライアントの現在のブロックの番号 (整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}'3// Result4{5 "id":83,6 "jsonrpc": "2.0",7 "result": "0x4b7" // 12078}9コピー
eth_getBalance
指定されたアドレスのアカウントの残高を返します。
パラメータ
DATA
、20 バイト - 残高を確認するアドレスQUANTITY|TAG
- ブロック番号 (整数)、もしくは文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]2コピー
戻り値
QUANTITY
- 現在の残高 (wei 単位の整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x0234c8a3397aab58" // 1589724902343750008}9コピー
eth_getStorageAt
指定されたアドレスのストレージの位置の値を返します。
パラメータ
DATA
、20 バイト - ストレージのアドレスQUANTITY
- ストレージの位置 (整数)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}9
pos0 の値の取得は簡単です。
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"}3コピー
しかし、マップ (map) の要素の取得は、より難しくなります。 マップ (map) の要素の位置は、次のように計算されます。
1keccack(LeftPad32(key, 0), LeftPad32(map position, 0))2コピー
つまり、pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"]のストレージを取得するためには、次のように位置を計算する必要があります。
1keccak(2 decodeHex(3 "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" +4 "0000000000000000000000000000000000000000000000000000000000000001"5 )6)7コピー
これは、web3 ライブラリに付属する Geth コンソールを使用して、次のように計算できます。
1> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001"2undefined3> web3.sha3(key, {"encoding": "hex"})4"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9"5コピー
これにより、以下のようにしてストレージを取得できます。
1curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:85452{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"}3コピー
eth_getTransactionCount
アドレスから送信されたトランザクションの数を返します。
パラメータ
DATA
、20 バイト - アドレスQUANTITY|TAG
- ブロック番号 (整数)、もしくは文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0x407d73d8a49eeb85d32cf465507dd71d507100c1",3 "latest", // state at the latest block4]5コピー
戻り値
QUANTITY
- このアドレスから送信されたトランザクションの数 (整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}9コピー
eth_getBlockTransactionCountByHash
指定されたブロックハッシュに一致するブロック内のトランザクションの数を返します。
パラメータ
DATA
、32 バイト - ブロックハッシュ
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]2コピー
戻り値
QUANTITY
- このブロック内のトランザクションの数 (整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xb" // 118}9コピー
eth_getBlockTransactionCountByNumber
指定されたブロック番号に一致するブロックのトランザクションの数を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0xe8", // 2323]4コピー
戻り値
QUANTITY
- このブロック内のトランザクションの数 (整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa" // 108}9コピー
eth_getUncleCountByBlockHash
指定されたブロックハッシュに一致するブロックのアンクルの数を返します。
パラメータ
DATA
、32 バイト - ブロックハッシュ
1params: ["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"]2コピー
戻り値
QUANTITY
- このブロック内のアンクルの数(整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}9コピー
eth_getUncleCountByBlockNumber
指定されたブロック番号に一致するブロック内のアンクルの数を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"、"earliest" 、"pending"のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0xe8", // 2323]4コピー
戻り値
QUANTITY
- このブロック内のアンクルの数 (整数)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}9コピー
eth_getCode
指定されたアドレスのコードを返します。
パラメータ
DATA
、20 バイト - アドレスQUANTITY|TAG
- ブロック番号 (整数)、もしくは文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してください
1params: [2 "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",3 "0x2", // 24]5コピー
戻り値
DATA
- 指定されたアドレスからのコード
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x2"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"8}9コピー
eth_sign
この署名メソッドは、イーサリアム固有の署名を次のように計算します。sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))
。
メッセージに接頭辞を追加することで、計算された署名がイーサリアム固有の署名として認識可能になります。 これにより、悪意のある dapp によって任意のデータ (トランザクションなど) が署名され、被害者のなりすましに悪用される被害を防ぐことができます。
注: 署名するアドレスのロックを解除する必要があります。
パラメータ
DATA
、20 バイト - アドレスDATA
、N バイト - 署名するメッセージ
戻り値
データ
: 署名
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}9コピー
eth_signTransaction
eth_sendRawTransactionを使用して、ネットワーク に後から送信可能なトランザクションに署名します。
パラメータ
Object
- トランザクションオブジェクト
from
:DATA
、20 バイト - トランザクションの送信元アドレスto
:DATA
、20 バイト - トランザクションの宛先アドレス (新規コントラクトの作成時はオプション)gas
:QUANTITY
- (オプション、デフォルトは 90000) トランザクションの実行のために提供されているガス (整数)。 使われなかったガスは返却されますgasPrice
:QUANTITY
- (オプション、デフォルトは未確定) ガスごとに支払われるガス価格 (wei 単位の整数)value
:QUANTITY
- (オプション) このトランザクションで送信された価値 (wei 単位の整数)data
:DATA
- コンパイルされたコントラクトのコード。または呼び出されたメソッドの署名とエンコードされたパラメータのハッシュnonce
:QUANTITY
- (オプション) ノンス (nonce) (整数)。 同じノンス (nonce) を使用している保留中のトランザクションを上書きできます
戻り値
DATA
- 署名されたトランザクションオブジェクト
例
1// Request2curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}'3// Result4{5 "id": 1,6 "jsonrpc": "2.0",7 "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"8}9コピー
eth_sendTransaction
新規のメッセージ呼び出しトランザクションを作成します。または、データフィールドにコードが含まれている場合は、コントラクトの作成を行います。
パラメータ
Object
- トランザクションオブジェクト
from
:DATA
、20 バイト - トランザクションの送信元アドレスto
:DATA
、20 バイト - (新規コントラクトの作成時はオプション)トランザクションの宛先アドレスgas
:QUANTITY
- (オプション、デフォルトは 90000) トランザクションを実行するために提供されているガス (整数) 。 使用されなかったガスは返却されますgasPrice
:QUANTITY
- (オプシ ョン、デフォルトは未確定) ガスの支払いに適用されたガス価格 (整数)value
:QUANTITY
- (オプション) このトランザクションで送信された価値 (整数)data
:DATA
- コンパイルされたコントラクトのコード。または呼び出されたメソッドの署名とエンコードされたパラメータのハッシュnonce
:QUANTITY
- (オプション) ノンス (nonce) (整数)。 同じノンス (nonce) を使用している保留中のトランザクションを上書きできます
1params: [2 {3 from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155",4 to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567",5 gas: "0x76c0", // 304006 gasPrice: "0x9184e72a000", // 100000000000007 value: "0x9184e72a", // 24414062508 data: "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",9 },10]11すべて表示コピー
戻り値
DATA
、32 バイト - トランザクションのハッシュ、またはトランザクションがまだ使用可能でない場合はゼロハッシュ
コントラクトのアドレスを取得するには、コントラクトを作成したトランザクションがマイニングされた後にeth_getTransactionReceiptを使用します。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}9コピー
eth_sendRawTransaction
署名されたトランザクションについて、新規メッセージ呼び出しのトランザクションの作成、またはコントラクトの作成を行います。
パラメータ
DATA
- 署名されたトランザクションのデータ
1params: [2 "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",3]4コピー
戻り値
DATA
、32 バイト - トランザクションのハッシュ、またはトランザクションがまだ使用可能でない場合はゼロハッシュ
コントラクトのアドレスを取得するには、コントラクトを作成したトランザクションがマイニングされた後にeth_getTransactionReceiptを使用します。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"8}9コピー
eth_call
ブロックチェーン上にトランザクションを作成することなく、即時に新規メッセージ呼び出しを実行します。
パラメータ
Object
- トランザクションの呼び出しオブジェクト
from
:DATA
、20 バイト - トランザクションの送信元アドレスto
:DATA
、20 バイト - トランザクションの宛先アドレスgas
:QUANTITY
- (オプション) トランザクションを実行するために提供されているガス (整数) 。 eth_call はガスを消費しませんが、このパラメータは、一部の実行では必要になる場合がありますgasPrice
:QUANTITY
- (オプション) ガスの支払いに適用されるガス価格 (整数)value
:QUANTITY
- (オプション) このトランザクションで送信された価値 (整数)data
:DATA
- (オプション) メソッド署名とエンコードされたパラメータのハッシュ。 詳細については、Solidity のドキュメントのイーサリアムコントラクト ABI(opens in a new tab)を参照してください
QUANTITY|TAG
- ブロック番号 (整数)、もしくは文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してください
戻り値
DATA
- 実行されたコントラクトの戻り値
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x"8}9コピー
eth_estimateGas
トランザクションの完了に必要なガスの推定値を計算して返します。 このトランザクションはブロックチェーンに加えられません。 推定値は、EVM の仕組みやノードのパフォーマンスなどのさまざまな理由により、トランザクションによって実際に使われる実際のガス量を大幅に上回る可能性があることに注意してください。
パラメータ
eth_callパラメータを参照してください。ただし、すべてのプロパティはオプションです。 ガスリミットが指定されていない場合、Geth では保留中のブロックのガスリミットが上限値として使用されます。 その結果、保留中のブロックのガスリミットよりガス量が多い場合には、返される推定値の量では、呼び出し/トランザクションを実行するには十分でないことがあります。
戻り値
QUANTITY
- ガス使用量
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x5208" // 210008}9コピー
eth_getBlockByHash
ハッシュを使用して、ブロックに関する情報を返します。
パラメータ
DATA
、32 バイト - ブロックのハッシュBoolean
-true
の場合は、完全なトランザクションオブジェクトを返します。false
の場合は、トランザクションのハッシュのみを返します
1params: [2 "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",3 false,4]5コピー
戻り値
Object
- ブロックオブジェクト、またはブロックが見つからなかった場合はnull
number
:QUANTITY
- ブロック番号。 保留中のブロックの場合はnull
hash
:DATA
、32 バイト - ブロックのハッシュ。 保留中のブロックの場合はnull
parentHash
:DATA
、32 バイト - 親ブロックのハッシュnonce
:DATA
、8 バイト - 生成されたプルーフ・オブ・ワークのハッシュ。 保留中のブロックの場合はnull
sha3Uncles
:DATA
、32 バイト - ブロックのアンクルデータの SHA3logsBloom
:DATA
、256 バイト - ブロックのログのブルームフィルタ。 保留中のブロックの場合はnull
transactionsRoot
:DATA
、32 バイト - ブロックのトランザクションツリーのルートstateRoot
:DATA
、32 バイト - ブロックの最終状態ツリーのルートreceiptsRoot
:DATA
、32 バイト - ブロックのレシートツリーのルートminer
:DATA
、20 バイト - マイニング報酬が支払われる受益者のアドレスdifficulty
:QUANTITY
- このブロックの難易度 (整数)totalDifficulty
:QUANTITY
-このブロックまでのチェーンの合計難易度 (整数)extraData
:DATA
- このブロックの「extra data」フィールドsize
:QUANTITY
- このブロックのサイズのバイト数 (整数)gasLimit
:QUANTITY
- このブロックで許可されているガスの最大量gasUsed
:QUANTITY
- このブロックのすべてのトランザクションで使用されたガスの合計量timestamp
:QUANTITY
- ブロックが照合されたときの UNIX タイムスタンプtransactions
:Array
- 最後に指定したパラメータに応じて、トランザクションオブジェクトの配列、または 32 バイトのトランザクションハッシュuncles
:Array
- アンクルハッシュの配列
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}'3// Result4{5{6"jsonrpc": "2.0",7"id": 1,8"result": {9 "difficulty": "0x4ea3f27bc",10 "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",11 "gasLimit": "0x1388",12 "gasUsed": "0x0",13 "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae",14 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",15 "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171",16 "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843",17 "nonce": "0x689056015818adbe",18 "number": "0x1b4",19 "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54",20 "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",21 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",22 "size": "0x220",23 "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d",24 "timestamp": "0x55ba467c",25 "totalDifficulty": "0x78ed983323d",26 "transactions": [27 ],28 "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",29 "uncles": [30 ]31}32}33すべて表示コピー
eth_getBlockByNumber
ブロック番号を使用して、ブロックに関する情報を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号(整数)、または文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してくださいBoolean
-true
の場合は、完全なトランザクションオブジェクトを返します。false
の場合は、トランザクションのハッシュのみを返します
1params: [2 "0x1b4", // 4363 true,4]5コピー
戻り値については、eth_getBlockByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}'3コピー
結果については、eth_getBlockByHashを参照してください。
eth_getTransactionByHash
トランザクションハッシュを使用して、リクエストされたトランザクションに関する情報を返します。
パラメータ
DATA
、32 バイト - トランザクションのハッシュ
1params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"]2コピー
戻り値
Object
- トランザクションオブジェクト、またはトランザクションが見つからなかった場合はnull
blockHash
:DATA
、32 バイト - このトランザクションが組み込まれていたブロックのハッシュ。 保留中の場合はnull
blockNumber
:QUANTITY
- このトランザクションが組み込まれていたブロックの番号。 保留中の場合はnull
from
:DATA
、20 バイト - 送信者のアドレスgas
:QUANTITY
- 送信者が提供するガスgasPrice
:QUANTITY
- 送信者が指定したガス価 格 (wei 単位)hash
:DATA
、32 バイト - トランザクションのハッシュinput
:DATA
- トランザクションと共に送信されるデータnonce
:QUANTITY
- 送信者がこのトランザクションより前に送信したトランザクションの数to
:DATA
、20 バイト - 受信者のアドレス。 コントラクト作成時のトランザクションはnull
transactionIndex
:QUANTITY
- ブロック内のトランザクションのインデックスの位置 (整数)。 保留中の場合はnull
value
:QUANTITY
- 送金された価値 (wei 単位)v
:QUANTITY
- ECDSA のリカバリ IDr
:QUANTITY
- ECDSA 署名 rs
:QUANTITY
- ECDSA 署名 s
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}'3// Result4{5 "jsonrpc":"2.0",6 "id":1,7 "result":{8 "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2",9 "blockNumber":"0x5daf3b", // 613970710 "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d",11 "gas":"0xc350", // 5000012 "gasPrice":"0x4a817c800", // 2000000000013 "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b",14 "input":"0x68656c6c6f21",15 "nonce":"0x15", // 2116 "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb",17 "transactionIndex":"0x41", // 6518 "value":"0xf3dbb76162000", // 429000000000000019 "v":"0x25", // 3720 "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea",21 "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c"22 }23}24すべて表示コピー
eth_getTransactionByBlockHashAndIndex
ブロックのハッシュとトランザクションのインデックスの位置を使用して、トランザクションに関する情報を返します。
パラメータ
DATA
、32 バイト - ブロックのハッシュQUANTITY
- トランザクションのインデックスの位置 (整数)
1params: [2 "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",3 "0x0", // 04]5コピー
戻り値については、eth_getTransactionByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'3コピー
結果については、eth_getTransactionByHashを参照してください。
eth_getTransactionByBlockNumberAndIndex
ブロック番号とトランザクションのインデックスの位置を使用して、トランザクションに関する情報を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号、または文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してくださいQUANTITY
- トランザクションのインデックスの位置
1params: [2 "0x29c", // 6683 "0x0", // 04]5コピー
戻り値については、eth_getTransactionByHashを参照してください
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'3コピー
結果については、eth_getTransactionByHashを参照してください
eth_getTransactionReceipt
トランザクションのハッシュを使用して、トランザクションのレシートを返します。
注 : 保留中のトランザクションでは、レシートは得られません。
パラメータ
DATA
、32 バイト - トランザクションのハッシュ
1params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"]2コピー
戻り値 Object
- トランザクションレシートのオブジェクト、またはレシートが見つからなかった場合はnull
transactionHash
:DATA
、32 バイト - トランザクションのハッシュtransactionIndex
:QUANTITY
- ブロック内のトランザクションインデックスの位置 (整数)blockHash
:DATA
、32 バイト - このトランザクションが組み込まれていたブロックのハッシュblockNumber
:QUANTITY
- このトランザクションが組み込まれていたブロックの番号from
:DATA
、20 バイト - 送信者のアドレスto
:DATA
、20 バイト - 受信者のアドレス。 コントラク ト作成時のトランザクションは nullcumulativeGasUsed
:QUANTITY
- ブロック内でこのトランザクションの実行時に使用されたガスの総量effectiveGasPrice
:QUANTITY
- ガスユニットごとに支払われるベースフィーとチップの合計gasUsed
:QUANTITY
- この特定のトランザクションのみで使用されたガスの量contractAddress
:DATA
、20 バイト - コントラクト作成のトランザクションの場合は作成されたコントラクトのアドレス、その他の場合はnull
logs
:Array
- このトランザクションが生成したログオブジェクトの配列logsBloom
:DATA
、256 バイト - 関連ログを迅速に取得するためのライトクライアント用のブルームフィルター。type
:DATA
- トランザクションタイプの整数、0x00
でレガシートランザクション、0x01
でアクセスリストタイプ,0x02
で動的フィー。 また、以下のいずれかも返しますroot
:DATA
、32 バイト - トランザクション後の状態ルート(ビザンチウム以前)status
:QUANTITY
-1
(成功)、または0
(失敗)
例
1// リクエスト2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}'3// 結果4{5 "jsonrpc": "2.0",6 "id": 1,7 "result": {8 "blockHash":9 "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3",10 "blockNumber": "0xeff35f",11 "contractAddress": null, // 作成された場合はアドレスの文字列12 "cumulativeGasUsed": "0xa12515",13 "effectiveGasPrice": "0x5a9c688d4",14 "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7",15 "gasUsed": "0xb4c8",16 "logs": [{17 // getFilterLogsなどによって返されるログ18 }],19 "logsBloom": "0x00...0", // 256 byte bloom filter20 "status": "0x1",21 "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",22 "transactionHash":23 "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5",24 "transactionIndex": "0x66",25 "type": "0x2"26 }27}28すべて表示コピー
eth_getUncleByBlockHashAndIndex
ハッシュとアンクルインデックスの位置を使用して、ブロックのアンクルに関する情報を返します。
パラメータ
DATA
、32 バイト - ブロックのハッシュQUANTITY
- アンクルインデックスの位置
1params: [2 "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b",3 "0x0", // 04]5コピー
戻り値については、eth_getBlockByHashを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x0"],"id":1}'3コピー
結果については、eth_getBlockByHashを参照してください。
注: アンクルには、個々のトランザクションは含まれていません。
eth_getUncleByBlockNumberAndIndex
ブロック番号とアンクルのインデックスの位置を使用して、ブロックのアンクルに関する情報を返します。
パラメータ
QUANTITY|TAG
- ブロックの番号、または文字列"latest"
、"earliest"
、"pending"
のいずれか。デフォルトのブロックパラメータを参照してくださいQUANTITY
- アンクルのインデックスの位置
1params: [2 "0x29c", // 6683 "0x0", // 04]5コピー
戻り値については、eth_getBlockByHashを参照してください。
注: アンクルには、個々のトランザクションは含まれていません。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}'3コピー
結果については、eth_getBlockByHashを参照してください。
eth_getCompilers
クライアントで利用可能なコンパイラのリストを返します。
パラメータ なし
戻り値 Array
- 利用可能なコンパイラの配列
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCompilers","params":[],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": ["solidity", "lll", "serpent"]8}9コピー
eth_compileSolidity
コンパイルされた Solidity コードを返します。
パラメータ
String
- ソースコード
1params: [2 "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }",3]4コピー
戻り値 DATA
- コンパイルされたソースコード
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": {8 "code": "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056",9 "info": {10 "source": "contract test {\n function multiply(uint a) constant returns(uint d) {\n return a * 7;\n }\n}\n",11 "language": "Solidity",12 "languageVersion": "0",13 "compilerVersion": "0.9.19",14 "abiDefinition": [15 {16 "constant": true,17 "inputs": [18 {19 "name": "a",20 "type": "uint256"21 }22 ],23 "name": "multiply",24 "outputs": [25 {26 "name": "d",27 "type": "uint256"28 }29 ],30 "type": "function"31 }32 ],33 "userDoc": {34 "methods": {}35 },36 "developerDoc": {37 "methods": {}38 }39 }40}41すべて表示コピー
eth_compileLLL
コンパイルされた LLL コードを返します。
パラメータ
String
- ソースコード
1params: ["(returnlll (suicide (caller)))"]2コピー
戻り値 DATA
- コンパイルされたソースコード
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileLLL","params":["(returnlll (suicide (caller)))"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code8}9コピー
eth_compileSerpent
コンパイルされた Serpent コードを返します。
パラメータ
String
- ソースコード
1params: ["/* some serpent */"]2コピー
戻り値 DATA
- コンパイルされたソースコード
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_compileSerpent","params":["/* some serpent */"],"id":1}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x603880600c6000396000f3006001600060e060020a600035048063c6888fa114601857005b6021600435602b565b8060005260206000f35b600081600702905091905056" // the compiled source code8}9コピー
eth_newFilter
(ログの) 状態変更を通知するために、フィルターオプションに基づいてフィルターオブジェクトを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。
トピックフィルターを指定する際の注: トピックは順序に依存します。 トピック [A, B] を持つログのトランザクションは、下記のトピックフィルターによってマッチングされます。
[]
「条件なし」[A]
「最初の位置が A (その後の位置については条件なし) 」[null, B]
「最初の位置は条件なし、かつ 2 番目の位置が B (その後の位置については条件なし) 」[A, B]
「最初の位置が A、かつ 2 番目の位置が B (その後の位置については条件なし) 」[[A, B], [A, B]]
「最初の位置が (A または B)、かつ 2 番目の位置が (A または B) (その後の位置については条件なし) 」- パラメータ
Object
- フィルターのオプション
fromBlock
:QUANTITY|TAG
- (オプション、デフォルトは"latest"
) ブロック番号 (整数)、または"latest"
(最後にマイニングされたブロック)、"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]16すべて表示コピー
戻り値 QUANTITY
- フィルター ID
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}9コピー
eth_newBlockFilter
新しいブロックの到着を通知するために、ノードにフィルターを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。
パラメータ なし
戻り値 QUANTITY
- フィルター ID
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}9コピー
eth_newPendingTransactionFilter
新しい保留中のトランザクションの到着を通知するために、ノードにフィルターを作成します。 状態変更を確認するには、eth_getFilterChangesを呼び出します。
パラメータ なし
戻り値 QUANTITY
- フィルター ID
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0x1" // 18}9コピー
eth_uninstallFilter
指定された ID のフィルターをアンインストールします。 ウォッチが不要になったときには、必ず呼び出す必要があります。 また、フィルターは一定の期間、eth_getFilterChangesを使用してリクエストされていないとタイムアウトします。
パラメータ
QUANTITY
- フィルター ID
1params: [2 "0xb", // 113]4コピー
戻り値 Boolean
- フィルターが正常にアンインストールされた場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}9コピー
eth_getFilterChanges
フィルターのポーリングメソッド。最後のポーリング以降に発生したログの配列を返します。
パラメータ
QUANTITY
- フィルター ID
1params: [2 "0x16", // 223]4コピー
戻り値 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
- 1 つ以上の 32 バイトのインデックス付けされていないログの引数を含むtopics
:Array of DATA
- 0 から 4 つの 32 バイトのインデックス付けされたログの引数のDATA
配列 (Solidityの場合: 最初のトピックはイベント (例:Deposit(address,bytes32,uint256)
) の署名のハッシュ。ただし、anonymous
指定子でイベントを宣言した場合を除きます)
- 例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "logIndex": "0x1", // 19 "blockNumber":"0x1b4", // 43610 "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",11 "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",12 "transactionIndex": "0x0", // 013 "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",14 "data":"0x0000000000000000000000000000000000000000000000000000000000000000",15 "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]16 },{17 ...18 }]19}20すべて表示コピー
eth_getFilterLogs
指定された ID のフィルターに一致する、すべてのログの配列を返します。
パラメータ
QUANTITY
- フィルター ID
1params: [2 "0x16", // 223]4コピー
戻り値については、 eth_getFilterChangesを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}'3コピー
結果については、eth_getFilterChangesを参照してください。
eth_getLogs
指定されたフィルターオブジェクトに一致する、すべてのログの配列を返します。
パラメータ
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
を使用することは、fromBlock
とtoBlock
にblockHash
のハッシュのブロック番号を指定することと同等です。blockHash
がフィルター条件にある場合、fromBlock
とtoBlock
は使用できません。
1params: [2 {3 topics: [4 "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b",5 ],6 },7]8コピー
戻り値については、 eth_getFilterChangesを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}'3コピー
結果については、eth_getFilterChangesを参照してください。
eth_getWork
現在のブロックのハッシュ、シードハッシュ、 (「target」の) 境界条件を返します。
パラメータ なし
戻り値 Array
- 次のプロパティを持つ配列
DATA
、32 バイト - 現在のブロックヘッダーの PoW ハッシュDATA
、32 バイト - DAG に使用されるシードハッシュDATA
、32 バイト - 境界条件 (「target」)、2^256/難易度
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [8 "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",9 "0x5EED00000000000000000000000000005EED0000000000000000000000000000",10 "0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000"11 ]12}13すべて表示コピー
eth_submitWork
プルーフ・オブ・ワークの解答の送信に使用されます。
パラメータ
DATA
、8 バイト - 見つかったノンス (nonce) (64 ビット)DATA
、32 バイト - ヘッダーの PoW ハッシュ (256 ビット)DATA
、32 バイト - ミックスダイジェスト (256 ビット)
1params: [2 "0x0000000000000001",3 "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",4 "0xD1FE5700000000000000000000000000D1FE5700000000000000000000000000",5]6コピー
戻り値 Boolean
- 送信された解答が有効な場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitWork", "params":["0x0000000000000001", "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "0xD1GE5700000000000000000000000000D1GE5700000000000000000000000000"],"id":73}'3// Result4{5 "id":73,6 "jsonrpc":"2.0",7 "result": true8}9コピー
eth_submitHashrate
マイニングハッシュレートの送信に使用されます。
パラメータ
Hashrate
、ハッシュレートの 16 進数の文字列表現 (32 バイト)ID
、文字列 - クライアントを識別するランダムな 16 進数の ID (32 バイト)
1params: [2 "0x0000000000000000000000000000000000000000000000000000000000500000",3 "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c",4]5コピー
戻り値 Boolean
- 送信が成功した場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0", "method":"eth_submitHashrate", "params":["0x0000000000000000000000000000000000000000000000000000000000500000", "0x59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c"],"id":73}'3// Result4{5 "id":73,6 "jsonrpc":"2.0",7 "result": true8}9コピー
db_putString (deprecated)
ローカルデータベースに文字列を保存します。
注: この関数は非推奨です。
パラメータ
String
- データベース名String
- キーの名前String
- 保存する文字列
1params: ["testDB", "myKey", "myString"]2コピー
戻り値 Boolean
- 値が保管された場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_putString","params":["testDB","myKey","myString"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}9コピー
db_getString (deprecated)
ローカルデータベースから文字列を返します。 注: この関数は非推奨です。
パラメータ
String
- データベース名String
- キーの名前
1params: ["testDB", "myKey"]2コピー
戻り値 String
- 前回保存した文字列
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_getString","params":["testDB","myKey"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": "myString"8}9コピー
db_putHex (deprecated)
ローカルデータベースにバイナリデータを保存します。 注: この関数は非推奨です。
パラメータ
String
- データベース名String
- キーの名前DATA
- 保存するデータ
1params: ["testDB", "myKey", "0x68656c6c6f20776f726c64"]2コピー
戻り値 Boolean
- 値が保管された場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_putHex","params":["testDB","myKey","0x68656c6c6f20776f726c64"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}9コピー
db_getHex (deprecated)
ローカルデータベースからバイナリデータを返します。 注: この関数は非推奨です。
パラメータ
String
- データベース名String
- キーの名前
1params: ["testDB", "myKey"]2コピー
戻り値 DATA
- 前回保存したデータ
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"db_getHex","params":["testDB","myKey"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": "0x68656c6c6f20776f726c64"8}9コピー
shh_version (deprecated)
現在の Whisper プロトコルのバージョンを返します。
注: この関数は非推奨です。
パラメータ なし
戻り値 String
- 現在の Whisper プロトコルのバージョン
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_version","params":[],"id":67}'3// Result4{5 "id":67,6 "jsonrpc": "2.0",7 "result": "2"8}9コピー
shh_post (deprecated)
Whisper メッセージを送信します。
注: この関数は非推奨です。
パラメータ
Object
- Whisper ポストオブジェクト
from
:DATA
、60 バイト - (オプション) 送信者のアイデンティティto
:DATA
、60 バイト - (オプション) 受信者のアイデンティティ。 このオプションがある場合、Whisper は受信者のみが復号できるようにメッセージを暗号化しますtopics
:Array of DATA
- 受信者がメッセージを識別するための、DATA
配列のトピックpayload
:DATA
- メッセージのペイロードpriority
:QUANTITY
- ... (?) からの rang の優先度 (整数)ttl
:QUANTITY
- 存続期間 (秒単位の整数)
1params: [2 {3 from: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",4 to: "0x3e245533f97284d442460f2998cd41858798ddf04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a0d4d661997d3940272b717b1",5 topics: [6 "0x776869737065722d636861742d636c69656e74",7 "0x4d5a695276454c39425154466b61693532",8 ],9 payload: "0x7b2274797065223a226d6",10 priority: "0x64",11 ttl: "0x64",12 },13]14すべて表示コピー
戻り値 Boolean
- メッセージが送信された場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_post","params":[{"from":"0xc931d93e97ab07fe42d923478ba2465f2..","topics": ["0x68656c6c6f20776f726c64"],"payload":"0x68656c6c6f20776f726c64","ttl":0x64,"priority":0x64}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}9コピー
shh_newIdentity (deprecated)
クライアントに新規の Whisper アイデンティティを作成します。
注: この関数は非推奨です。
パラメータ なし
戻り値 DATA
、60 バイト - 新規アイデンティティのアドレス
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newIdentity","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xc931d93e97ab07fe42d923478ba2465f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca9007d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf"8}9コピー
shh_hasIdentity (deprecated)
指定されたアイデンティティの秘密鍵を、クライアントが保持しているかどうかを確認します。
注: この関数は非推奨です。
パラメータ
DATA
、60 バイト - 確認するアイデンティティのアドレス
1params: [2 "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",3]4コピー
戻り値 Boolean
- クライアントがアイデンティティの秘密鍵を持っている場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_hasIdentity","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}9コピー
shh_newGroup (deprecated)
注: この関数は非推奨です。
パラメータ なし
戻り値 DATA
、60 バイト - 新規グループのアドレス (?)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newGroup","params":[],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": "0xc65f283f440fd6cabea4dd7a2c807108f651b7135d1d6ca90931d93e97ab07fe42d923478ba2407d5b68aa497e4619ac10aa3b27726e1863c1fd9b570d99bbaf"8}9コピー
shh_addToGroup (deprecated)
注: この関数は非推奨です。
パラメータ
DATA
、60 バイト - グループに追加するアイデンティティのアドレス (?)
1params: [2 "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",3]4コピー
戻り値 Boolean
- アイデンティティのグループへの追加が成功した場合はtrue
、その他の場合はfalse
(?)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_addToGroup","params":["0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc": "2.0",7 "result": true8}9コピー
shh_newFilter (deprecated)
クライアントがフィルターオプションに一致する Whisper メッセージを受信したときに、そのことを通知するためのフィルターを作成します。 注: この関数 は非推奨です。
パラメータ
Object
- フィルターオプション
to
:DATA
、60 バイト - (オプション) 受信者のアイデンティティ。 このオプションが存在しているときにクライアントがこのアイデンティティの秘密鍵を保持していると、すべての受信メッセージの復号が試行されますtopics
:Array of DATA
- 受信メッセージのトピックとマッチングするDATA
配列のトピック You can use the following combinations:[A, B] = A && B
[A, [B, C]] = A && (B || C)
[null, A, B] = ANYTHING && A && B
(null
はワイルドカードとして機能)
1params: [2 {3 topics: ["0x12341234bf4b564f"],4 to: "0x04f96a5e25610293e42a73908e93ccc8c4d4dc0edcfa9fa872f50cb214e08ebf61a03e245533f97284d442460f2998cd41858798ddfd4d661997d3940272b717b1",5 },6]7コピー
戻り値 QUANTITY
- 新しく作成されたフィルター
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_newFilter","params":[{"topics": ['0x12341234bf4b564f'],"to": "0x2341234bf4b2341234bf4b564f..."}],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": "0x7" // 78}9コピー
shh_uninstallFilter (deprecated)
指定された ID を使用して、フィルターをアンインストールします。 ウォッチが不要になったときには、必ず呼び出す必要があります。 また、フィルターは一定の期間、shh_getFilterChangesを使用してリクエストされていないとタイムアウトします。 注: この関数は非推奨です。
パラメータ
QUANTITY
- フィルター ID
1params: [2 "0x7", // 73]4コピー
戻り値 Boolean
- フィルターのアンインストールに成功した場合はtrue
、その他の場合はfalse
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_uninstallFilter","params":["0x7"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": true8}9コピー
shh_getFilterChanges (deprecated)
Whisper フィルターのポーリングメソッド。 このメソッドの最後の呼び出し以降の新しいメッセージを返します。 注: shh_getMessagesメソッドを呼び出すと、重複メッセージを受信しないように、このメソッドのバッファーがリセットされます。 注: この関数は非推奨です。
パラメータ
QUANTITY
- フィルター ID
1params: [2 "0x7", // 73]4コピー
戻り値 Array
- 最後のポーリング以降に受信したメッセージの配列
hash
:DATA
、32 バイト (?) - メッセージのハッシュfrom
:DATA
、60 バイト - 送信者が指定されている場合、メッセージの送信者to
:DATA
、60 バイト - 受信者が指定されている場合、メッセージの受信者expiry
:QUANTITY
- このメッセージが期限切れになる時間 (秒単位の整数) (?)ttl
:QUANTITY
- システム内のメッセージの存続時間 (秒単位の整数)sent
:QUANTITY
- メッセージの送信時の UNIX タイムスタンプ (整数)topics
:Array of DATA
- メッセージに含まれるDATA
配列のトピックpayload
:DATA
- メッセージのペイロードworkProved
:QUANTITY
- このメッセージを送信する前に必要となったワーク (整数) (?)
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_getFilterChanges","params":["0x7"],"id":73}'3// Result4{5 "id":1,6 "jsonrpc":"2.0",7 "result": [{8 "hash": "0x33eb2da77bf3527e28f8bf493650b1879b08c4f2a362beae4ba2f71bafcd91f9",9 "from": "0x3ec052fc33..",10 "to": "0x87gdf76g8d7fgdfg...",11 "expiry": "0x54caa50a", // 142256666612 "sent": "0x54ca9ea2", // 142256502613 "ttl": "0x64", // 10014 "topics": ["0x6578616d"],15 "payload": "0x7b2274797065223a226d657373616765222c2263686...",16 "workProved": "0x0"17 }]18}19すべて表示コピー
shh_getMessages (deprecated)
フィルターに一致するメッセージをすべて取得します。 shh_getFilterChanges
とは異なり、すべてのメッセージを返します。
注: この関数は非推奨です。
パラメータ
QUANTITY
- フィルター ID
1params: [2 "0x7", // 73]4コピー
戻り値については、 shh_getFilterChangesを参照してください。
例
1// Request2curl -X POST --data '{"jsonrpc":"2.0","method":"shh_getMessages","params":["0x7"3],"id":73}'4コピー
結果については、shh_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}8
まず、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"3
これでプライベート開発チェーンに Ether が存在するようになったため、コントラクトをデプロイできます。 最初のステップは、Multiply7 コントラクトを EVM に送信できるバイトコードにコンパイルすることです。 Solidity のコンパイラである solc をイ ンストールするには、Solidity ドキュメント(opens in a new tab)を参照してください (この例で使用しているコンパイラのバージョン(opens in a new tab)に適合するように、古いsolc
リリースを使用することをお勧めします)。
次のステップでは、Multiply7 コントラクトを、EVM に送信できるバイトコードにコンパイルします。
echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin======= <stdin>:Multiply7 =======Binary:6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029
これで、コードがコンパイルされました。次に、デプロイに必要なガスの量を特定する必要があります。 RPC インターフェースには、推定値を取得するためのeth_estimateGas
メソッドがあります。
curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":5,"result":"0x1c31e"}
最後に、コントラクトをデプロイします。
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"}
トランザクションがノードによって受け入れられると、トランザクションのハッシュが返されます。 このハッシュはトランザクションの追跡に使用されます。 次のステップは、コントラクトがデプロイされているアドレスを特定することです。 実行された各トランザクションによって、レシートが作成されます。 このレシートには、トランザクションが含まれていたブロックや、EVM によって使用されたガスの量など、トランザクションに関するさまざまな情報が含まれています。 トランザクション でコントラクトが作成 される場合は、コントラクトのアドレスも含まれています。 レシートは、eth_getTransactionReceipt
RPC メソッドで取得できます。
curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}}
これで、コントラクトが0x4d03d617d700cf81935d7f797f4e2ae719648262
に作成されました。 レシートの代わりに null の結果が得られた場合は、トランザクションが まだブロックに含まれていないことを意味します。 しばらく待って、自分のマイナーが実行中になっていることを確認してから再試行してください。
スマートコントラクトとのやりとり
この例では、eth_sendTransaction
を使用して、コントラクトのmultiply
メソッドにトランザクションを送信します。
eth_sendTransaction
にはいくつかの引数、具体的にはfrom
、to
、data
が必要です。 from
は、アカウントのパブリックアドレスで、to
はコントラクトのアドレスです。 引数data
には、どのメソッドがどの引数で呼び出されるのかが定義されたペイロードが含まれています。 ここで、ABI (アプリケーション・バイナリー・インターフェース) (opens in a new tab)を使用します。 ABI は、EVM のためにデータの定義とエンコードの方法を明示した JSON ファイルです。
ペイロードのバイトによって、コントラクトのどのメソッドが呼び出されるかが定義されています。 これは、関数名とその引数の型を 16 進数でエンコードした Keccak ハッシュの最初の 4 バイトです。 multiply 関数は uint256 のエイリアスである uint を受け取ります。 これにより、以下のようになります。
1web3.sha3("multiply(uint256)").substring(0, 10)2// "0xc6888fa1"3
次のステップでは、引数をエンコードします。 uint256 は 1 つのみです。この例では 6 とします。 ABI には、uint256 型のエンコード方法を指定するセクションがあります。
int<M>: enc(X)
は、X のビッグエンディアンの 2 の補数表現でのエンコーディングです。長さが 32 バイトの倍数になるように、X が負の場合は 0xff を使用して、正の場合は 0 >バイトを使用して左詰めされます。
これにより、00000000000000000000000000000000000000000000006
とエンコードされます。
関数セレクターとエンコードされた引数を組み合わせると、データは 0xc6888fa10000000000000000000000000000000000000000000000000000000000000006
になります。
これを、以下のようにノードに送信します。
curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"}
トランザクションが送信されたので、トランザクションハッシュが返されました。 取得したレシートには、以下が含まれています。
1{2 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",3 blockNumber: 268,4 contractAddress: null,5 cumulativeGasUsed: 22631,6 gasUsed: 22631,7 logs: [{8 address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d",9 blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55",10 blockNumber: 268,11 data: "0x000000000000000000000000000000000000000000000000000000000000002a",12 logIndex: 0,13 topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"],14 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",15 transactionIndex: 016 }],17 transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74",18 transactionIndex: 019}20すべて表示
レシートには、ログが含まれています。 このログは、EVM によってトランザクションの実行時に生成され、レシートに含まれます。 multiply
関数によって、Print
イベントが入力の 7 倍で発生したことが示されています。 Print
イベントの引数は uint256 であるため、ABI ルールに従ってデコードできます。これにより、期待される 10 進数である 42 が得られます。 このデータのほかに、トピックを使用することでどのイベントによってログが作成されたかを把握することもできます。
1web3.sha3("Print(uint256)")2// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"3
ここまで、最も一般的ないくつかのタスクを簡単に紹介し、JSON-RPC を直接使用する方法について実例を交えて説明しました。