# [Ride v4 и v3] Invocation
⚠️ Это документация Стандартной библиотеки версии 4 и 3. Рекомендуем использовать версию 6. Перейти к версии 6
Структура содержит поля транзакции вызова скрипта, которые может использовать вызываемая функция.
# Конструктор
В Стандартной библиотеке версии 3:
Invocation(caller: Address, callerPublicKey: ByteVector, payment: AttachedPayment|Unit, transactionId: ByteVector, fee: Int, feeAssetId: ByteVector|Unit)
В Стандартной библиотеке версии 4:
Invocation(caller: Address, callerPublicKey: ByteVector, payments: List[AttachedPayment], transactionId: ByteVector, fee: Int, feeAssetId: ByteVector|Unit)
# Поля
# | Название | Тип данных | Описание |
---|---|---|---|
1 | caller | Address | Адрес аккаунта, который отправил транзакцию |
2 | callerPublicKey | ByteVector | Открытый ключ аккаунта, который отправил транзакцию |
3 | payment | AttachedPayment|Unit | Приложенный платеж. ⚠️ Поле удалено в Стандартной библиотеке версии 4 |
3 | payments | List[AttachedPayment] | Приложенные платежи. Поле добавлено в Стандартной библиотеке версии 4 |
4 | transactionId | ByteVector | ID транзакции |
5 | fee | Int | Комиссия за транзакцию |
6 | feeAssetId | ByteVector|Unit | Токен комиссии за отправку транзакции |
# Пример: обработка платежей (для версии 4)
Следующая функция проверяет, что первый платеж в транзакции вызова скрипта составляет не менее 1 WAVES или 5 в указанном ассете.
{-# STDLIB_VERSION 4 #-}
{-# 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 [] else throw("Wrong payment amount or asset")
}