# [Ride v5] Invocation
⚠️ Это документация Стандартной библиотеки версии 5. Рекомендуем использовать версию 6. Перейти к версии 6
Структура содержит поля вызова, которые может использовать вызываемая функция.
# Конструктор
Invocation(caller: Address, callerPublicKey: ByteVector, originCaller: Address, originCallerPublicKey: ByteVector, payments: List[AttachedPayment], transactionId: ByteVector, fee: Int, feeAssetId: ByteVector|Unit)
# Поля
Значения полей отличаются в зависимости от того, каким образом вызвана функция.
Если вызываемая функция вызвана с помощью транзакции вызова скрипта:
# | Название | Тип данных | Описание |
---|---|---|---|
1 | caller | Address | Адрес аккаунта, который отправил транзакцию вызова скрипта |
2 | callerPublicKey | ByteVector | Открытый ключ аккаунта, который отправил транзакцию вызова скрипта |
3 | originCaller | Address | Дублирует поле caller |
4 | originCallerPublicKey | ByteVector | Дублирует поле callerPublicKey |
5 | payments | List[AttachedPayment] | Платежи, указанные в транзакции |
6 | transactionId | ByteVector | ID транзакции вызова скрипта |
7 | fee | Int | Комиссия за транзакцию |
8 | feeAssetId | ByteVector|Unit | ID токена, в котором указана комиссия. Значение unit соответствует WAVES |
Если вызываемая функция вызвана с помощью функции invoke
или reentrantInvoke
(см. раздел Вызов dApp из dApp):
# | Название | Тип данных | Описание |
---|---|---|---|
1 | caller | Address | Адрес dApp, который вызвал функцию |
2 | callerPublicKey | ByteVector | Открытый ключ аккаунта dApp, который вызвал функцию |
3 | originCaller | Address | Адрес аккаунта, который отправил транзакцию вызова скрипта |
4 | originCallerPublicKey | ByteVector | Открытый ключ аккаунта, который отправил транзакцию вызова скрипта |
5 | payments | List[AttachedPayment] | Платежи, указанные в функции invoke или reentrantInvoke |
6 | transactionId | ByteVector | ID транзакции вызова скрипта |
7 | fee | Int | Комиссия за транзакцию вызова скрипта |
8 | feeAssetId | ByteVector|Unit | ID токена, в котором указана комиссия. Значение unit соответствует WAVES |
Значения
originCaller
,originCallerPublicKey
,transactionId
,fee
,feeAssetId
одни и те же для всех вызовов dApp из dApp, выполняемых в рамках одной транзакции.
# Пример: обработка платежей
Следующая функция проверяет, что первый платеж в транзакции вызова скрипта составляет не менее 1 WAVES или 5 в указанном ассете.
{-# STDLIB_VERSION 5 #-}
{-# CONTENT_TYPE DAPP #-}
{-# SCRIPT_TYPE ACCOUNT #-}
func isPaymentOk(i: Invocation) = {
let acceptableAssetId = base58'3JmaWyFqWo8YSA8x3DXCBUW7veesxacvKx19dMv7wTMg'
if (size(i.payments) == 0) then {
throw("Payment not attached")
} else {
let p = i.payments[0]
match p.assetId {
case assetId: ByteVector => assetId == acceptableAssetId && p.amount >= 500000000
case _ => p.amount >= 100000000
}
}
}
@Callable(i)
func foo() = {
if isPaymentOk(i) then ([],unit) else throw("Wrong payment amount or asset")
}