DEV Community

EgorMajj
EgorMajj

Posted on

Обзор Aptos SDK

В этом документе описаны основные функции и компоненты Aptos SDK.

Aptos SDK предоставляет API и интерфейсы, которые вы можете использовать для взаимодействия с блокчейном Aptos, подключаясь к Aptos REST API. REST API - это средство для отправки транзакции в блокчейн Aptos и чтения состояния блокчейна.

ПОДСКАЗКА
Чтобы узнать, как использовать Aptos SDK, посмотрите руководство "Транзакции с Typescript SDK". Также смотрите документацию по Aptos SDK.

Ниже приведена высокоуровневая схема архитектуры Aptos Typescript SDK.

Image description

Основные возможности SDK

Ниже перечислены несколько ключевых возможностей Aptos SDK:

  • Генерация ключей: Aptos SDK предоставляет удобные методы для генерации пар ключей Ed25519. Открытые ключи Ed25519 могут быть использованы для получения адресов учетных записей сети, в то время как закрытые ключи должны храниться в закрытом виде для подписания транзакций. См. класс TransactionBuilderEd25519.
  • Подписание и отправка транзакций: Хотя Aptos REST API поддерживает подписание необработанной транзакции на стороне сервера, подписание транзакций на стороне клиента с помощью Aptos SDK более безопасно и должно быть предпочтительным выбором.
  • Запрос статуса транзакции: Aptos SDK поддерживает запросы статуса транзакции (успех, неудача, ожидание) по хэшу транзакции.
  • Библиотека BCS: В Aptos SDK реализована библиотека BCS (Binary Canonical Serialization) для подписания и отправки транзакций. Блокчейн Aptos использует BCS для сериализации и десериализации данных. См. Aptos SDK BCS.
  • Методы поиска информации: Ресурсы, модули и транзакции под определенной учетной записью можно получить с помощью Aptos SDK.
  • Клиент Faucet: Aptos FaucetClient предназначен для майнинга тестовых coins, которые используются для разработки.
  • Токен-клиент: Aptos SDK обеспечивает встроенную поддержку майнинга и запроса NFT. См. TokenClient.

Компоненты Typescript SDK

Aptos Typescript SDK имеет три логических уровня. См. приведенную выше диаграмму высокоуровневой архитектуры:

  1. Транспортный уровень.
  2. Основной уровень SDK.
  3. Дополнительный уровень приложения.

Транспортный уровень отвечает за отправку полезных данных в конечные точки REST API.

Основной уровень SDK раскрывает функциональные возможности, необходимые большинству приложений, включая:

  • Генерация ключей.
  • Подписание и отправка транзакций.
  • Запрос статуса транзакции, и
  • различные виды поиска информации. Дополнительный уровень приложений обеспечивает встроенную поддержку API токенов NFT.

ПОДСКАЗКА
Вы также можете использовать этот API TokenClient в качестве примера API токенов NFT, прежде чем начать разработку собственных API приложений с использованием SDK.

Клиент OpenAPI
Клиент OpenAPI - это набор классов, которые создаются на основе спецификации Aptos REST API. См. определение OpenAPI в Typescript SDK.

Учетная запись Aptos
Класс AptosAccount предоставляет методы для:

  • Генерации пар ключей Ed25519.
  • Подписания байтового буфера открытым ключом Ed25519, и
  • Получения начальных адресов учетных записей из открытых ключей.

Библиотека BCS
Набор стандартов BCS, реализованных на языке Typescript.

Конструктор транзакций
Конструктор транзакций содержит типы Typescript для создания полезных данных транзакций. Конструктор транзакций в Typescript SDK поддерживает следующие полезные данные транзакций:

  1. ScriptFunction
  2. Script
  3. ModuleBundle

Клиент Aptos
Класс AptosClient предоставляет методы для получения ресурсов учетной записи, транзакций, модулей и событий.

Кроме того, компонент AptosClient поддерживает два метода для подписания и отправки транзакций.

  1. Отправка транзакций в формате JSON делегирует создание сообщения для подписания (вход для функции подписания) серверу API. Это применимо при использовании REST API и сервера Aptos для генерации сообщения о подписании, подписи транзакции и отправки подписанной транзакции в блокчейн Aptos. См. руководство "Ваша первая транзакция".
  2. Отправка транзакций в формате BCS, который подготавливает и подписывает необработанные транзакции на стороне клиента. Этот метод использует библиотеку BCS и конструктор транзакций для создания полезных данных транзакции. См. руководство "Создание подписанной транзакции".

ПОДСКАЗКА
Второй способ, т.е. в формате BCS, является рекомендуемым для отправки транзакций в блокчейн Aptos.

Клиент токена
Класс TokenClient предоставляет методы для создания и запроса коллекций и токенов NFT.

Валидация для конструктора транзакций и BCS

BCS используется для сборки и сериализации полезных данных транзакции для подписания и отправки.

Учитывая, что различные языки программирования имеют различные ограничения на примитивные типы (например, длина байта, диапазон значений и т.д.) и поддержку различных составных типов (например, enum, struct, class и т.д.), код для сериализации данных трудно проверить.

Aptos SDK проверяет конструктор транзакций и BCS двумя способами:

1.Во-первых, с помощью модульных тестов и сквозных (e2e) тестов.

ПОДСКАЗКА
Пример модульных тестов для сериализатора BCS можно найти здесь.
Пример e2e-теста для отправки транзакции BCS можно найти здесь.

2.Второй уровень валидации - это фаззинг тестов с помощью тестовых векторов. Тестовые векторы создаются тем же кодом, который используется в блокчейне Aptos. Тестовые векторы представляют собой массивы объектов JSON. Каждый объект JSON содержит случайные входные данные и ожидаемые выходные данные. Эти тестовые векторы могут быть разобраны и загружены в Aptos SDK для проверки своих реализаций конструктора транзакций и BCS.

Всего существует три тестовых вектора. Каждый из них охватывает один тип полезных данных транзакции.

Элементы вектора не требуют пояснений. Однако для экономии места и предотвращения переполнения данных используется специальный метод сериализации. Подробности описаны ниже:

  • Все адреса учетных записей имеют шестнадцатеричную кодировку.
  • args в ScriptFunction имеет шестнадцатеричную кодировку.
  • Числа U64 и U128 сериализуются как строковые литералы, чтобы избежать усечения данных.
  • U8 сериализуется как число (не строка).
  • code в Script и ModuleBundle имеет шестнадцатеричное кодирование.

ПОДСКАЗКА
Как Typescript SDK выполняет проверку векторов, смотрите в этом примере кода.

Top comments (0)