メインコンテンツまでスキップ

Moveモジュール入門

このチュートリアルでは、どの様にコンパイル、テスト、公開し、Aptosブロックチェーン上でMove モジュールと交信するのか詳しく解説します。手順を要約すると、

  1. Aptos CLI 用のプリコンパイルされたバイナリをインストールします。
  2. Aptosブロックチェーン上にアカウントを作成し、資金を投入します。
  3. Moveモジュールをコンパイルしてテストします。
  4. AptosブロックチェーンにMoveモジュールを公開します。
  5. Move モジュールと対話します。

ステップ 1: CLIをインストールする。

Aptos CLI用のプリコンパイルされたバイナリをインストールする.


ステップ 2: アカウントを作成し資金を投入する。

CLI バイナリをインストールした後、Aptos ブロックチェーン上にアカウントを作成し、資金を投入します。

新しいターミナルを起動し、次のコマンドを実行して新しいローカル アカウントを初期化します。

aptos init

ネットワークの選択を求める出力が表示されます。

Choose network from [devnet, testnet, mainnet, local, custom | defaults to devnet]

Returnを押してデフォルトのdevnetネットワークを受け入れるか、選択したネットワークを指定します。

No network given, using devnet...

デフォルトを受け入れて新しいキーを作成するか、既存のキーを入力し、秘密カギを確認してプロンプトへ応答します。

秘密鍵に関して応答します。デフォルトでは新しく鍵が作られますが、既存の鍵を入力しても良いです。

Enter your private key as a hex literal (0x...) [Current: None | No input: Generate new key (or keep one if present)]

新規作成を選択した場合、次のように表示されます。

No key given, generating key...
Account a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a doesn't exist, creating it and funding it with 100000000 Octas
Account a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a funded successfully

---
Aptos CLI is now set up for account a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a as profile default! Run `aptos --help` for more information about commands
{
"Result": "Success"
}

上記のアカウント アドレスa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5aは新しいアカウントであり、 profiledefaultとしてエイリアスが付けられています。このアカウント アドレスはランダムに生成される物で、お客様の物とは異なります。今後このドキュメントではdefaultまたは0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5aのいずれかを同じ意味で使用します。必要に応じて自分のアドレスに置き換えてください。

次のコマンドを実行して、このアカウントに資金を投入します。

aptos account fund-with-faucet --account default

次のような出力が表示されます。

{
"Result": "Added 100000000 Octas to account a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a"
}

ステップ 3: コンパイルしてモジュールをテストする

Move モジュールのサンプルがaptos-core/aptos-move/move-examplesディレクトリに用意されており、使用できます。ターミナルを開き、以下の通り hello_blockchainディレクトリへ移動します。

cd aptos-core/aptos-move/move-examples/hello_blockchain

以下のコマンドを実行してhello_blockchainモジュールをコンパイルします。

aptos move compile --named-addresses hello_blockchain=default

次のような出力が表示されます。

{
"Result": [
"a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a::message"
]
}

compileコマンドには上記の--named-addresses を含める必要があります。Move.tomlファイルではこれが未定義のままになっているため必要。(下記を参照)

モジュールをテストするには、次のコマンドを実行します。

aptos move test --named-addresses hello_blockchain=default

そして、次のような出力を受け取ります。

INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING Examples
Running Move unit tests
[ PASS ] 0x1a42874787568af30c785622899a27dacce066d671fa487e7fb958d6d0c85077::message::sender_can_set_message
[ PASS ] 0x1a42874787568af30c785622899a27dacce066d671fa487e7fb958d6d0c85077::message_tests::sender_can_set_message
Test result: OK. Total tests: 2; passed: 2; failed: 0
{
"Result": "Success"
}

前のステップで作成したアカウント用のモジュールを準備するには、defaultプロファイル エイリアスを使用して、名前付きアドレスhello_blockchainがアカウント アドレスに設定されるように指定します。

[addresses]
hello_blockchain = "_"

ステップ 4: Moveモジュールを公開する

コードをコンパイルしテストした後、次のコマンドを使用して、このチュートリアル用に作成したアカウントにモジュールを公開できます。

aptos move publish --named-addresses hello_blockchain=default

次のような出力が表示されます。

package size 1631 bytes
{
"Result": {
"transaction_hash": "0x45d682997beab297a9a39237c588d31da1cd2c950c5ab498e37984e367b0fc25",
"gas_used": 13,
"gas_unit_price": 1,
"pending": null,
"sender": "a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a",
"sequence_number": 8,
"success": true,
"timestamp_us": 1661320216343795,
"version": 3977,
"vm_status": "Executed successfully"
}
}

この時点で、モジュールは Aptos ブロックチェーンのアカウントに保存されます。


ステップ 5: Moveモジュールと対話する

Move モジュールは、エントリー関数として知られるアクセス ポイントを公開します。これらのエントリ関数はトランザクション経由で呼び出すことができます。Aptos CLI を使用すると、これらのエントリ機能にシームレスにアクセスできます。Move モジュールのサンプルhello_blockchainstringを取り込むset_messageエントリー関数を公開します。これは CLI 経由で呼び出すことができます。

aptos move run \
--function-id 'default::message::set_message' \
--args 'string:hello, blockchain'

成功すると、CLI は次の内容を出力します。

{
"Result": {
"transaction_hash": "0x1fe06f61c49777086497b199f3d4acbee9ea58976d37fdc06d1ea48a511a9e82",
"gas_used": 1,
"gas_unit_price": 1,
"pending": null,
"sender": "a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a",
"sequence_number": 1,
"success": true,
"timestamp_us": 1661320878825763,
"version": 5936,
"vm_status": "Executed successfully"
}
}

このset_message関数はhello_blockchainMessageHolderリソースを変更します。個々のリソースはグローバル ストレージに保存されるデータ構造です。リソースは、下記の REST API をクエリすることで読み取ることができます。


https://api.devnet.aptoslabs.com/v1/accounts/a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a/resource/0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a::message::MessageHolder

最初の実行後、以下が含まれるはずです。

{
"type": "0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a::message::MessageHolder",
"data": {
"message": "hello, blockchain",
"message_change_events": {
"counter": "0",
"guid": {
"id": {
"addr": "0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a",
"creation_num": "3"
}
}
}
}
}

messageフィールドにhello, blockchainが含まれていることに注意してください。

最初の呼び出しの後set_messageの呼び出しが成功するたび、message_change_eventsが更新されます。特定のアカウントのmessage_change_eventsには、REST API 経由でアクセスできます。

https://api.devnet.aptoslabs.com/v1/accounts/0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a/events/0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a::message::MessageHolder/message_change_events

ここで、メッセージをhello, blockchain, againに設定するための呼び出しをすると、イベント ストリームには次の内容が含まれています。

[
{
"version": "8556",
"key": "0x0300000000000000a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a",
"sequence_number": "0",
"type": "0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a::message::MessageChangeEvent",
"data": {
"from_message": "hello, blockchain",
"to_message": "hello, blockchain, again"
}
}
]
ヒント

この例とまったく同じ関数を呼び出すことで、他のアカウントが、公開されたモジュールを再利用できます。読者の演習としてこの関数は残されています。

サポート資料