# Подпись и подтверждения транзакции (proofs
)
Массив подтверждений (proofs
) может содержать подпись транзакции, несколько подписей или другие данные.
Подтверждения используются для верификации транзакции. Верификация — это проверка, что отправка транзакции разрешена аккаунтом отправителя:
- В случае обычного аккаунта (без скрипта) выполняется проверка подписи отправителя, см. Подпись транзакции.
- В случае dApp или смарт-аккаунта выполняется проверка транзакции скриптом, установленным на аккаунте, которая может использовать данные из массива подтверждений, см. подраздел Подтверждения: проверка скриптом.
В транзакцию можно добавить до 8 подтверждений. Размер каждого подтверждения — до 64 байт.
В ранних версиях некоторых типов транзакций вместо массива
proofs
используется полеsignature
, содержащее подпись транзакции.
# Подпись транзакции
Если отправитель транзакции — обычный аккаунт, на котором не установлен скрипт, то массив подтверждений должен содержать цифровую подпись отправителя.
Отправитель транзакции генерирует цифровую подпись, используя закрытый ключ аккаунта. В Waves используется подпись Curve25519 (ED25519 с ключами X25519). Правила генерации подписи представлены в разделе Cryptographic practical details. См. также практические рекомендации в подразделе Как подписать и отправить транзакцию.
Кроме подписи, в транзакции указан также открытый ключ отправителя, с помощью которого нода (и кто угодно) может проверить целостность данных транзакции и достоверность подписи — то есть убедиться, что подпись транзакции соответствует открытому ключу.
# Подтверждения: проверка скриптом
Если отправитель транзакции — dApp или смарт-аккаунт, то вместо проверки подписи выполняется верификация транзакции скриптом, установленным на аккаунте. Скрипт разрешает или отклоняет транзакцию в зависимости от того, соответствует ли она заданным условиям. В частности, скрипт может содержать условия на данные в массиве подтверждений.
Пример: смарт-аккаунт с мультиподписью, на котором три пользователя-совладельца хранят общие средства. Скрипт аккаунта разрешает транзакцию от имени этого аккаунта, если массив подтверждений содержит корректные подписи хотя бы двух из трех аккаунтов-совладельцев. Код скрипта можно найти в Waves IDE: Library → smart-accounts → Multisig.ride.