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.5Function in v2.0Remarks
account_put_deployaccount_put_transactionRenamed
chain_get_block_transferschain_get_block_transfers変更なし
chain_get_blockchain_get_blockNow returns Block with Signatures
chain_get_era_info_by_switch_blockchain_get_era_info_by_switch_block変更なし
chain_get_era_summarychain_get_era_summary変更なし
chain_get_state_root_hashchain_get_state_root_hash変更なし
info_get_chainspecinfo_get_chainspec変更なし
info_get_deployinfo_get_transactionRenamed
info_get_peersinfo_get_peers変更なし
info_get_statusinfo_get_status結果に書かれている最新の block hash
info_get_validator_changesinfo_get_validator_changes変更なし
query_balancequery_balance変更なし
query_balance_detailsAdded
query_global_statequery_global_state変更なし
state_get_account_infostate_get_account_info変更なし
state_get_auction_infostate_get_auction_info変更なし
state_get_balancestate_get_balance残高がアクティブな保留分に反映
state_get_dictionary_itemstate_get_dictionary_item変更なし
state_get_itemstate_get_entityRenamed

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(トランザクション)に変更となりました。 データ構造の表示が変更となっています。