Создаем на Flow | Изучаем FCL — 8. Как запросить транзакцию по Id
Published: 2022-07-01 16:36:55

## Краткий обзор
В этом кратком руководстве вы узнаете, как:

- запрашивать данные о транзакциях по id транзакции
- обрабатывать и анализировать полученные данные

Коротко, но сразу к делу! 😀

## Почему?
После отправки транзакции в сеть вы получите соответствующий `id`, который любой может использовать для запроса данных о конкретной транзакции. Например, если вы переводите токены на другой аккаунт, вы можете указать ID транзакции в качестве доказательства того, что вы выполнили задачу на своей стороне, и теперь получатель может проверить обновления статуса, используя эту транзакцию.

## Как?
FCL предоставляет функцию `[tx]``(https://docs.onflow.org/fcl/reference/api/#tx)`, которая позволяет подписаться на обновления статуса транзакции (через опрос), но впоследствии также возвращает завершенный результат, если статус транзакции `sealed` (закрыт). Функция `tx` возвращает объект, одной из строк котороя является методом `.onceSealed()`. При обращении к этому методу будет возвращен Promise, который разрешится, если транзакция с указанным id имеет статус, равный `5` - sealed.

## Снова закрыли? 🤔
Как и блоки, транзакции также имеют различные статусы:

- 1 - **ожидание** - транзакция ожидает завершения
- 2 - **завершена** - транзакция ожидает исполнения
- 3 - **выполнена** - транзакция ожидает закрытия
- 4 - **закрыта** - транзакция закрыта и может рассматриваться как **выполнена** и необратимая
- 5 - **истекла** - транзакция истекла

> Вы правильно прочитали, срок действия транзакции может истечь! Когда транзакция создана, она "привязывается" к последнему доступному блоку и должна быть закрыта в пределах 600 блоков (или около 10 минут реального времени 👨🏫).

Теперь давайте попробуем это на практике! 💪

## Шаг 1 - Установка
Добавьте `"@onflow/fcl": "1.0.0"` в качестве зависимости

## Шаг 2 - Настройка
Как и в прошлый раз импортируем необходимые методы и настраиваем FCL:

```javascript
// Import methods from FCL
import { tx, config } from "@onflow/fcl";

// Specify the API endpoint - this time we will use Mainnet
const api = "https://rest-mainnet.onflow.org";

// Configure FCL to use mainnet as the access node
config().put("accessNode.api", api);

```

## Заключение
Как всегда, мы обернем код в блок IIFE для автоматического выполнения:

```javascript
// We will use IIFE to execute our code right away
(async () => {
  console.clear();

    // This is just a random transaction id we've got from Flowscan live feed
    const id = "2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7";

  const txResult = await tx(id).onceSealed();
  console.log({ txResult });
}
```
После выполнения в консоли должно появиться следующее сообщение:

```javascript
txResult: {
    blockId: "f21eb65a65cd8f2f26a340265c24497ee2ca130862e4c7e9d6f1e6d6680a2fe6",
    status: 4,
    statusString: "SEALED",
    statusCode: 0,
    errorMessage: "",
    events: Array(7),
}
```
Каждое событие будет иметь формат объекта:

```javascript
{
    type: "A.2d4c3caffbeab845.FLOAT.FLOATMinted",
    transactionId: "2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7",
    transactionIndex: 4,
    eventIndex: 0,
    data: Object,
}
```
Если вы посмотрите на название типа события разных событий, то сможете четко увидеть закономерность:

- `A` - обозначает аккаунт
- `2d4c3caffbeab845` - это адрес, по которому размещено объявление о событии, связанном с проведением контракта
- `FLOAT` - название контракта
- `FLOATMinted` - название события

Мы можем создать ссылку и исследовать этот [контракт на Flow View Source](https://flow-view-source.com/mainnet/account/0x2d4c3caffbeab845/contract/FLOAT). В строке `53` есть определение события `FLOATMinted`.

В "Кратком справочнике" FCL на сайте Docs есть больше информации как о транзакции, так и о событиях:

- результат транзакции - [https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7](https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7)
- данные о событиях - [https://docs.onflow.org/fcl/reference/api/#event-object](https://docs.onflow.org/fcl/reference/api/#event-object)

## Другие способы изучения транзакций

Аналогично аккаунту, как мы рассматривали в прошлый раз, мы можем исследовать данные транзакций на FlowScan и Flow View Source.

- **Flow View Source** - [https://flow-view-source.com/mainnet/account/0x5916e847260714b6](https://flow-view-source.com/mainnet/account/0x5916e847260714b6) - сообщество проекта OG из FCL - James Hunter - [https://github.com/orodio](https://github.com/orodio).
- **FlowScan** -[https://flowscan.org/transaction/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7](https://flowscan.org/transaction/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7) - в отличие от информации о счете, транзакции на Flowscan имеют те же данные, что и Flow View Source.

До следующего раза 👋

## Информационные ресурсы
**Полный исходный код**
— [https://codesandbox.io/s/dev-to-fcl-07-get-account-j9rxkm?file=/src/index.js](https://codesandbox.io/s/dev-to-fcl-07-get-account-j9rxkm?file=/src/index.js)
Документы - функция `tx` - [https://docs.onflow.org/fcl/reference/api/#tx](https://docs.onflow.org/fcl/reference/api/#tx)
Документы - `transaction status` - [https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7](https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7)
Документы - данные о `event` (событиях) - [https://docs.onflow.org/fcl/reference/api/#event-object](https://docs.onflow.org/fcl/reference/api/#event-object)

Другие источники, которые могут быть вам полезны:

- **(ENG) | Документация Flow** - https://docs.onflow.org/ - более детальная информации о блокчейне Flow и как взаимодействовать с ним
- **(ENG) | Flow Portal** - https://flow.com/ - your entry point to Flow
- **(ENG) | FCL JS** - https://github.com/onflow/fcl-js - Исходный код и возможность поучаствовать в разработке библиотеки FCL JS library
- **(ENG) | Cadence** - https://docs.onflow.org/cadence/ - Введение в язык программирования Cadence
- **Codesandbox** - https://codesandbox.io - Замечательная среда разработки и прототипирования прямо в вашем браузере