XRPLでスマコンの操作の種類
XRPレジャーとは
XRPレジャーはBitcoinやEthereumなどと同じ分散型のパブリックブロックチェーンです。ビットコインの初期コントリビュータを含む3人の開発者により2012年に開発され、PoWやPoSとは異なる独自のコンセンサスアルゴリズムが用いられています。
XRPレジャーではトランザクションはプロトコルネイティブであり、開発者が個別にNFTやDEXなどを機能を構築することなく、利用することができます。
Hooks
XRPLを使ったプロダクトの開発者はNFTやDEXなどで用意された多くのパラメータなどを利用することができますが、独自のロジックを実装することは出来ませんでした。
2021年に開発が発表されたXRPレジャーにスマートコントラクト機能を実装するHooksでは、開発者が独自のロジックを実装することが可能となります。
各コントラクトを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
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
この処理ではHookNamespace
やHookParameters
、HookGrants
などの更新を行うことができます。
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チャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
Discussion