Обзор
В этом руководстве вы узнаете, как вернуть значение, содержащее несколько других значений, которые не имеют одинакового типа. Для этого мы определим и используем пользовательские структуры 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, позволяющая быстро создавать прототипы.