🔧

XRPLでスマコンの操作の種類

2023/06/12に公開

XRPレジャーとは

XRPレジャーはBitcoinやEthereumなどと同じ分散型のパブリックブロックチェーンです。ビットコインの初期コントリビュータを含む3人の開発者により2012年に開発され、PoWやPoSとは異なる独自のコンセンサスアルゴリズムが用いられています。

XRPレジャーではトランザクションはプロトコルネイティブであり、開発者が個別にNFTやDEXなどを機能を構築することなく、利用することができます。

Hooks

XRPLを使ったプロダクトの開発者はNFTやDEXなどで用意された多くのパラメータなどを利用することができますが、独自のロジックを実装することは出来ませんでした。

2021年に開発が発表されたXRPレジャーにスマートコントラクト機能を実装するHooksでは、開発者が独自のロジックを実装することが可能となります。

https://hooks.xrpl.org

各コントラクトをHookと呼び、その中ではトランザクションを拒否したり、別のトランザクションを送信したり、またはStateを使った状態の管理を行うことが可能です。

Hooksは2023年6月にセキュリティ監査に合格しており、今後Hooks用のサイドチェーンのリリースが予定されています。

利用可能な言語

HooksはWebAssembly(WASM)バイナリであるため、多くの言語で利用することが可能です。

執筆時点ではC言語でフル機能を利用することが可能であり、AssemblyScript(Type Scriptのようなもの)でのライブラリ開発が進められています。

WASMであるため理論的にはRustやGoなどのさまざまな言語で開発が可能です。

SetHookの操作の種類

SetHookトランザクションの実行時には次の6種類の操作のいずれかを行います。

  • No Operation
  • Create
  • Install
  • Update
  • Delete
  • Namespace Delete

https://xrpl-hooks.readme.io/docs/sethook-transaction#hookset-operations

No Operation

この処理自体は文字通り何も行いません。しかし、SetHook時に任意の処理を行うロジックを実行するようなHookを呼び出す際に使用することが可能です。
つまり、直接的には何の処理も行いませんが、間接的に何らかの処理を実行する可能性があります。

Create

この処理では、XRPLネットワークにまだ存在しない新規のHookをアカウントへ設定します。デプロイ時は作成するHookのデータサイズに応じた手数料の支払いが必要となります。
必要となる手数料は1バイトあたり10,000drops(0.010000XRP)です。

この処理によりネットワーク上にHookDefinitionオブジェクトが作成され、それ以降完全に同一のHookコードをアカウントへデプロイする場合はこのオブジェクトが参照されることになり、データサイズに応じた手数料の支払いは不要となります。
つまりデータサイズに応じた手数料の支払いはHookDefinitionオブジェクトの作成のために必要となる手数料といえます。

HookDefinitionオブジェクトはレジャー全体で共有されるオブジェクトであるため、アカウントの準備金は増加しません。

ただし、アカウントに紐づくHookオブジェクトは作成されるため、これに対する準備金は必要となります。

Install

この処理では既にXRPLネットワークに存在するHookをアカウントへ設定します。Create処理とは異なり、Hookのデータサイズに応じた手数料の支払いは必要ありません。
この仕組みにより他アカウントが利用している有用なHookはほぼ無料で利用可能になります。

ただし、Createと同様にアカウントに紐づくHookオブジェクトに対する準備金が必要となります。

Update

この処理ではHookNamespaceHookParametersHookGrantsなどの更新を行うことができます。

HoosNamespaceはアカウントに設定されたHooksが同一のStateにアクセスするための名前空間、HookParametersはHookのコンパイル時またはアップロード時ではなくアカウントへの設定時に指定可能なkey-value、HookGrantsはアカウントの状態管理権限を持つ外部アカウントのリストです。

Delete

この処理ではアカウントに設定されたHook(Hookオブジェクト)を削除します。
削除した結果、そのHook(HookDefinitionオブジェクト)を参照しているアカウント数が0になった場合、HookDefinitionオブジェクトもレジャーから削除されます。

自身が新規作成(Create)したHookを削除した場合でも、HookDefinitionオブジェクトは削除されるとは限りません。逆に自分自身が新規作成していない(Install)したHookを削除した場合に、HookDefinitionオブジェクトが削除される可能性もあります。

Namespace Delete

この処理では指定したnamespaceに紐付くHookStateオブジェクトを全て削除します。namespaceに紐付くHookStateオブジェクトが存在する場合は何も行いません。

まとめ

今回の記事はHooksのに関する操作の説明を行いました。Hooks機能では様々な形でHookの操作を行うことが可能で、その中でも特にInstall処理はHookのデプロイコスト無料でHookをアカウントに設定することができ、非常に注目すべき機能となっています。

JavaScriptで利用可能なHooksも開発が進められており、Hooksの開発はますます活発になっていくことでしょう。

興味を持たれた方はXRPL開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
https://xrpldevs.org

Discussion