# Скрипт аккаунта
Скрипт аккаунта позволяет верифицировать транзакции и ордера, отправляемые от имени аккаунта, то есть разрешать или запрещать транзакцию или ордер в зависимости от выполнения заданных условий.
Аккаунт с прикрепленным к нему скриптом называется смарт-аккаунтом. О создании и использовании смарт-аккаунтов читайте в разделе Смарт-аккаунт.
# Формат скрипта аккаунта
Код скрипта состоит из следующих частей:
# Директивы
Скрипт аккаунта начинается с директив:
{-# STDLIB_VERSION 8 #-}
{-# CONTENT_TYPE EXPRESSION #-}
{-# SCRIPT_TYPE ACCOUNT #-}
Приведенные директивы сообщают компилятору, что:
- в скрипте используется Стандартная библиотека версии 8;
- скрипт содержит логическое выражение;
- скрипт будет привязан к аккаунту (не к ассету).
# Вспомогательные определения
После директив можно объявить вспомогательные переменные и функции.
Пример:
let someConstant = 42
func doSomething() = {
height + someConstant
}
# Логическое выражение
Выражение проверяет отправляемые от имени аккаунта транзакции и ордера на соответствие заданным условиям. Если условия не соблюдаются, транзакция (ордер) будет отклонена. Возможными результатами вычисления выражения являются:
true
— транзакция/ордер разрешена,false
— транзакция/ордер отклонена,- ошибка — транзакция/ордер отклонена.
С помощью оператора match ... case можно настроить разные условия в зависимости от типа транзакции/ордера. Например, следующее выражение запрещает отправку ордеров и изменение скрипта аккаунта, а остальные транзакции разрешает при условии, что массив подтверждений (proofs
) содержит корректную подпись аккаунта на позиции 0:
match tx {
case t : Order|SetScriptTransaction => false
case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}
# Данные, доступные скрипту аккаунта
Для проверок могут быть использованы следующие параметры:
Поля текущей верифицируемой транзакции/ордера, в том числе подтверждения (
proofs
). Встроенная переменнаяtx
содержит эту транзакцию или ордер. Набор полей зависит от типа транзакции/ордера, см. разделы Структуры транзакций, Order.Данные блокчейна: текущая высота, балансы аккаунтов, записи в хранилищах данных аккаунтов, параметры токенов и др.
⚠️ Данные блокчейна доступны только при проверке транзакции и недоступны при проверке ордера (
case t: Order
).
# Примеры
Примеры скриптов аккаунтов можно найти:
- в разделе Смарт-аккаунт;
- в Waves IDE: Library → smart-accounts.