DEV Community

EgorMajj
EgorMajj

Posted on

Руководство по взаимодействию с блокчейном Aptos

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

Это руководство (в сочетании с руководством по модулю Move) раскроет минимальный объем информации, необходимый для того, чтобы начать создавать насыщенные приложения на основе блокчейна Aptos. Примечание: Aptos Framework находится в стадии активного развития, поэтому данный документ может быть неактуальным. Самую последнюю версию фреймворка можно найти в исходном коде здесь.

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

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

Примечание: этот документ предполагает, что читатели уже знакомы с отправкой транзакций, как описано в руководстве "Ваша первая транзакция".

Отправка и получение сетевого coin Coin<AptosCoin>

Coin<AptosCoin> необходима для оплаты комиссии за газ при отправке и выполнении транзакций.
Coin<AptosCoin> можно получить, вызвав Devnet Faucet. Пример смотрите в руководстве "Ваша первая транзакция".

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

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

Это дает указание виртуальной машине выполнить script 0x1::Coin::transfer с аргументом типа 0x1::aptos_coin::AptosCoin. Тип здесь необходим, поскольку Coin - это наш стандартный модуль, который можно использовать для создания многих типов Coin. Пример создания пользовательской Coin смотрите в руководстве "Ваш первый Coin". Первый аргумент - это адрес получателя, 0x737b36c96926043794ed3a0b3eaaceaf, а второй - сумма перевода, 1000. Адрес отправителя - это адрес учетной записи, которая отправила транзакцию, запросив данный script.

Создание новой учетной записи

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

{
  "type": "entry_function_payload",
  "function": "0x1::AptosAccount::create_account",
  "type_arguments": [],
  "arguments": [
    "0x0c7e09cd9185a27104fa218a0b26ea88",
    "0xaacf87ae9d8a5e523c7f1107c668cb28dec005933c4a3bf0465ffd8a9800a2d900",
  ]
}
Enter fullscreen mode Exit fullscreen mode

Это дает указание виртуальной машине Move выполнить script 0x1::AptosAccount::create_account. Первым аргументом является адрес создаваемой учетной записи, а вторым - предварительный образ ключа аутентификации (который упоминается в разделе Учетные записи). Для аутентификации с одной подписью это открытый ключ, скомпонованный с байтом 0 (или pubkey_A | 0x00). Это необходимо для предотвращения присвоения адреса учетной записи. Выполнение этой инструкции проверяет, что последние 16 байт ключа аутентификации совпадают с 16-байтовым адресом учетной записи. Мы активно работаем над улучшением этого API для поддержки приема 32-байтового адреса учетной записи, что устранит опасения по поводу присвоения или манипулирования учетной записью.

Публикация нового модуля Move

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

"type": "module_bundle_payload",
"modules": [
    {"bytecode": "0x..."},
],
Enter fullscreen mode Exit fullscreen mode

Это дает указание виртуальной машине опубликовать байткод модуля под учетной записью отправителя. Полное руководство смотрите в разделе Ваш первый модуль Move.

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

Top comments (0)