Руководство для разработчиков APTOS | Ваша первая транзакция | Typescript
Tags: blockchain, aptos, developer, tutorial
Published: 2022-08-23 11:36:00

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

**1. Создайте образ учетной записи.**

Каждый аккаунт Aptos имеет уникальный адрес аккаунта. Владелец этого аккаунта владеет парой открытых и закрытых ключей, которая сопоставлена с адресом аккаунта Aptos и, в свою очередь, ключом аутентификации, хранящимся в этом аккаунте.

> **ПРИМЕЧАНИЕ**
> Подробнее об учетных записях Aptos см. в разделе [Учетные
 записи](https://aptos.dev/concepts/basics-accounts).

**2. Подготовьте оболочку для интерфейсов REST.**

Aptos предоставляет [REST API](https://aptos.dev/tutorials/your-first-transaction#:~:text=Aptos%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D1%82-,REST%20API,-%D0%B4%D0%BB%D1%8F%20%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F%20%D1%81) для взаимодействия с блокчейном. Данный шаг подготавливает оболочки вокруг этого API для получения информации о счете, а также для создания транзакции, ее подписания и отправки. В этом руководстве мы используем Typescript SDK для примера Typescript

> **ПРИМЕЧАНИЕ**
> Предпочтительнее использовать Aptos SDK, если он доступен.

**3. Подготовьте оболочку для интерфейса Faucet.**

Используя интерфейс Faucet в Aptos devnet, этот программный код автоматически создает счет с адресом счета `0x1` и пополняет его.

**4. Объедините вышеуказанные оболочки в приложение, выполните и проверьте.**

## Прежде чем начать

Сначала выполните следующие шаги, чтобы можно было начать обучение.

1. Клонируйте репозиторий Aptos.

```javascript 
git clone https://github.com/aptos-labs/aptos-core.git
```
2. `cd` в каталог `aptos-core`.

```javascript
cd aptos-core
```
3. Проверьте ветку devnet с помощью `git checkout --track origin/devnet`.
4. Запустите Bash-скрипт `scripts/dev_setup.sh`, как показано ниже. Это подготовит вашу среду для разработки.

```javascript
./scripts/dev_setup.sh
```
5. Обновите текущую среду консоли.

```javascript
source ~/.cargo/env
```
Ваша среда разработки готова, теперь вы готовы к выполнению этого руководства.

## Источник с GitHub

Перейдите по приведенным ниже ссылкам, чтобы получить доступ к исходному коду руководства:
Смотрите код `first_transaction.ts` в руководстве [проекта Typescript](https://aptos.dev/tutorials/your-first-transaction#:~:text=code%20in%20the-,Typescript%20project,-of%20the%20tutorial).

## Шаг 1: Создайте образ учетной записи

Этот шаг создает образ учетной записи. См. также раздел [Учетные записи Aptos](https://aptos.dev/tutorials/your-first-transaction#step-1-create-a-representation-of-an-account:~:text=account.%20See%20also-,Aptos%20accounts,-and%20Creating%20a) и [Создание подписанной транзакции](https://aptos.dev/tutorials/your-first-transaction#step-1-create-a-representation-of-an-account:~:text=Creating%20a%20Signed%20Transaction).

```javascript
/** AptosAccount provides methods around addresses, key-pairs */
import { AptosAccount, TxnBuilderTypes, BCS, MaybeHexString } from "aptos";
```

## Шаг 2: интерфейс REST

Хотя данные из интерфейса REST можно читать напрямую, следующие примеры кода демонстрируют более эргономичный подход с использованием интерфейса REST:

- Получения данных из реестра FullNode, включая данные учетной записи и ресурсах  учетной записи.
- Создание подписанных транзакций, представленных в формате JSON.

```javascript
/** Wrappers around the Aptos Node and Faucet API */
import { AptosClient, FaucetClient } from "aptos";
```

**Шаг 2.1: Чтение учетной записи**

Ниже приведены оболочки для запроса учетных данных.

```javascript
const client = new AptosClient(NODE_URL);
/**
 * https://aptos-labs.github.io/ts-sdk-doc/classes/AptosClient.html#getAccount
 * returns the sequence number and authentication key for an account
 *
 * https://aptos-labs.github.io/ts-sdk-doc/classes/AptosClient.html#getAccountResource
 * returns all resources associated with the account
 */
```

**Шаг 2.2: Отправка транзакции**

Ниже показана основная информация по созданию, подписанию и выполнению транзакции.

```javascript
/**
 * https://aptos-labs.github.io/ts-sdk-doc/classes/AptosClient.html#generateBCSTransaction
 * signs a raw transaction, which can be submitted to the blockchain.
 */

/**
 * https://aptos-labs.github.io/ts-sdk-doc/classes/AptosClient.html#submitSignedBCSTransaction
 * submits a signed transaction to the blockchain.
 */
```
**Шаг 2.3: Логические действия, специфичные для конкретного приложения**

Ниже показано, как считывать данные из блокчейна и как отправлять конкретную транзакцию.

```javascript
/** Helper method returns the coin balance associated with the account */
export async function accountBalance(accountAddress: MaybeHexString): Promise<number | null> {
  const resource = await client.getAccountResource(accountAddress, "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>");
  if (resource == null) {
    return null;
  }

  return parseInt((resource.data as any)["coin"]["value"]);
}

/**
 * Transfers a given coin amount from a given accountFrom to the recipient's account address.
 * Returns the transaction hash of the transaction used to transfer.
 */
async function transfer(accountFrom: AptosAccount, recipient: MaybeHexString, amount: number): Promise<string> {
  const token = new TxnBuilderTypes.TypeTagStruct(TxnBuilderTypes.StructTag.fromString("0x1::aptos_coin::AptosCoin"));

  const entryFunctionPayload = new TxnBuilderTypes.TransactionPayloadEntryFunction(
    TxnBuilderTypes.EntryFunction.natural(
      "0x1::coin",
      "transfer",
      [token],
      [BCS.bcsToBytes(TxnBuilderTypes.AccountAddress.fromHex(recipient)), BCS.bcsSerializeUint64(amount)],
    ),
  );

  const [{ sequence_number: sequenceNumber }, chainId] = await Promise.all([
    client.getAccount(accountFrom.address()),
    client.getChainId(),
  ]);

  const rawTxn = new TxnBuilderTypes.RawTransaction(
    TxnBuilderTypes.AccountAddress.fromHex(accountFrom.address()),
    BigInt(sequenceNumber),
    entryFunctionPayload,
    1000n,
    1n,
    BigInt(Math.floor(Date.now() / 1000) + 10),
    new TxnBuilderTypes.ChainId(chainId),
  );

  const bcsTxn = AptosClient.generateBCSTransaction(accountFrom, rawTxn);
  const pendingTxn = await client.submitSignedBCSTransaction(bcsTxn);

  return pendingTxn.hash;
}
```

## Step 3: интерфейс Faucet

Faucets Aptos Blockchain выдают тестовые токены на учетные записи. Эти тестовые токены могут быть использованы для тестирования, например, для оплаты газа или перевода токенов между пользователями. Faucet Aptos также может создавать аккаунты, если их не существует. Для интерфейса Faucet Aptos требуется открытый ключ, представленный в виде строки в шестнадцатеричном кодировании.

```javascript
/** Faucet creates and funds accounts. */
const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL);
```

## Шаг 4: Запустите приложение

Наконец, мы можем запустить приложение и проверить результат.

Для Typescript:

- Убедитесь, что вы выполнили предварительные условия, описанные в разделе Прежде чем начать.
- `cd` в каталог `aptos-core/developer-docs-site/static/examples/typescript`.
- Установите необходимые библиотеки: `yarn install`.
- Выполните пример: `yarn first_transaction`.

## Вывод

Вывод после выполнения:

```
=== Addresses ===
Alice: e26d69b8d3ff12874358da6a4082a2ac
Bob: c8585f009c8a90f22c6b603f28b9ed8c

=== Initial Balances ===
Alice: 5000
Bob: 0

=== Final Balances ===
Alice: 3927
Bob: 1000
```
Вывод показывает, что Bob получил от Alice 1000 монет. Alice заплатила 73 монеты за газ.

## Проверка

Данные можно проверить, посетив либо REST-интерфейс, либо Explorer:

- Учетная запись Alice's через [интерфейс Aptos REST](https://aptos.dev/tutorials/your-first-transaction#step-1-create-a-representation-of-an-account:~:text=Aptos%20REST%20interface).
- Учетная запись Bob's через [Aptos Explorer](https://aptos.dev/tutorials/your-first-transaction#step-1-create-a-representation-of-an-account:~:text=account%20via%20the-,Aptos%20Explorer,-.).

> **ПРИМЕЧАНИЕ**
> Aptos devnet время от времени перезагружается, поэтому приведенные выше ссылки могут не работать. Попробуйте выполнить инструкцию самостоятельно и затем проверьте учетные записи в [Aptos Explorer](https://aptos.dev/tutorials/your-first-transaction#step-1-create-a-representation-of-an-account:~:text=Aptos%20Explorer.-,NOTE,tutorial%20yourself%20and%20check%20the%20accounts%20in%20the%20Aptos%20Explorer%20then.,-Edit%20this%20page).