Ваш первый модуль MOVE

В этом руководстве подробно описано, как компилировать, тестировать, публиковать и взаимодействовать с модулями Move на блокчейне Aptos. Шаги таковы:

  1. Установите предварительно скомпилированный двоичный файл для Aptos CLI.

  2. Создайте учетную запись на блокчейне Aptos и пополните ее.

  3. Скомпилировать и протестировать модуль Move.

  4. Опубликовать модуль Move в блокчейне Aptos.

  5. Взаимодействовать с модулем Move.

Шаг 1: Установите CLI

Установите предварительно скомпилированный двоичный файл для Aptos CLI.

Шаг 2: Создайте учетную запись и пополните ее

После установки двоичного CLI следующим шагом будет создание и пополнение учетной записи на блокчейне Aptos.

  1. Запустите новый терминал и выполните приведенную ниже команду для инициализации новой локальной учетной записи:

aptos init

Результат будет аналогичен приведенному ниже.

Enter your rest endpoint [Current: None | No input: https://fullnode.devnet.aptoslabs.com/v1]

No rest url given, using https://fullnode.devnet.aptoslabs.com/v1...
Enter your faucet endpoint [Current: None | No input: https://faucet.devnet.aptoslabs.com | 'skip' to not use a faucet]

No faucet url given, using https://faucet.devnet.aptoslabs.com...
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 10000 coins
Aptos is now set up for account a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a!  Run `aptos help` for more information about commands
{
  "Result": "Success"
}

Адрес учетной записи в приведенном выше результате: a345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a - это ваша новая учетная запись, которая является псевдонимом профиля default. Адрес этой учетной записи будет для вас разным, так как он генерируется случайным образом. Отныне default или 0xa345dbfb0c94416589721360f207dcc92ecfe4f06d8ddc1c286f569d59721e5a взаимозаменяемы.

2. Теперь пополните этот учетную запись, выполнив эту команду:

aptos account fund-with-faucet --account default

Вы увидите результат, аналогичный приведенному ниже:

{
  "Result": "Added 10000 coins 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

Чтобы протестировать модуль, запустите его:

aptos move test --named-addresses hello_blockchain=default

Запись CLI должна содержать --named-addresses, так как в файле Move.toml этот параметр не определен (см. ниже). Чтобы подготовить модуль для учетной записи, созданной в предыдущем шаге, мы указываем, что именованный адрес hello_blockchain устанавливается на адрес нашей учетной записи, используя псевдоним default.

[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

Модули перемещения открывают точки доступа, также называемые entry functions. Эти точки доступа могут быть вызваны с помощью транзакций. CLI обеспечивает беспрепятственный доступ к этим точкам доступа. Пример модуля Move hello_blockchain раскрывает функцию входа set_message, которая принимает string. Она может быть вызвана через 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_blockchain MessageHolder. Ресурс - это структура данных, которая хранится в глобальном хранилище. Ресурс можно прочитать, обратившись к следующему REST API:


https://fullnode.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:

http://127.0.0.1:8080/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"
    }
  }
]

ПОДСКАЗКА

Другие учетные записи могут повторно использовать опубликованный модуль, вызывая точно такую же функцию, как в этом примере. Это остается на усмотрение читателя.

Last updated