흐름에 따라 | Изучаем FCL — 2. Передавайте аргументы в скрипты
크라트키 오브조르
После работы с данными в этой статье вы должны знать, как это сделать:
Int
, String
и т. д. Arrays
и Dictionaries
💡Лучше учиться с помощью видео? К счастью для вас, есть видео, которое вы можете смотреть вместе с этим руководством. Рассказывает один и единственный разработчик Flow Developer Advocate - !
콘텐츠 키마징
https://youtu.be/DWz8Plv5n3k
Ранее в разделе "Изучение FCL"
В мы узнали, как отправить на выполнение базовый скрипт Cadence. В этой статье я покажу вам, как передавать различные типы аргументов.
Для этого и всех следующих примеров мы будем использовать Codesandbox, чтобы упростить процесс 🙂 .
Шаг 1 - Установка
Добавьте
"@onflow/fcl": "1.0.0"
в качестве зависимостиШаг 2 - 나스트로이카
Как и в прошлый раз импортируем необходимые 방법 및 nasstrаиваем FCL:
import { query, config } from "@onflow/fcl";
const api = "https://rest-testnet.onflow.org";
config().put("accessNode.api", api);
Шаг 3 - Передача целых значений
passIntegers
передаст два целых аргумента простому скрипту Cadence, который вернет нам их сумму.const passIntegers = async () => {
// Here we will store the code we want to execute.
// We can inline it into the object we pass to "query" method,
// but it feels cleaner this way
const cadence = `
pub fun main(a: Int, b: Int): Int{
return a + b
}
`;
// Even though both of the arguments are numbers, we need to pass them as strings representation
const a = (5).toString();
const b = (12).toString();
const args = (arg, t) => [arg(a, t.Int), arg(b, t.Int)];
// "query" will pass Cadence code and arguments 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 result = await query({ cadence, args });
console.log({ result }); //
};
Шаг 4 - Передача нескольких различных типов
passMultipleDifferentTypes
передаст аргументы String, Bool, UFix64 및 주소.const passMultipleDifferentTypes = async () => {
const cadence = `
pub fun main(a: String, b: Bool, c: UFix64, d: Address): Address{
return d
}
`;
const a = "Hello";
const b = true;
// All numeric values should be passed as strings, remember? :)
const c = "42.0";
// Address should be passed as string value as well
const d = "0x01";
// Types should always mirror argument types defined in script
const args = (arg, t) => [arg(a, t.String), arg(b, t.Bool), arg(c, t.UFix64), arg(d, t.Address)];
const result = await query({ cadence, args });
console.log({ result }); //
};
Шаг 5 - Передача 배열
메서드
passArray
는 어레이의 배열과 데이터를 저장하는 데 사용됩니다.const passArray = async () => {
const cadence = `
pub fun main(a: [String]): String{
return a[1]
}
`;
const a = ["Hello", "Cadence"];
// Type of the argument is composed of t.Array and t.String
const args = (arg, t) => [arg(a, t.Array(t.String))];
const result = await query({ cadence, args });
console.log({ result }); //
};
Шаг 6 - Передача Dictionary
Метод
passDictionary
передает Dictionary в качестве аргумента, а затем возвращает значение одного из полей. Ключи указанного словаря будут иметь тип String
, а значения - тип Int
.const passDictionary = async () => {
// In this example we will pass to Cadence Dictionary as argument
// keys will be of type "String" and values of type "Int"
const cadence = `
pub fun main(a: {String: Int}): Int?{
return a["amount"]
}
`;
// Dictionaries should be represented as array of key/value pairs of respective types
// Note that we shall pass numeric value as string here
const a = [{ key: "amount", value: "42" }];
// Dictionary type is composed out of t.Dictionary, t.String and t.Int for our case
const args = (arg, t) => [
arg(a, t.Dictionary({ key: t.String, value: t.Int }))
];
const result = await query({ cadence, args });
console.log({ result }); //
};
Шаг 7 - Передача сложного аргумента
passComplex
покажет, как передать аргумента의 딕셔너리 배열. Концептуально это смесь 배열과 사전.const passComplex = async () => {
// In this example we will pass an Array of Dictionaries as argument
// Keys will be of type "String" and values of type "Int"
const cadence = `
pub fun main(a: [{String: Int}]): Int?{
return a[0]["amount"]
}
`;
// Array of Dictionaries should be represented as array of arrays of key/value pairs of respective types
// Note that we shall pass numeric value as string here
const a = [[{ key: "amount", value: "1337" }]];
// Dictionary type is composed out of t.Dictionary, t.String and t.Int for our case
const args = (arg, t) => [
arg(a, t.Array(t.Dictionary({ key: t.String, value: t.Int })))
];
const result = await query({ cadence, args });
console.log({ result });
};
Заключение
Давайте добавим IIFE в конец filela и заполним его методами, которые мы только что разобрали:
(async () => {
console.clear();
await passIntegers();
await passMultipleDifferentTypes();
await passArray();
await passDictionary();
await passComplex();
})();
Когда все разрешится, в увидите следующее:
{result: "17"}
{result: "0x0000000000000001"}
{result: "Cadence"}
{result: "42"}
{result: "1337"}
Практикуйтесь в передаче различных типов аргументов, поскольку в будущем это станет для вас обычным делом.
Полный код можно найти на Codesandbox здесь:
https://codesandbox.io/s/dev-to-fcl-script-arguments-knpuel
예를 들어! 👋
정보 조사
Другие источники, которые могут быть вам полезны:
Reference
이 문제에 관하여(흐름에 따라 | Изучаем FCL — 2. Передавайте аргументы в скрипты), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/egormajj/sozdaiem-na-flow-izuchitie-fcl-2-pieriedavaitie-arghumienty-v-skripty-2ld2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)