Руководство по взаимодействию с блокчейном Aptos
Tags: blockchain, aptos, tutorial, developer
Published: 2022-09-01 22:46:01

Блокчейн Aptos использует виртуальную машину [Move](https://diem.github.io/move/) для выполнения операций. В то время как многие блокчейны реализуют набор собственных операций, Aptos делегирует Move все операции, включая: создание учетной записи, перевод средств и публикацию модулей Move. Для поддержки этих операций блокчейн, построенный на базе Move, должен предоставлять основу (подобно операционной системе для компьютера или минимальному набору функций) для взаимодействия с блокчейном. В этом разделе мы обсудим эти функции, открытые через `script` функции Aptos Framework.

Это руководство (в сочетании с [руководством по модулю Move](https://dev.to/egormajj/rukovodstvo-dlia-razrabotchikov-aptos-vash-piervyi-modul-move-typescript-41g0)) раскроет минимальный объем информации, необходимый для того, чтобы начать создавать насыщенные приложения на основе блокчейна Aptos. Примечание: Aptos Framework находится в стадии активного развития, поэтому данный документ может быть неактуальным. Самую последнюю версию фреймворка можно найти в исходном коде [здесь](https://github.com/aptos-labs/aptos-core/tree/main/aptos-move/framework/aptos-framework/sources).

Основные функции, предоставляемые пользователям в рамках Aptos Framework, включают:

- Отправка и получение сетевого coin `Coin<AptosCoin>`.
- Создание новой учетной записи
- Публикация нового модуля Move

Примечание: этот документ предполагает, что читатели уже знакомы с отправкой транзакций, как описано в руководстве "[Ваша первая транзакция](https://dev.to/egormajj/rukovodstvo-dlia-razrabotchikov-aptos-vasha-piervaia-tranzaktsiia-8fk)".

## Отправка и получение сетевого coin `Coin<AptosCoin>`
`Coin<AptosCoin>` необходима для оплаты комиссии за газ при отправке и выполнении транзакций. 
`Coin<AptosCoin>` можно получить, вызвав Devnet Faucet. Пример смотрите в руководстве "[Ваша первая транзакция](https://dev.to/egormajj/rukovodstvo-dlia-razrabotchikov-aptos-vasha-piervaia-tranzaktsiia-8fk)".

Полезной нагрузкой для передачи блокчейну команды на выполнение перевода является:

```
{
  "type": "entry_function_payload",
  "function": "0x1::Coin::transfer",
  "type_arguments": ["0x1::aptos_coin::AptosCoin"],
  "arguments": [
    "0x737b36c96926043794ed3a0b3eaaceaf",
    "1000",
  ]
}
```

Это дает указание виртуальной машине выполнить `script` `0x1::Coin::transfer` с аргументом типа `0x1::aptos_coin::AptosCoin`. Тип здесь необходим, поскольку Coin - это наш стандартный модуль, который можно использовать для создания многих типов Coin. Пример создания пользовательской Coin смотрите в руководстве "[Ваш первый Coin](https://dev.to/egormajj/rukovodstvo-dlia-razrabotchikov-aptos-vash-piervyi-coin-typescript-525n)". Первый аргумент - это адрес получателя, `0x737b36c96926043794ed3a0b3eaaceaf`, а второй - сумма перевода, `1000`. Адрес отправителя - это адрес учетной записи, которая отправила транзакцию, запросив данный `script`.

## Создание новой учетной записи
Полезная нагрузка для передачи блокчейну команды на создание новой учетной записи следующая:

```
{
  "type": "entry_function_payload",
  "function": "0x1::AptosAccount::create_account",
  "type_arguments": [],
  "arguments": [
    "0x0c7e09cd9185a27104fa218a0b26ea88",
    "0xaacf87ae9d8a5e523c7f1107c668cb28dec005933c4a3bf0465ffd8a9800a2d900",
  ]
}
```
Это дает указание виртуальной машине Move выполнить `script` `0x1::AptosAccount::create_account`. Первым аргументом является адрес создаваемой учетной записи, а вторым - предварительный образ ключа аутентификации (который упоминается в разделе [Учетные записи](https://dev.to/egormajj/kontsieptsii-aptos-uchietnyie-zapisi-3jj3)). Для аутентификации с одной подписью это открытый ключ, скомпонованный с байтом `0` (или `pubkey_A | 0x00`). Это необходимо для предотвращения присвоения адреса учетной записи. Выполнение этой инструкции проверяет, что последние 16 байт ключа аутентификации совпадают с 16-байтовым адресом учетной записи. Мы активно работаем над улучшением этого API для поддержки приема 32-байтового адреса учетной записи, что устранит опасения по поводу присвоения или манипулирования учетной записью.

## Публикация нового модуля Move
Полезная нагрузка для передачи блокчейну команды для публикации нового модуля является:

```
"type": "module_bundle_payload",
"modules": [
    {"bytecode": "0x..."},
],
```
Это дает указание виртуальной машине опубликовать байткод модуля под учетной записью отправителя. Полное руководство смотрите в разделе [Ваш первый модуль Move](https://dev.to/egormajj/rukovodstvo-dlia-razrabotchikov-aptos-vash-piervyi-modul-move-typescript-41g0).

Важно отметить, что байткод Move должен указывать тот же адрес, что и учетная запись отправителя, иначе транзакция будет отклонена. Например, если адрес учетной записи `0xe110`, модуль Move должен быть обновлен как такой `module 0xe110::Message`, `module 0xbar::Message` будет отклонен. В качестве альтернативы можно использовать псевдонимный адрес, например, `module HelloBlockchain::Message`, но псевдоним `HelloBlockchain` нужно будет обновить до `0xe110` в файле `Move.toml`. Мы работаем с командой Move и планируем включить компилятор в наш REST-интерфейс, чтобы смягчить эту проблему.