Casper 1.X -> Casper 2.0 :: JSON-RPC APIへの変更
はじめに
ここでは、Casper 2.0 (AKA Condor) JSON RPC を使用している開発者(dApp開発者、SDK開発者、その他JSON-RPC APIを適用している開発者)を対象としています。JSON-RPCを検証し、v1.5.6とv2.0.0の違いを説明します。
ネットワークを開始して以来、CasperノードはJSONを使用したHTTP上のAPIを公開しており、これはJSON-RPCとして知られています。このAPIにより、dAppsやSDKなどのクライアントソフトウェアはノードと通信し、相互作用することができ、ノードの状態、チェーンの状態、残高の詳細、その他の情報をクエリ(照会)したり、トランザクションを送信してチェーンへの情報の書き込みも行えるようになっています。
v2.0対応のための変更
Casper Sidecar
Condorのアップグレードにおける大きな変更点の一つは、新しいcasper-sidecarです。sidecar(サイドカー)は専用のプロセスで実行され、ノードのバイナリポートおよび/またはSSEポートにバウンド(跳ねかえ)されます。サイドカーは、JSON-RPC サーバーを実行し、JSON-RPC エンドポイントをインターネットに公開するすべての責任を負います。即ち、ノードソフトウェア自身は、JSON-RPC APIをコンシューマに公開していません。このジョブを今はsidecarが担っています。
sidecarは専用のプロセスで実行されるため、ノードとは別のマシンでsidecarを実行することも可能です。ただ、実際には、殆どのノードオペレータは、ノードと同じマシン上でsidecarを運用することになるでしょう。更には、オペレータのデプロイ設定は、SDKを介してJSON-RPC APIと対話するDAppにとっては不透明となります。
JSON-RPC API をsidecarに移行することには、いくつかの利点があります:
- JSON-RPC API は、ノードから独立して進化することができます。
- ノードオペレータは、運用設定をより細かく制御できるようになります。
- sidecarは、ノード自身が行わなければならない作業量を削減するため、代替ノード実装(mojo、go、zig、c++など)のデプロイをシンプルします。
ノードバイナリポート
Casper 2.0 Node は現在、純粋なバイナリポート API を公開しており、TCP/IP 経由での接続と、リモートプロシージャコールのための純粋なバイナリシリアライズを可能にしています。ユースケースによっては、Casper Condor との対話の為にこのオプションを検討する余地はあるかもしれません。一般的に、バイナリポートは JSON RPC よりも優れたパフォーマンスと機能を提供します。バイナリポートの詳細については、後々ドキュメントに追記されます。すべてのSDKは、新しいバイナリポートAPIをサポートするように更新されることになりそうです。
JSON-RPCの変更点
RPCにおける明確な最大の変更点は、deployからtransactionに名前が変更になったことです。Casper 1.Xでは、ブロックチェーンに記録された一連の処理に”deploy”という名前が使われていましたが、Condorでは”Transaction”に変更されました。
JSON-RPC スキーマの定義
Casper 1.5 node JSON-RPCは、ここを参照ください。
Casper 2.0 node JSON-RPCは、ここを参照ください。
v1.5 & v2.0 JSON-RPC API の違い
| Function in v1.5 | Function in v2.0 | Remarks |
| account_put_deploy | account_put_transaction | Renamed |
| chain_get_block_transfers | chain_get_block_transfers | 変更なし |
| chain_get_block | chain_get_block | Now returns Block with Signatures |
| chain_get_era_info_by_switch_block | chain_get_era_info_by_switch_block | 変更なし |
| chain_get_era_summary | chain_get_era_summary | 変更なし |
| chain_get_state_root_hash | chain_get_state_root_hash | 変更なし |
| info_get_chainspec | info_get_chainspec | 変更なし |
| info_get_deploy | info_get_transaction | Renamed |
| info_get_peers | info_get_peers | 変更なし |
| info_get_status | info_get_status | 結果に書かれている最新の block hash |
| info_get_validator_changes | info_get_validator_changes | 変更なし |
| query_balance | query_balance | 変更なし |
| query_balance_details | Added | |
| query_global_state | query_global_state | 変更なし |
| state_get_account_info | state_get_account_info | 変更なし |
| state_get_auction_info | state_get_auction_info | 変更なし |
| state_get_balance | state_get_balance | 残高がアクティブな保留分に反映 |
| state_get_dictionary_item | state_get_dictionary_item | 変更なし |
| state_get_item | state_get_entity | Renamed |
Summary
v1.5.6 と v2.0.0 間のJSON-RPCの主な違いは、以下となります。
- 現在、casper-sidecarがJSON-RPC APIの提供を担っています。
- sidecarは、Server Side Events APIも公開しており、Casper Event Standard (CES)を採用している開発者には関係してきます。
- 業界用語に則り、Deploy(デプロイ)は、現在はTransaction(トランザクション)に変更となりました。 データ構造の表示が変更となっています。