Создаем на Flow | Изучаем FCL — 4. Как преобразовать .find Identity Name в адрес
Published: 2022-06-30 17:25:58

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

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

- преобразовывать `.find` Identity Name на соответствующий адрес Flow `0x` (**.find → 0x**)
- искать имя (имена) `.find` для адреса Flow `0x` (**0x0 → .find**)

## Ранее в разделе "Изучение FCL"
Если вы работали с одним из наших [предыдущих постов](https://dev.to/egormajj/sozdaiem-na-flow-izuchaiem-fcl-3-kak-viernut-polzovatielskoie-znachieniie-iz-skripta-1ccn), вы должны знать, как передавать аргументы скриптам Cadence. Эти знания нам понадобятся, поскольку в этом руководстве нам нужно будет передавать значения `String` и `Address`.

Приступим! 💪

## Подготовка
Когда вы хотите взаимодействовать с каким-либо развернутым контрактом, вам нужно сначала узнать, где он развернут 😅. В нашем конкретном примере .find - это известный сервис, и с помощью его создателя [Bjarte](https://github.com/bjartek) мы смогли найти адрес репозитория GitHub по адресу [https://github.com/bjartek](https://github.com/findonflow/find).

> 💡 Совет профессионала: вы можете найти любой контракт, если у вас есть хэш транзакции или адрес счета, который взаимодействовал с контрактом в прошлом. Просто просмотрите его историю на [flowscan.org](https://flowscan.org/)!

Вернемся к .find! Покопавшись, вы сможете найти всю необходимую информацию внутри файла [integration.md](https://github.com/findonflow/find/blob/main/integrating.md). В частности, два блока кода Cadence, которые мы будем использовать в качестве наших преобразователей. Этот - для метода поиска от имени к адресу:

```javascript
import FIND from 0x097bafa4e0b48eef

pub fun main(name: String): Address?{
  return FIND.lookupAddress(name)
}
```
И еще один для обратного процесса:

```javascript
import FIND from 0x097bafa4e0b48eef

pub fun main(address: Address) : String?{
  return FIND.reverseLookup(address)
}
```

## Шаг 1 - Установка
Добавьте `"@onflow/fcl": "1.0.0"` в качестве зависимости

## Шаг 2 - Настройка
Как и в прошлый раз импортируем необходимые методы и настраиваем FCL:

```javascript
// 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` . Эта функция будет принимать строку, передавать ее в сеть вместе с кодом нашего преобразователя, а затем выводить результат:

```javascript
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`, которая принимает адрес, переданный в виде строки.

```javascript
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](https://developer.mozilla.org/en-US/docs/Glossary/IIFE). Можно представить, что они запускаются по нажатию кнопки или как часть более сложной процедуры.

```javascript
(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");
})();
```
В консоли вы должны увидеть следующий результат:

```javascript
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-resolve-find-name-9tbo8e).

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

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

- **Пример кода** — [https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx](https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx)
- **Cadence Imports** — [https://docs.onflow.org/cadence/language/imports/](https://docs.onflow.org/cadence/language/imports/) 
- **.find GitHub Repository** — [https://github.com/findonflow/find](https://github.com/findonflow/find) — полный исходный код и документация для платформы .find

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

- **(ENG) | Документация Flow** - [https://docs.onflow.org/](https://docs.onflow.org/) - более детальная информации о блокчейне Flow и как взаимодействовать с ним
- **(ENG) | Flow Portal** - [https://flow.com/](https://flow.com/) - your entry point to Flow
- **(ENG) | FCL JS** - [https://github.com/onflow/fcl-js](https://github.com/onflow/fcl-js) - Исходный код и возможность поучаствовать в разработке библиотеки FCL JS library
- **(ENG) | Cadence** - [https://docs.onflow.org/cadence/](https://docs.onflow.org/cadence/) - Введение в язык программирования Cadence
- **Codesandbox** - [https://codesandbox.io](https://codesandbox.io) - Замечательная среда разработки и прототипирования прямо в вашем браузере