# Транзакция вызова скрипта
Транзакция вызова скрипта выполняет вызов функции dApp. Подробнее о dApp и о вызове скрипта
Кроме адреса dApp, имени вызываемой функции и аргументов, транзакция вызова скрипта может содержать платежи в пользу dApp. Максимальное количество платежей — 10. (До активации фичи № 16 “Ride V5, dApp-to-dApp invocations” количество платежей не превышало 2. До активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions” количество платежей не превышало 1.)
# Комиссия за транзакцию
Комиссия за транзакцию вызова скрипта может быть указана в спонсорском ассете, см. раздел Спонсирование комиссии.
Минимальная комиссия в WAVES за транзакцию вызова скрипта рассчитывается по формуле:
Fee
= 0,005 + S
+ 1 × I
- Если отправитель транзакции — dApp или смарт-аккаунт, а сложность скрипта аккаунта или функции-верификатора dApp-скрипта больше порога сложности отправителя, то
S
= 0,004, в ином случаеS
= 0. - Транзакция вызова скрипта может выполнить выпуск токенов.
I
(issue) — количество выпущенных токенов, не являющихся NFT.
До активации фичи № 16 “Ride V5, dApp-to-dApp invocations”
- Минимальная комиссия за транзакцию вызова скрипта увеличивалась на 0,004 WAVES каждое выполнение скриптов ассетов в платежах и действиях скрипта.
- Дополнительная комиссия 0,004 WAVES за отправку транзакции со смарт-аккаунта или dApp требовалась независимо от сложности скрипта аккаунта или наличия и сложности функции-верификатора скрипта dApp.)
# Суммарная сложность
Вызываемая функция dApp-скрипта может, в свою очередь, вызывать функцию другого dApp или того же самого dApp, в том числе функция может вызвать сама себя. Все вызванные функции выполняются в рамках одной транзакции вызова скрипта. Подробнее о вызове dApp из dApp
Максимальная суммарная сложность всех вызываемых функций и скриптов ассетов в одной транзакции зависит от версии Стандартной библиотеки dApp-скрипта, который вызван первым:
- Если первый dApp-скрипт использует версию 6, 7 или 8, то суммарная сложность — не более 52 000.
- Если первый dApp-скрипт использует версию 5, то суммарная сложность — не более 26 000. Если далее вызываются функции скриптов версии 6 и выше, их сложность может превышать 10 000 и ограничена только суммарной сложностью транзакции.
Сложность скрипта отправителя не учитывается в этом лимите.
Возможность вызова dApp из dApp появилась с момента активации фичи № 16 “Ride V5, dApp-to-dApp invocations”. До активации фичи № 16 суммарная сложность скриптов не была ограничена.
# Размер транзакции
- Для транзакции версии 2 максимальный размер
InvokeScriptTransactionData
(см. раздел Бинарный формат транзакции вызова скрипта) — 5120 байт. - Для транзакции версии 1 максимальный размер транзакции, включая подтверждения, — 5120 байт.
# JSON-представление
{
"type": 16,
"id": "6iYsfcVrty9piDkMtHEJ1CzQdbruGNaXUBSGmSpFuYN7",
"sender": "3Mw48B85LvkBUhhDDmUvLhF9koAzfsPekDb",
"senderPublicKey": "BvJEWY79uQEFetuyiZAF5U4yjPioMj9J6ZrF9uTNfe3E",
"fee": 500000,
"feeAssetId": null,
"timestamp": 1640104777935,
"proofs": [
"2kQiPyBGn9uTnD7b4FNvtrNAGTpxPRVDbE4tQrJWuoNjXVs6TenCuYqSyBd4QeBQ7Ng2Fi5G9PdmiNBDXUz3wWqf"
],
"version": 1,
"dApp": "3N28o4ZDhPK77QFFKoKBnN3uNeoaNSNXzXm",
"payment": [],
"call": {
"function": "foo",
"args": [
{
"type": "list",
"value": [
{
"type": "string",
"value": "theta"
},
{
"type": "string",
"value": "iota"
},
{
"type": "string",
"value": "kappa"
}
]
}
]
},
"height": 1844277,
"applicationStatus": "succeeded",
"spentComplexity": 57,
"stateChanges": {
"data": [
{
"key": "3Mw48B85LvkBUhhDDmUvLhF9koAzfsPekDb",
"type": "string",
"value": "thetaiotakappa"
}
],
"transfers": [],
"issues": [],
"reissues": [],
"burns": [],
"sponsorFees": [],
"leases": [],
"leaseCancels": [],
"invokes": []
}
}
Поле | Описание |
---|---|
call.function | Имя вызываемой функции. До 255 байт (1 символ может занимать до 4 байт) |
call.args.type | Тип аргумента: - binary - boolean - integer - string - list (доступно после активации фичи № 15) |
call.args.value | Значение аргумента. Бинарное значение должно быть в кодировке base64 |
dApp | Адрес dApp в кодировке base58 или псевдоним адреса c префиксом alias:<байт_сети>: , например alias:T:merry (см. Байт сети) |
payment.amount | Количество токена в платеже, в атомарных единицах |
payment.assetId | ID токена в платеже в кодировке base58. null означает, что платеж в WAVES |
spentComplexity | spentComplexity |
stateChanges | Действия скрипта, выполненные вызываемой функцией, и результаты вызовов dApp из dApp |
Если поле
call
не указано, в dApp вызывается функция по умолчанию.
Поля spentComplexity
и stateChanges
не нужно заполнять при отправке транзакции: их добавляет нода при предоставлении данных о транзакции через REST API.
Описание полей, общих для всех типов транзакций, представлено в разделе JSON-представление транзакции.
# Бинарный формат
См. раздел Бинарный формат транзакции вызова скрипта.
# Структура Ride
Для операций с транзакцией в смарт-контрактах используется структура InvokeScriptTransaction.