Создаем на Flow | Изучаем FCL — 4. Как преобразовать .find Identity Name в адрес

egormajj

EgorMajj

Posted on June 30, 2022

Создаем на Flow | Изучаем FCL — 4. Как преобразовать .find Identity Name в адрес

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

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

В этом руководстве мы рассмотрим следующее:

  • преобразовывать .find Identity Name на соответствующий адрес Flow 0x (.find → 0x)
  • искать имя (имена) .find для адреса Flow 0x (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)
}
Enter fullscreen mode Exit fullscreen mode

И еще один для обратного процесса:

import FIND from 0x097bafa4e0b48eef

pub fun main(address: Address) : String?{
  return FIND.reverseLookup(address)
}
Enter fullscreen mode Exit fullscreen mode

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

Шаг 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"
  );
};
Enter fullscreen mode Exit fullscreen mode

Шаг 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"
  );
};
Enter fullscreen mode Exit fullscreen mode

Заключение

❕Примечание: Для простоты мы используем эти методы внутри 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");
})();
Enter fullscreen mode Exit fullscreen mode

В консоли вы должны увидеть следующий результат:

bjartek identity has address 0x886f3aeaf848c535
0x886f3aeaf848c535 address is aliased to bjartek
Enter fullscreen mode Exit fullscreen mode

Полный код можно найти на Codesandbox здесь:
https://codesandbox.io/s/dev-to-fcl-resolve-find-name-9tbo8e.

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

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

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

  • (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 - Замечательная среда разработки и прототипирования прямо в вашем браузере
💖 💪 🙅 🚩
egormajj
EgorMajj

Posted on June 30, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What was your win this week?
weeklyretro What was your win this week?

November 29, 2024

Where GitOps Meets ClickOps
devops Where GitOps Meets ClickOps

November 29, 2024

How to Use KitOps with MLflow
beginners How to Use KitOps with MLflow

November 29, 2024

Modern C++ for LeetCode 🧑‍💻🚀
leetcode Modern C++ for LeetCode 🧑‍💻🚀

November 29, 2024