Создаем на Flow | Изучаем FCL — 3. Как вернуть пользовательское значение из скрипта

egormajj

EgorMajj

Posted on June 30, 2022

Создаем на Flow | Изучаем FCL — 3. Как вернуть пользовательское значение из скрипта

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

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

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

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

Контент Kimazing

https://youtu.be/DWz8Plv5n3k

Ранее в разделе "Изучение 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);

Enter fullscreen mode Exit fullscreen mode

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

В строке скрипта разрешается определять новые структуры. Мы создадим одну из них и назовем ее 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}`)
};
Enter fullscreen mode Exit fullscreen mode

Заключение

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

(async () => {
  console.clear();
  await fetchCustom();
})();

Enter fullscreen mode Exit fullscreen mode

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

number field is: 42
address field is: 0x0000000000001337
Enter fullscreen mode Exit fullscreen mode

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

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

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

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

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

  • (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