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-интерфейс, чтобы смягчить эту проблему.

Latest comments (0)

An Animated Guide to Node.js Event Loop

Node.js doesn’t stop from running other operations because of Libuv, a C++ library responsible for the event loop and asynchronously handling tasks such as network requests, DNS resolution, file system operations, data encryption, etc.

What happens under the hood when Node.js works on tasks such as database queries? We will explore it by following this piece of code step by step.