Обзор Aptos SDK
Published: 2022-09-05 23:31:33

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

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

> **ПОДСКАЗКА**
> Чтобы узнать, как использовать Aptos SDK, посмотрите руководство "[Транзакции с Typescript SDK](https://aptos.dev/sdks/transactions-with-ts-sdk/)". Также смотрите [документацию по Aptos SDK](https://aptos-labs.github.io/ts-sdk-doc/).

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eyuve2ob690q48jmljl4.jpg)

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

Ниже перечислены несколько ключевых возможностей Aptos SDK:
- **Генерация ключей**: Aptos SDK предоставляет удобные методы для генерации пар ключей [Ed25519](https://ed25519.cr.yp.to/). Открытые ключи Ed25519 могут быть использованы для получения адресов учетных записей сети, в то время как закрытые ключи должны храниться в закрытом виде для подписания транзакций. См. [класс TransactionBuilderEd25519](https://aptos-labs.github.io/ts-sdk-doc/classes/TransactionBuilderEd25519.html).
- **Подписание и отправка транзакций**: Хотя Aptos REST API поддерживает подписание необработанной транзакции на стороне сервера, подписание транзакций на стороне клиента с помощью Aptos SDK более безопасно и должно быть предпочтительным выбором.
- **Запрос статуса транзакции**: Aptos SDK поддерживает запросы статуса транзакции (успех, неудача, ожидание) по хэшу транзакции.
- **Библиотека BCS**: В Aptos SDK реализована библиотека BCS (Binary Canonical Serialization) для подписания и отправки транзакций. Блокчейн Aptos использует [BCS](https://docs.rs/bcs/latest/bcs/) для сериализации и десериализации данных. См. [Aptos SDK BCS](https://aptos-labs.github.io/ts-sdk-doc/modules/BCS.html).
- **Методы поиска информации**: Ресурсы, модули и транзакции под определенной учетной записью можно получить с помощью Aptos SDK.
- **Клиент Faucet**: Aptos [FaucetClient](https://aptos-labs.github.io/ts-sdk-doc/classes/FaucetClient.html) предназначен для майнинга тестовых coins, которые используются для разработки.
- **Токен-клиент**: Aptos SDK обеспечивает встроенную поддержку майнинга и запроса NFT. См. [TokenClient](https://aptos-labs.github.io/ts-sdk-doc/classes/TokenClient.html).

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

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

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

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

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

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

> **ПОДСКАЗКА**
> Вы также можете использовать этот [API TokenClient](https://aptos-labs.github.io/ts-sdk-doc/classes/TokenClient.html) в качестве примера API токенов NFT, прежде чем начать разработку собственных API приложений с использованием SDK.

**Клиент OpenAPI**
Клиент OpenAPI - это набор классов, которые создаются на основе спецификации Aptos REST API. См. [определение OpenAPI в Typescript SDK](https://aptos-labs.github.io/ts-sdk-doc/).

**Учетная запись Aptos**
[Класс AptosAccount](https://aptos-labs.github.io/ts-sdk-doc/classes/AptosAccount.html) предоставляет методы для:

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

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

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

1. ScriptFunction
2. Script
3. ModuleBundle

**Клиент Aptos**
[Класс AptosClient](https://aptos-labs.github.io/ts-sdk-doc/classes/AptosClient.html) предоставляет методы для получения ресурсов учетной записи, транзакций, модулей и событий.

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

1. Отправка транзакций в формате JSON делегирует создание сообщения для подписания (вход для функции подписания) серверу API. Это применимо при использовании REST API и сервера Aptos для генерации сообщения о подписании, подписи транзакции и отправки подписанной транзакции в блокчейн Aptos. См. руководство "[Ваша первая транзакция](https://dev.to/egormajj/rukovodstvo-dlia-razrabotchikov-aptos-vasha-piervaia-tranzaktsiia-8fk)".
2. Отправка транзакций в формате BCS, который подготавливает и подписывает необработанные транзакции на стороне клиента. Этот метод использует библиотеку BCS и конструктор транзакций для создания полезных данных транзакции. См. руководство "[Создание подписанной транзакции](https://dev.to/egormajj/rukovodstvo-po-sozdaniiu-podpisannoi-tranzaktsii-2e41)".

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

**Клиент токена**
[Класс TokenClient](https://aptos-labs.github.io/ts-sdk-doc/classes/TokenClient.html) предоставляет методы для создания и запроса коллекций и токенов NFT.

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

[BCS](https://docs.rs/bcs/latest/bcs/) используется для сборки и сериализации полезных данных транзакции для подписания и отправки.

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

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

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

> **ПОДСКАЗКА**
> Пример модульных тестов для сериализатора BCS можно найти [здесь](https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/transaction_builder/bcs/serializer.test.ts).
> Пример e2e-теста для отправки транзакции BCS можно найти [здесь](https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_client.test.ts#L88).

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

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

- [Вектор ScriptFunction](https://github.com/aptos-labs/aptos-core/blob/main/api/goldens/aptos_api__tests__transaction_vector_test__test_entry_function_payload.json)
- [Вектор Script](https://github.com/aptos-labs/aptos-core/blob/main/api/goldens/aptos_api__tests__transaction_vector_test__test_script_payload.json)
- [Вектор ModuleBundle](https://github.com/aptos-labs/aptos-core/blob/main/api/goldens/aptos_api__tests__transaction_vector_test__test_module_payload.json)

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

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

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