DEV Community

EgorMajj
EgorMajj

Posted on

Руководство для разработчиков APTOS | Ваша первая транзакция | Typescript

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

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

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

ПРИМЕЧАНИЕ
Подробнее об учетных записях Aptos см. в разделе Учетные
записи
.

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

Aptos предоставляет REST API для взаимодействия с блокчейном. Данный шаг подготавливает оболочки вокруг этого API для получения информации о счете, а также для создания транзакции, ее подписания и отправки. В этом руководстве мы используем Typescript SDK для примера Typescript

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

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

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

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

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

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

  1. Клонируйте репозиторий Aptos.
git clone https://github.com/aptos-labs/aptos-core.git
Enter fullscreen mode Exit fullscreen mode
  1. cd в каталог aptos-core.
cd aptos-core
Enter fullscreen mode Exit fullscreen mode
  1. Проверьте ветку devnet с помощью git checkout --track origin/devnet.
  2. Запустите Bash-скрипт scripts/dev_setup.sh, как показано ниже. Это подготовит вашу среду для разработки.
./scripts/dev_setup.sh
Enter fullscreen mode Exit fullscreen mode
  1. Обновите текущую среду консоли.
source ~/.cargo/env
Enter fullscreen mode Exit fullscreen mode

Ваша среда разработки готова, теперь вы готовы к выполнению этого руководства.

Источник с GitHub

Перейдите по приведенным ниже ссылкам, чтобы получить доступ к исходному коду руководства:
Смотрите код first_transaction.ts в руководстве проекта Typescript.

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

Этот шаг создает образ учетной записи. См. также раздел Учетные записи Aptos и Создание подписанной транзакции.

/** AptosAccount provides methods around addresses, key-pairs */
import { AptosAccount, TxnBuilderTypes, BCS, MaybeHexString } from "aptos";
Enter fullscreen mode Exit fullscreen mode

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

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

  • Получения данных из реестра FullNode, включая данные учетной записи и ресурсах учетной записи.
  • Создание подписанных транзакций, представленных в формате JSON.
/** Wrappers around the Aptos Node and Faucet API */
import { AptosClient, FaucetClient } from "aptos";
Enter fullscreen mode Exit fullscreen mode

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

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

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
 */
Enter fullscreen mode Exit fullscreen mode

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

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

/**
 * 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.
 */
Enter fullscreen mode Exit fullscreen mode

Шаг 2.3: Логические действия, специфичные для конкретного приложения

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

/** 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;
}
Enter fullscreen mode Exit fullscreen mode

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

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

/** Faucet creates and funds accounts. */
const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL);
Enter fullscreen mode Exit fullscreen mode

Шаг 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
Enter fullscreen mode Exit fullscreen mode

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

Проверка

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

ПРИМЕЧАНИЕ
Aptos devnet время от времени перезагружается, поэтому приведенные выше ссылки могут не работать. Попробуйте выполнить инструкцию самостоятельно и затем проверьте учетные записи в Aptos Explorer.

Top comments (0)