DEV Community

EgorMajj
EgorMajj

Posted on

Создаем на 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 - Замечательная среда разработки и прототипирования прямо в вашем браузере

Top comments (0)