Waves - RIDE4DApps (RIDE for dApps) をざっくりと確認する

以前より情報公開されていたRIDEのバージョンアップがテストネットにリリースされた。
アクティベーションされるまで少し時間があるので、概要を確認しておきたい。

おさらい

WavesPlatformではRIDEという言語でコントラクト(RIDEスクリプト)を記述する。
RIDEスクリプトはアカウントまたはアセット(トークン)に付与することができ、スクリプトが付与されたものをそれぞれスマートアカウント(SmartAccount)、スマートアセット(SmartAsset)と呼ぶ。
付与されたRIDEスクリプトはトランザクション発行時(直前)に実行され、トランザクション発行の許可/否認が判断される。

RIDE4DApps

RIDE4DAppsはSmartAccountの拡張である。
前述の通り、これまではSmartAccountが何か行動するときにスクリプトが実行された。
RIDE4DAppsでは、上記に加えて、別のアカウントから(新しく追加された)InvokeScriptTransactionによってスクリプトを呼び出すことができる。
この実現のためにRIDEスクリプトの機能が更新された。
新たに加えられたディレクティブ機能によれば、これまでのRIDEスクリプトはEXPRESSION、RIDE4DApps用のスクリプトはCONTRACTということらしい。

RIDE4DAppsの大体の処理の流れ

  1. 適当なアカウントでRIDE4DAppsなスクリプトをSetScriptTransactionする
  2. 1とは別のアカウントからInvokeScriptTransactionする。このトランザクションにはペイメント(≒TransferTransaction)を付与することができる
  3. 実行結果として1のアカウントの状態更新と1のアカウントからのペイメントが行われる

RIDEスクリプトのアップデート

関数(func)が書けるようになった。そして、@Callable(inv)アノテーションの付いた関数のみInvokeScriptTransactionから呼び出せる。
関数引数はInvokeScriptTransactionのパラメータから与えられる。またinv(invは任意の変数名で変更可)から呼び出しアカウントのアドレス およびペイメント情報を取得できる。
@Callableな関数は実行結果としてWriteSet(≒DataTransaction)、TransferSet(≒TransferTransaction)のいずれか、あるいはその両方(ContractResult)を発行しなくてはならない。

一方、これまでの(EXPRESSIONな)RIDEスクリプトは@Verifier(tx)アノテーション(‘tx’は任意の変数名で変更可)の付いた関数として定義されるようになった。

手数料

InvokeScriptTransactionの手数料は、もちろんトランザクションの発行者が支払う。(コントラクトの保持アカウントではない)
その料金はまだ良く分からない。
0.004(RIDEスクリプト実行Fee) + 0.001(DataTransaction/TransferTransactionのFee) * n WAVESくらいかと思ったら、ドキュメントによればどうやら違うらしい。

気になること

InvokeScriptTransactionでも実質Transferできるので、Transfer/MassTransferだけ禁止していてもWAVESやトークンは自由に移動できる。
@Verifierの縛りがなければ、RIDE4DAppsアカウントは、@Callableで更新された状態を自由に変更できるし、InvokeScriptTransactionで入金されたWAVESやトークンを自由に移動できる。
規模が小さければ気にすることもできるけど、複雑になっていったら分からなくなるだろうな。たぶん。
(そういえば買えるけど売れないSmartAssetなんていうのも既にありましたね)

何ができるのか(できるようになるのか)

公式の例示ユースケースにあるけども

  • 同じこともより簡潔に記述できるようになる
  • 特定用途のウォレット
  • DEXでの売買禁止なトークンの安全な販売
  • RIDE4DAppsアドレス = NFTと考えて所有権管理
  • エンドユーザにはWeb APIだけ公開して、間接的にWavesPlatformを使わせる

とか?
やりたいことから出発しないと全く思いつかないね

その他

  • IDEで、スクリプトを書くこと自体はすでに行える
  • 実装例も少しづつ増えている

以上。


See also