Создаем на Flow | Изучаем FCL — 4. Как преобразовать .find Identity Name в адрес
EgorMajj
Posted on June 30, 2022
Краткий обзор
В этой статье мы узнаем, как можно использовать существующий развернутый контракт и взаимодействовать с ним. Взаимодействие с существующими контрактами в сети является важной частью того, что делает Web3 особенным.
В этом руководстве мы рассмотрим следующее:
- преобразовывать
.find
Identity Name на соответствующий адрес Flow0x
(.find → 0x) - искать имя (имена)
.find
для адреса Flow0x
(0x0 → .find)
Ранее в разделе "Изучение FCL"
Если вы работали с одним из наших предыдущих постов, вы должны знать, как передавать аргументы скриптам Cadence. Эти знания нам понадобятся, поскольку в этом руководстве нам нужно будет передавать значения String
и Address
.
Приступим! 💪
Подготовка
Когда вы хотите взаимодействовать с каким-либо развернутым контрактом, вам нужно сначала узнать, где он развернут 😅. В нашем конкретном примере .find - это известный сервис, и с помощью его создателя Bjarte мы смогли найти адрес репозитория GitHub по адресу https://github.com/bjartek.
💡 Совет профессионала: вы можете найти любой контракт, если у вас есть хэш транзакции или адрес счета, который взаимодействовал с контрактом в прошлом. Просто просмотрите его историю на flowscan.org!
Вернемся к .find! Покопавшись, вы сможете найти всю необходимую информацию внутри файла integration.md. В частности, два блока кода Cadence, которые мы будем использовать в качестве наших преобразователей. Этот - для метода поиска от имени к адресу:
import FIND from 0x097bafa4e0b48eef
pub fun main(name: String): Address?{
return FIND.lookupAddress(name)
}
И еще один для обратного процесса:
import FIND from 0x097bafa4e0b48eef
pub fun main(address: Address) : String?{
return FIND.reverseLookup(address)
}
Шаг 1 - Установка
Добавьте "@onflow/fcl": "1.0.0"
в качестве зависимости
Шаг 2 - Настройка
Как и в прошлый раз импортируем необходимые методы и настраиваем FCL:
// Import methods from FCL
import { query, 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 testnet as the access node
config().put("accessNode.api", api);
Шаг 3 - Преобразование Identity Name в Адрес
Теперь давайте создадим функцию resolveName
. Эта функция будет принимать строку, передавать ее в сеть вместе с кодом нашего преобразователя, а затем выводить результат:
const resolveName = async (name) => {
// The Cadence code we can get from "resolve.cdc" script:
// https://github.com/findonflow/find/blob/main/scripts/resolve.cdc
// .find contract deployed on Flow Mainnet at "0x097bafa4e0b48eef"
// we will use this address in the import statement
const cadence = `
import FIND from 0x097bafa4e0b48eef
pub fun main(name: String): Address?{
return FIND.lookupAddress(name) // we'll use .find's native lookupAddress method.
}
`;
const args = (arg, t) => [arg(name, t.String)];
// "query" is used for read-only operations on chain.
// read more about the "query" method on Flow Docs Site:
// https://docs.onflow.org/fcl/reference/api/#query
const address = await query({ cadence, args });
console.log(
`${name} identity has address %c${address}`,
"color: #36ad68; font-weight: bold"
);
};
Шаг 4 - Преобразование адреса в Identity Alias
Давайте сделаем нечто подобное для обратного процесса. Создадим функцию resolveAddress
, которая принимает адрес, переданный в виде строки.
const resolveAddress = async (address) => {
// The Cadence code to resolve address to an Address we can get from "name.cdc" script:
// https://github.com/findonflow/find/blob/main/scripts/name.cdc
// .find contract deployed on Flow Mainnet at "0x097bafa4e0b48eef" - we will use that address in import statement
const cadence = `
import FIND from 0x097bafa4e0b48eef
pub fun main(address: Address) : String?{
return FIND.reverseLookup(address) // notice the new function
}
`;
const args = (arg, t) => [arg(address, t.Address)];
// "query" will pass Cadence code to access node for execution and return us a result:
// read more about "query" method on Flow Docs Site:
// https://docs.onflow.org/fcl/reference/api/#query
const name = await query({ cadence, args });
console.log(
`${address} address is aliased to %c${name}`,
"color: #36ad68; font-weight: bold"
);
};
Заключение
❕Примечание: Для простоты мы используем эти методы внутри IIFE. Можно представить, что они запускаются по нажатию кнопки или как часть более сложной процедуры.
(async () => {
console.clear();
// Bjarte S. Karlsen is of the original creators of .find and one of the best pillars of Flow Community - https://github.com/bjartek
await resolveName("bjartek");
await resovleAddress("0x886f3aeaf848c535");
})();
В консоли вы должны увидеть следующий результат:
bjartek identity has address 0x886f3aeaf848c535
0x886f3aeaf848c535 address is aliased to bjartek
Полный код можно найти на Codesandbox здесь:
https://codesandbox.io/s/dev-to-fcl-resolve-find-name-9tbo8e.
До следующего раза 👋
Информационные ресурсы
- Пример кода — https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx
- Cadence Imports — https://docs.onflow.org/cadence/language/imports/
- .find GitHub Repository — https://github.com/findonflow/find — полный исходный код и документация для платформы .find
Другие источники, которые могут быть вам полезны:
- (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 June 30, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.