DEV Community

EgorMajj
EgorMajj

Posted on

Создаем на Flow | Изучаем FCL — 8. Как запросить транзакцию по Id

Краткий обзор

В этом кратком руководстве вы узнаете, как:

  • запрашивать данные о транзакциях по 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:

// 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);

Enter fullscreen mode Exit fullscreen mode

Заключение

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

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

После выполнения в консоли должно появиться следующее сообщение:

txResult: {
    blockId: "f21eb65a65cd8f2f26a340265c24497ee2ca130862e4c7e9d6f1e6d6680a2fe6",
    status: 4,
    statusString: "SEALED",
    statusCode: 0,
    errorMessage: "",
    events: Array(7),
}
Enter fullscreen mode Exit fullscreen mode

Каждое событие будет иметь формат объекта:

{
    type: "A.2d4c3caffbeab845.FLOAT.FLOATMinted",
    transactionId: "2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7",
    transactionIndex: 4,
    eventIndex: 0,
    data: Object,
}
Enter fullscreen mode Exit fullscreen mode

Если вы посмотрите на название типа события разных событий, то сможете четко увидеть закономерность:

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

Мы можем создать ссылку и исследовать этот контракт на Flow View Source. В строке 53 есть определение события FLOATMinted.

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

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

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

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

Информационные ресурсы

Полный исходный код
https://codesandbox.io/s/dev-to-fcl-07-get-account-j9rxkm?file=/src/index.js
Документы - функция tx - https://docs.onflow.org/fcl/reference/api/#tx
Документы - transaction status - https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7
Документы - данные о event (событиях) - 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 - Замечательная среда разработки и прототипирования прямо в вашем браузере

Top comments (0)