Построение на FLOW | Изучение FCL — 3. Как вернуть пользовательское значение из сценария


Обзор

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

  • определите пользовательскую структуру в теле сценария
  • создайте экземпляр вышеупомянутой структуры и используйте его в качестве возвращаемого значения скрипта

💡 Учиться лучше с помощью видео? К счастью для вас, есть видео, которое вы можете смотреть вместе с этим руководством. Рассказывает один и единственный защитник разработчиков Flow — Kimcodeashian!

Kimazing Content

Предыдущий материал «Изучаем FCL»

В предыдущем посте мы узнали, как передавать аргументы нашему сценарию Cadence. Но если вы помните один из примеров — passMultipleDifferentTypes — мы могли вернуть только одно значение, даже если передавали несколько различных типов.

Сегодня я покажу вам, как можно определить пользовательскую структуру в теле сценария и затем использовать ее в качестве возвращаемого типа.

Давайте начнем! 💪

Шаг 1 — Установка

Добавьте "@onflow/fcl": "1.0.0" в качестве зависимости.

Шаг 2 — Установка

Как и в прошлый раз, мы импортируем необходимые методы и настроим FCL:

import { query, config } from "@onflow/fcl";

const api = "https://rest-testnet.onflow.org";
config().put("accessNode.api", api);
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг 3 — Реализация метода fetchCustom

Разрешается определять новые Structs в теле скрипта. Мы создадим одну из них и назовем ее Custom (можно использовать любое имя по своему усмотрению)

const fetchCustom = async (name) => {
  const cadence = `
    // We will define custom Struct with name Custom :)
    pub struct Custom {

      pub let number: Int
      pub let address: Address

      // underscore before name of the arguments will allow us to pass values
      // without specifying the name of the arguments, which is usefull when
      // you have only a few of them

      init(number: Int, address: Address){
        self.number = number
        self.address = address
      }
    }

    pub fun main():Custom {
        // in order to create instance of a struct you use it's name
        // and pass initialization arguments in parentheses
        let t = Custom(number: 42, address: 0x1337)
        return t
    }
  `;

  const custom = await query({ cadence });

  const { number, address } = custom;
  console.log(`number field is ${number}`)
  console.log(`address field is ${address}`)
};
Вход в полноэкранный режим Выйти из полноэкранного режима

Наконец,

Как всегда, выполним код с помощью IIFE:

(async () => {
  console.clear();
  await fetchCustom();
})();
Войти в полноэкранный режим Выйти из полноэкранного режима

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

number field is: 42
address field is: 0x0000000000001337
Вход в полноэкранный режим Выйти из полноэкранного режима

Вы потеряли 🤷♂️? Не беспокойтесь 😉 — проверьте полный код на Codesandbox

В следующий раз мы применим наши приобретенные навыки и используем .find deployed contract для преобразования .find identity name в адрес.

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

Ресурсы

  • Пример кода — https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx
  • Cadence Structs — https://docs.onflow.org/cadence/language/composite-types/#composite-type-declaration-and-creation

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

  • Flow Docs Site — https://docs.onflow.org/ — более подробная информация о блокчейне Flow и о том, как с ним взаимодействовать.
  • Flow Portal — https://flow.com/ — ваша точка входа в Flow
  • FCL JS — https://github.com/onflow/fcl-js — исходный код и возможность внести свой вклад в библиотеку FCL JS
  • Cadence — https://docs.onflow.org/cadence/ — Введение в Cadence
  • Codesandbox — https://codesandbox.io — удивительная браузерная IDE, позволяющая быстро создавать прототипы.

Оцените статью
Procodings.ru
Добавить комментарий