# [Ride v5] Версия 5 Стандартной библиотеки
⚠️ Для разработки приложений рекомендуем использовать версию 6 Стандартной библиотеки.
Версия 5 Стандартной библиотеки доступна с момента с активации фичи № 16 “Ride V5, dApp-to-dApp invocations”.
# Вызов dApp из dApp
Вызываемая функция dApp-скрипта может выполнять вложенные вызовы. Из dApp можно вызвать вызываемую функцию другого dApp или того же самого dApp, в том числе функция может вызвать сама себя. Последующие вычисления выполняются с учетом действий скрипта вызванной функции (как если бы они были применены к состоянию блокчейна). Все функции выполняются в рамках одной транзакции вызова скрипта. Общая сложность скриптов ограничена. Подробнее о вызове dApp из dApp
Изменения в Ride:
- Добавлены функции для вызова dApp из dApp:
- Добавлены нетерпеливые переменные, которые вычисляются прежде следующего выражения, чтобы гарантировать порядок выполнения и применения действий скрипта вызываемых функций.
- Изменена структура Invocation: в случае вызова dApp из dApp она содержит адрес и публичный ключ как отправителя транзакции вызова скрипта, так и аккаунта dApp, который вызывает функцию.
- Изменен формат результата вызываемой функции: добавлено возвращаемое значение.
# Лизинг и отмена лизинга как действия скрипта
Добавлены действия скрипта, которые может выполнять вызываемая функция:
- Lease — передает WAVES в лизинг.
- LeaseCancel — прекращает лизинг.
C помощью действий Lease
и LeaseCancel
можно изменить сумму лизинга, в частности, извлечь часть средств из лизинга. Если в одном вызове скрипта отменить лизинг на большую сумму и создать новый лизинг на меньшую сумму с тем же получателем, генерирующий баланс получателя уменьшится на разницу. Если же отправить две отдельные транзакции — транзакцию отмены лизинга и транзакцию лизинга, они могут попасть в разные блоки, и тогда генерирующий баланс сразу же уменьшится на сумму отмененного лизинга, а увеличится на сумму нового лизинга только через 1000 блоков.
Добавлена также встроенная функция calculateLeaseId для получения ID лизинга, сформированного структурой Lease
.
# Большие целые числа
Добавлен тип данных BigInt размером 64 байта (512 бит) и поддерживающие его функции:
- fraction(BigInt, BigInt, BigInt): BigInt
- fraction(BigInt, BigInt, BigInt, Union): BigInt
- log(BigInt, Int, BigInt, Int, Int, Union): BigInt
- max(List[BigInt]): BigInt
- median(List[BigInt]): BigInt
- min(List[BigInt]): BigInt
- pow(BigInt, Int, BigInt, Int, Int, Union): BigInt
- parseBigInt(String): BigInt|Unit
- parseBigIntValue(String): BigInt
- toBigInt(ByteVector): BigInt
- toBigInt(ByteVector, Int, Int): BigInt
- toBigInt(Int): BigInt
- toBytes(BigInt): ByteVector
- toInt(BigInt): Int
- toString(BigInt): String
# Разное
При выполнении dApp-скрипта приложенные к вызову платежи считаются уже зачисленными на баланс dApp (в отличие от версий 4 и 3, где платежи не отражаются на балансе до окончания выполнения скрипта).
Добавлены встроенные функции:
- isDataStorageUntouched — проверяет, что хранилище данных указанного аккаунта никогда не содержало записей.
- scriptHash — возвращает BLAKE2b-256-хеш скрипта, установленного на аккаунте.
- fraction(Int, Int, Int, Union): BigInt — умножает два целых числа и делит на третье без переполнения, применяя указанный метод округления.
Добавлены встроенные функции хранилища данных аккаунта, позволяющие dApp-скрипту читать записи из собственного хранилища данных:
getBinary(key: String): ByteVector|Unit
getBinaryValue(key: String): ByteVector
getBoolean(key: String): Boolean|Unit
getBooleanValue(key: String): Boolean
getInteger(key: String): Int|Unit
getIntegerValue(key: String): Int
getString(key: String): String|Unit
getStringValue(key: String): String
Максимальная сложность вызываемой функции скрипта dApp изменена на 10 000.