# Список как аргумент вызываемой функции
# Условия
- dApp использует Стандартную библиотеку версии 4 и выше.
- Элементы списка относятся к одному из следующих типов:
Вложенные списки не допускаются в качестве аргументов вызываемой функции (в отличие от функций без аннотации).
# Код Ride
Аргумент-список указывается в виде
arg_name: List[elem_type]
Пример скрипта:
{-# STDLIB_VERSION 8 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
@Callable(i)
func join(strings: List[String]) = {
[
StringEntry(toBase58String(i.caller.bytes), strings[0] + "_" + strings[1] + "_" + strings[2])
]
}
# Вызов скрипта
Создать и отправить транзакцию вызова скрипта можно с помощью клиентских библиотек.
# JavaScript
const { invokeScript, broadcast } = require('@waves/waves-transactions');
// Нода Testnet
// Для Mainnet можно использовать значение по умолчанию
const nodeUrl = 'https://nodes-testnet.wavesnodes.com';
const seed = 'insert your seed here';
// Параметры вызова скрипта
const invParams = {
dApp: "3MyptFjRHW4CTPNQKdF8mu3izsZEPEdzm8s",
payment: [],
call: {
function: 'join',
args: [
{
type: 'list',
value: [
{ type: 'string', value: 'alpha' },
{ type: 'string', value: 'beta' },
{ type: 'string', value: 'gamma' }
]
}
]
},
chainId: 'T' // Для Mainnet можно указать значение 'W' или опустить
};
// Создание и подписание транзакции вызова скрипта
const invokeTx = invokeScript(invParams, seed);
broadcast(invokeTx,nodeUrl).then(resp => console.log(resp));
console.log('Tx ID: ' + invokeTx.id);
💡 Чтобы вызывать скрипт от имени разных пользователей, используйте библиотеку Signer.
# Python
import pywaves as pw
// Нода Testnet; для Mainnet можно опустить
pw.setNode('https://nodes-testnet.wavesnodes.com/', chain='testnet')
my_address = pw.Address(seed = 'insert your seed here')
my_address.invokeScript(
'3MyptFjRHW4CTPNQKdF8mu3izsZEPEdzm8s',
'join',
[{"type": "list", "value": [
{ "type": "string", "value": "alpha" },
{ "type": "string", "value": "beta" },
{ "type": "string", "value": "gamma" }
]}], [])