Создаем на Flow | Изучаем FCL — 8. Как запросить транзакцию по Id
EgorMajj
Posted on July 1, 2022
Краткий обзор
В этом кратком руководстве вы узнаете, как:
- запрашивать данные о транзакциях по 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);
Заключение
Как всегда, мы обернем код в блок 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 });
}
После выполнения в консоли должно появиться следующее сообщение:
txResult: {
blockId: "f21eb65a65cd8f2f26a340265c24497ee2ca130862e4c7e9d6f1e6d6680a2fe6",
status: 4,
statusString: "SEALED",
statusCode: 0,
errorMessage: "",
events: Array(7),
}
Каждое событие будет иметь формат объекта:
{
type: "A.2d4c3caffbeab845.FLOAT.FLOATMinted",
transactionId: "2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7",
transactionIndex: 4,
eventIndex: 0,
data: Object,
}
Если вы посмотрите на название типа события разных событий, то сможете четко увидеть закономерность:
-
A
- обозначает аккаунт -
2d4c3caffbeab845
- это адрес, по которому размещено объявление о событии, связанном с проведением контракта -
FLOAT
- название контракта -
FLOATMinted
- название события
Мы можем создать ссылку и исследовать этот контракт на Flow View Source. В строке 53
есть определение события FLOATMinted
.
В "Кратком справочнике" FCL на сайте Docs есть больше информации как о транзакции, так и о событиях:
- результат транзакции - https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7
- данные о событиях - https://docs.onflow.org/fcl/reference/api/#event-object
Другие способы изучения транзакций
Аналогично аккаунту, как мы рассматривали в прошлый раз, мы можем исследовать данные транзакций на FlowScan и Flow View Source.
- Flow View Source - https://flow-view-source.com/mainnet/account/0x5916e847260714b6 - сообщество проекта OG из FCL - James Hunter - https://github.com/orodio.
- FlowScan -https://flowscan.org/transaction/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7 - в отличие от информации о счете, транзакции на 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 - Замечательная среда разработки и прототипирования прямо в вашем браузере
Posted on July 1, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.