Вызываемая функция

Вызываемая функцияфункция dApp-скрипта с аннотацией @Callable.

У dApp-скрипта может быть несколько вызываемых функций.

Вызываемую функцию у dApp можно вызвать с помощью транзакции вызова скрипта.

Для вызова @Callable функции к транзакции вызова скрипта может быть приложен платеж в пользу dApp. Начиная с четвертой версии языка Ride, может быть приложено до двух платежей.

Примерами действий, которые может выполнять вызываемая функция, являются

  • добавление, изменение и удаление записей в хранилище данных аккаунта. В рамках транзакции вызова скрипта может добавлено/изменено/удалено до 100 записей в хранилище данных аккаунта dApp.
  • переводы токенов. dApp может выполнить до 10 переводов токенов в рамках транзакции вызова скрипта. Токены могут быть переведены как с баланса dApp, так из платежей, приложенных к транзакции вызова скрипта.

Начиная с четвертой версией языка Ride, перечисленные выше действия включают

  • выпуск токенов.
  • перевыпуск токенов.
  • сжигание токенов.

При этом в четвертой версии языка Ride в рамках одной транзакции вызова скрипта общее количество таких действий, как перевод/выпуск/перевыпуск/сжигание токена не должно превышать 10 включительно.

Пример для стандартной библиотеки версии 3

@Callable(inv)
func rate(name: String, rating: Int) = {
    WriteSet([DataEntry(inv.caller.toString(), name + rating.toString()])
}

[!WARNING] Стандартная библиотека версии 4 доступна начиная с версии ноды 1.2.0 после активации функциональности "Ride V4 and multiple attached payments for Invoke Script Transaction" (№ 16). См. протокол активации.

Пример для стандартной библиотеки версии 4

[!INFO] Начиная с 4 версии Стандартной библиотеки в качестве аргумента аннотируемой функции может передаваться список значений, относящихся к примитивным типам данных. Максимальный размер списка - до 1000 элементов включительно.

{-# STDLIB_VERSION 4 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}

@Callable(i)
func f(args: List[String]) = [
    StringEntry("entry1", args[0]),
    StringEntry("entry1", args[1])
]

Пример 1

{-# STDLIB_VERSION 4 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}

@Callable(i)
func f(args: List[String]) = [
    StringEntry("entry1", args[0]),
    StringEntry("entry1", args[1])
]

Пример 2

{-# STDLIB_VERSION 4 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}

@Callable(i)
func f(a: String, args: List[String]) = {
    let s = size(args)
    if s == 1 then
        BooleanEntry("result", a == args[0])
    else s > 1 then
        BooleanEntry ("result", a == args[1])
    else throw("args is empty")
}

results matching ""

    No results matching ""