🙆

【Aptos/Move】これ知らないと始まらない ~ModuleとかScriptとかResourcesとか~

2024/04/25に公開

はじめに

Aptos盛り上がってますね。触ってみようとチュートリアルやろうと思ったのですが、そもそものAptosチェーンの構造がよく分かってなかったので、まずはそれをtips的にまとめていこうと思います。

Moveとは?

RustベースのWeb3専用言語

  • Rustをラッパーした言語
  • アカウントチェック(tx送信者が特定の条件を満たしているかの検証)が言語レベルでサポート
    • Rustに比べてコード数が少ない
    • セキュリティについても安心できる

Yuseiさんが作成されたこの資料がとてもわかりやすくまとまっているのでおすすめです!
https://www.canva.com/design/DAF_tifX6Uw/q9VL8oMJM4f2MY-hzeAa_A/edit

Moveにおけるデータ管理(Solidityとの違い)

Ethereumなどの開発ではSolidityで書かれたContractベースで、そこにstateとしてAddressごとのbalanceが紐づく形になっていますが、MoveではAddressがベースとなっておりそこにModule(コード)やリソース(値)が紐づく形になっています。下記の図がわかりやすいです。
ここのデータ管理の部分の理解がめちゃくちゃ大切

Solidityのデータ管理


Solidity Blockchain State

Moveのデータ管理


Move Blockchain State

  • Global Storage に Key/Value マップがある
  • その直下に Address 単位ごとにデータ保存領域が確保されている

ModuleとScript

どちらもMoveのProgramですが明確な違いがあります。

Module

struct

Resource(デジタル資産)のパラメータを定義します。例えばcoinだとnameやvalueなど。NFTだとimageやdescriptionなどがあったりしますね。

function

上記のstructを操作するコード。Moduleのstructを操作するには該当のModuleのfunctionで定義された機能でしかstructを操作できない。ただしfunctionはあくまでも定義、ライブラリのようなものでこれが直接実行されるというものではない。

Script

function のみ。
上記の Module に定義された function を呼び出して実行を行うプログラム。これを実行することで、Moduke内の構造体のGlobal Storageの操作を行なっていく。なので Module で定義されたfunctionの実行しか行えないため、この構造がセキュリティを担保する一つの要素となっている。実際のScriptの例が下記です。


Move Script
イメージとしてはこのようになると思います。

  • main 関数として実行プログラムがScriptに記載されている。
  • aptos_framework としてのModuleがすでにGlobal Stateにデプロイされていている
  • そこで呼び出している coin::balanceaptos_account::transfer にbalanceの参照やtransferのステートを変更するコードが記載されている

Resources

それぞれのアカウントアドレス内に保存された、デジタル資産のこと。

White Paoerより
例として、アドレス0x50が保持するデータ値に、0x3::coin::Coinがあります。ここで、0x3はcoinモジュールが格納されているアドレス、coinはモジュール名、そしてCoinはデータタイプの名前を指しています。

おわりに

かなり簡単な部分ではありますが、Aptosがどのような構造なのかチュートリアルをする段階で最低でも分かってないといけないというものをまとめました。

Discussion