コントラクトとセッションコード

セッションコードとは?

セッションコードとは、Casperネットワーク上で実行可能な最もシンプルなロジックです。チェーン上に格納されたコントラクトのロジックをトリガーとして頻繁に使用されるため、必須となっています。セッションコードにはcall関数であるエントリーポイントが1つ必要となっており、セッションコードを実行するアカウントのコンテキスト内にて実行されます。結果的に、アカウントのメインパースへのアクセス権を保持している、という具合にアカウントのパーミッションの範囲で実行されます。例えば、セッションコードによるアカウントのメインパースからのトークン転送などがあげられます。

セッションコードの使用方法としてベストな状態は、ステートレス(stateless)実行を呼び出す状況下でトラックされるべき内部データがない、もしくは極僅かな場合です。セッションコードは、Wasmの境界を跨いで返された値の通信や受諾時に必要となります。

セッションとコントラクトコードの比較


下記表には、Casperネットワーク上のセッションコードとコントラクトコードの主な違いについての概要が書かれています。

セッションコードコントラクトコード
セッションコードは常にセッションコードを持つデプロイに署名をしたアカウントのコンテキスト内にて実行されます。チェーン上のロジックに格納されたスマートコントラクトは、そのコントラクトのコンテキスト内にて実行されます。
セッションコードは、セッションコードとの通信に使用される call エントリーポイント1つのみを保持しています。スマートコントラクトは、呼び出し可能ないくつかのエントリーポイントを持つことが可能です。
Callエントリーポイントは、セッションコードがとる如何なるアクションも初期化します。コントラクト下にて取られる如何なるアクションも、外部コール(通常はセッションコード)を介して初期化されなくてはなりません。
セッションコードのbody内にてput_keyの呼び出しが行われた場合、鍵はアカウントの名前付き鍵に追加されます。スマートコントラクトのコンテキスト内にてput_keyの呼び出しが行われた場合、コントラクトの履歴が修正され、新しいnamed_keyエントリーを持つようになります。
セッションコードの書き方については、「セッションコードの書き方」を参照ください。コントラクトの書き方については、「基本的なスマートコントラクトをRustで書く方法」を参照ください。

下記は、上記表の比較について図で表したものです。

What’s Next?