waves_logo Docs
  • O Ride
    O Ride
  • Начало работы
    Начало работы
  • Основы синтаксиса
    • Директивы
      Директивы
    • Определение
      Определение
    • Выражение
      Выражение
    • Переменная
      Переменная
    • Функция
      Функция
    • Исключение
      Исключение
    • Комментарий
      Комментарий
    Основы синтаксиса
  • Типы скриптов
    • dApp-скрипт
      • Аннотации
        Аннотации
      • Вызываемая функция
        Вызываемая функция
      • Функция-верификатор
        Функция-верификатор
      dApp-скрипт
    • Скрипт аккаунта
      Скрипт аккаунта
    • Скрипт ассета
      Скрипт ассета
    Типы скриптов
  • Стандартная библиотека
    Стандартная библиотека
  • Типы данных
    • Any
      Any
    • BigInt
      BigInt
    • Boolean
      Boolean
    • ByteVector
      ByteVector
    • Int
      Int
    • String
      String
    • Unit
      Unit
    • List
      List
    • Кортеж
      Кортеж
    • Объединение
      Объединение
    Типы данных
  • Структуры
    • Действия скрипта
      • BinaryEntry
        BinaryEntry
      • BooleanEntry
        BooleanEntry
      • Burn
        Burn
      • DeleteEntry
        DeleteEntry
      • IntegerEntry
        IntegerEntry
      • Issue
        Issue
      • Lease
        Lease
      • LeaseCancel
        LeaseCancel
      • Reissue
        Reissue
      • ScriptTransfer
        ScriptTransfer
      • SponsorFee
        SponsorFee
      • StringEntry
        StringEntry
      Действия скрипта
    • Общие структуры
      • Address
        Address
      • Alias
        Alias
      • Asset
        Asset
      • AssetPair
        AssetPair
      • AttachedPayment
        AttachedPayment
      • BalanceDetails
        BalanceDetails
      • BlockInfo
        BlockInfo
      • Invocation
        Invocation
      • Order
        Order
      • Transfer
        Transfer
      Общие структуры
    • Структуры транзакций
      • BurnTransaction
        BurnTransaction
      • CreateAliasTransaction
        CreateAliasTransaction
      • DataTransaction
        DataTransaction
      • ExchangeTransaction
        ExchangeTransaction
      • GenesisTransaction
        GenesisTransaction
      • InvokeScriptTransaction
        InvokeScriptTransaction
      • IssueTransaction
        IssueTransaction
      • LeaseCancelTransaction
        LeaseCancelTransaction
      • LeaseTransaction
        LeaseTransaction
      • MassTransferTransaction
        MassTransferTransaction
      • ReissueTransaction
        ReissueTransaction
      • SetAssetScriptTransaction
        SetAssetScriptTransaction
      • SetScriptTransaction
        SetScriptTransaction
      • SponsorFeeTransaction
        SponsorFeeTransaction
      • TransferTransaction
        TransferTransaction
      • UpdateAssetInfoTransaction
        UpdateAssetInfoTransaction
      Структуры транзакций
    Структуры
  • Встроенные переменные
    Встроенные переменные
  • Встроенные функции
    • Математические функции
      Математические функции
    • Функции блокчейна
      Функции блокчейна
    • Функции верификации
      Функции верификации
    • Функции вызова dApp из dApp
      Функции вызова dApp из dApp
    • Функции декодирования
      Функции декодирования
    • Функции исключения
      Функции исключения
    • Функции кодирования
      Функции кодирования
    • Функции конвертации
      Функции конвертации
    • Функции массива байтов
      Функции массива байтов
    • Функции объединения
      Функции объединения
    • Функции списка
      Функции списка
    • Функции строки
      Функции строки
    • Функции транзакции данных
      Функции транзакции данных
    • Функции хеширования
      Функции хеширования
    • Функции хранилища данных аккаунта
      Функции хранилища данных аккаунта
    Встроенные функции
  • Операторы
    Операторы
  • match-case: сопоставление с шаблоном
    match-case: сопоставление с шаблоном
  • Итерации: FOLD<N>
    Итерации: FOLD<N>
  • Вызов dApp из dApp
    Вызов dApp из dApp
  • Ограничения
    • Сложность
      Сложность
    • Вес данных
      Вес данных
    Ограничения
  • Предыдущие версии
    • Версия 5
      • Вызываемая функция
        Вызываемая функция
      • Типы данных
        • Any
          Any
        • BigInt
          BigInt
        • Boolean
          Boolean
        • ByteVector
          ByteVector
        • Int
          Int
        • String
          String
        • Unit
          Unit
        • List
          List
        • Кортеж
          Кортеж
        • Объединение
          Объединение
        Типы данных
      • Структуры
        • Действия скрипта
          • BinaryEntry
            BinaryEntry
          • BooleanEntry
            BooleanEntry
          • Burn
            Burn
          • DeleteEntry
            DeleteEntry
          • IntegerEntry
            IntegerEntry
          • Issue
            Issue
          • Lease
            Lease
          • LeaseCancel
            LeaseCancel
          • Reissue
            Reissue
          • ScriptTransfer
            ScriptTransfer
          • SponsorFee
            SponsorFee
          • StringEntry
            StringEntry
          Действия скрипта
        • Общие структуры
          • Address
            Address
          • Alias
            Alias
          • Asset
            Asset
          • AssetPair
            AssetPair
          • AttachedPayment
            AttachedPayment
          • BalanceDetails
            BalanceDetails
          • BlockInfo
            BlockInfo
          • Invocation
            Invocation
          • Order
            Order
          • Transfer
            Transfer
          Общие структуры
        • Структуры транзакций
          • BurnTransaction
            BurnTransaction
          • CreateAliasTransaction
            CreateAliasTransaction
          • DataTransaction
            DataTransaction
          • ExchangeTransaction
            ExchangeTransaction
          • GenesisTransaction
            GenesisTransaction
          • InvokeScriptTransaction
            InvokeScriptTransaction
          • IssueTransaction
            IssueTransaction
          • LeaseCancelTransaction
            LeaseCancelTransaction
          • LeaseTransaction
            LeaseTransaction
          • MassTransferTransaction
            MassTransferTransaction
          • ReissueTransaction
            ReissueTransaction
          • SetAssetScriptTransaction
            SetAssetScriptTransaction
          • SetScriptTransaction
            SetScriptTransaction
          • SponsorFeeTransaction
            SponsorFeeTransaction
          • TransferTransaction
            TransferTransaction
          • UpdateAssetInfoTransaction
            UpdateAssetInfoTransaction
          Структуры транзакций
        Структуры
      • Встроенные переменные
        Встроенные переменные
      • Встроенные функции
        • Математические функции
          Математические функции
        • Функции блокчейна
          Функции блокчейна
        • Функции верификации
          Функции верификации
        • Функции вызова dApp из dApp
          Функции вызова dApp из dApp
        • Функции декодирования
          Функции декодирования
        • Функции исключения
          Функции исключения
        • Функции кодирования
          Функции кодирования
        • Функции конвертации
          Функции конвертации
        • Функции массива байтов
          Функции массива байтов
        • Функции объединения
          Функции объединения
        • Функции списка
          Функции списка
        • Функции строки
          Функции строки
        • Функции транзакции данных
          Функции транзакции данных
        • Функции хеширования
          Функции хеширования
        • Функции хранилища данных аккаунта
          Функции хранилища данных аккаунта
        Встроенные функции
      • Operators
        Operators
      • Limitations
        • Вес данных
          Вес данных
        Limitations
      Версия 5
    • Версии 4 и 3
      • Вызываемая функция
        Вызываемая функция
      • Типы данных
        • Boolean
          Boolean
        • ByteVector
          ByteVector
        • Int
          Int
        • String
          String
        • Unit
          Unit
        • List
          List
        • Кортеж
          Кортеж
        • Объединение
          Объединение
        Типы данных
      • Структуры
        • Действия скрипта
          • BinaryEntry (v4)
            BinaryEntry (v4)
          • BooleanEntry (v4)
            BooleanEntry (v4)
          • Burn (v4)
            Burn (v4)
          • DataEntry (v3)
            DataEntry (v3)
          • DeleteEntry (v4)
            DeleteEntry (v4)
          • IntegerEntry (v4)
            IntegerEntry (v4)
          • Issue (v4)
            Issue (v4)
          • Reissue (v4)
            Reissue (v4)
          • ScriptTransfer (v3 and v4)
            ScriptTransfer (v3 and v4)
          • SponsorFee (v4)
            SponsorFee (v4)
          • StringEntry (v4)
            StringEntry (v4)
          Действия скрипта
        • Результаты скрипта (v3)
          • ScriptResult
            ScriptResult
          • TransferSet
            TransferSet
          • WriteSet
            WriteSet
          Результаты скрипта (v3)
        • Общие структуры
          • Address
            Address
          • Alias
            Alias
          • Asset
            Asset
          • AssetPair
            AssetPair
          • AttachedPayment
            AttachedPayment
          • BalanceDetails
            BalanceDetails
          • BlockInfo
            BlockInfo
          • Invocation
            Invocation
          • Order
            Order
          • Transfer
            Transfer
          Общие структуры
        • Структуры транзакций
          • BurnTransaction
            BurnTransaction
          • CreateAliasTransaction
            CreateAliasTransaction
          • DataTransaction
            DataTransaction
          • ExchangeTransaction
            ExchangeTransaction
          • GenesisTransaction
            GenesisTransaction
          • InvokeScriptTransaction
            InvokeScriptTransaction
          • IssueTransaction
            IssueTransaction
          • LeaseCancelTransaction
            LeaseCancelTransaction
          • LeaseTransaction
            LeaseTransaction
          • MassTransferTransaction
            MassTransferTransaction
          • ReissueTransaction
            ReissueTransaction
          • SetAssetScriptTransaction
            SetAssetScriptTransaction
          • SetScriptTransaction
            SetScriptTransaction
          • [en] SponsorFeeTransaction
            [en] SponsorFeeTransaction
          • TransferTransaction
            TransferTransaction
          • UpdateAssetInfoTransaction
            UpdateAssetInfoTransaction
          Структуры транзакций
        Структуры
      • Встроенные переменные
        Встроенные переменные
      • Встроенные функции
        • Функции хранилища данных аккаунта
          Функции хранилища данных аккаунта
        • Функции блокчейна
          Функции блокчейна
        • Функции массива байтов
          Функции массива байтов
        • Функции конвертации
          Функции конвертации
        • Функции транзакции данных
          Функции транзакции данных
        • Функции декодирования
          Функции декодирования
        • Функции кодирования
          Функции кодирования
        • Функции исключения
          Функции исключения
        • Функции хеширования
          Функции хеширования
        • Функции списка
          Функции списка
        • Математические функции
          Математические функции
        • Функции строки
          Функции строки
        • Функции объединения
          Функции объединения
        • Функции верификации
          Функции верификации
        Встроенные функции
      • Операторы
        Операторы
      • Ограничения
        • Вес данных
          Вес данных
        Ограничения
      Версии 4 и 3
    Предыдущие версии
  • Подключение библиотек
    Подключение библиотек
  • Компоненты Ride
    Компоненты Ride
      • English
      • Русский
      On this page
        • bn256Groth16Verify
        • createMerkleRoot
        • ecrecover
        • groth16Verify
        • rsaVerify
        • sigVerify
      waves_logo Docs

          # Функции верификации

          Название Описание Сложность
          bn256Groth16Verify Семейство функций.
          Осуществляют проверку zk-SNARK по протоколу groth16 на кривой bn254
          800–1650
          createMerkleRoot Вычисляет корневой хеш дерева Меркла транзакций блока 30
          ecrecover Восстанавливает открытый ключ из хеша сообщения и цифровой подписи ECDSA 70
          groth16Verify Семейство функций.
          Осуществляют проверку zk-SNARK по протоколу groth16 на кривой bls12-381
          1200–2700
          rsaVerify Семейство функций.
          Проверяют достоверность цифровой подписи RSA
          500–1000
          sigVerify Семейство функций.
          Проверяют достоверность цифровой подписи Curve25519 достоверна
          43–180

          # bn256Groth16Verify

          Семейство функций. Осуществляют проверку доказательства с нулевым разглашением zk-SNARK по протоколу groth16 на кривой bn254. (Несмотря на то что в научной литературе кривая называется bn254, в коде принято использовать обозначение bn256.)

          Название Макс. кол-во входов Сложность
          bn256Groth16Verify(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 16 1650
          bn256Groth16Verify_1inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 1 800
          bn256Groth16Verify_2inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 2 850
          bn256Groth16Verify_3inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 3 950
          bn256Groth16Verify_4inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 4 1000
          bn256Groth16Verify_5inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 5 1050
          bn256Groth16Verify_6inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 6 1100
          bn256Groth16Verify_7inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 7 1150
          bn256Groth16Verify_8inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 8 1200
          bn256Groth16Verify_9inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 9 1250
          bn256Groth16Verify_10inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 10 1300
          bn256Groth16Verify_11inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 11 1350
          bn256Groth16Verify_12inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 12 1400
          bn256Groth16Verify_13inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 13 1450
          bn256Groth16Verify_14inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 14 1550
          bn256Groth16Verify_15inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 15 1600

          # Параметры

          Параметр Описание
          vk: ByteVector Ключ для проверки.
          Максимальный размер:
          • Для функций bn256Groth16Verify_<N>inputs — не более 256 + 32 × N байт.
          • Для функции bn256Groth16Verify — не более 256 + 32 × 16 = 768 байта
          proof: ByteVector zk-SNARK. фиксированный размер: 128 байт
          inputs: ByteVector Массив публичных входов доказательства с нулевым разглашением. Например, массив хешей UTXO в случае анонимных транзакций.
          Максимальный размер:
          • Для функций bn256Groth16Verify_<N>inputs — не более 32 × N байт.
          • Для функции bn256Groth16Verify — не более 512 байт.

          # createMerkleRoot

          Вычисляет корневой хеш транзакций блока на основе хеша транзакции и соседних хешей дерева Меркла, используя алгоритм хеширования BLAKE2b-256 . Чтобы проверить присутствие транзакции в блоке, нужно сравнить вычисленный хеш с с полем transactionsRoot в заголовке блока. Подробное описание приведено в разделе Корневой хеш транзакции.

          createMerkleRoot(merkleProofs: List[ByteVector], valueBytes: ByteVector, index: Int): ByteVector
          

          # Параметры

          Параметр Описание
          merkleProofs: List[ByteVector] Массив соседних хешей дерева Меркла. До 16 элементов, размер каждого 32 байта
          valueBytes: ByteVector Хеш транзакции. Фиксированный размер: 32 байта. Для хеширования можно использовать функцию blake2b256. Хешировать транзакцию нужно вместе с подписью
          index: Int Порядковый номер транзакции в блоке

          # ecrecover

          Возвращает открытый ключ, восстановленный из хеша сообщения и цифровой подписи ECDSA на основе эллиптической кривой secp256k1. Завершается ошибкой, если восстановить открытый ключ не удалось.

          Открытый ключ возвращается в несжатом формате (64 байта).

          Функцию можно использовать для проверки достоверности цифровой подписи сообщения, сравнив восстановленный открытый ключ с ключом отправителя.

          ecrecover(messageHash: ByteVector, signature: ByteVector): ByteVector
          

          # Параметры

          Параметр Описание
          messageHash: ByteVector Keccak-256-хеш сообщения. Фиксированный размер: 32 байта
          signature: ByteVector Цифровая подпись ECDSA. Фиксированный размер: 65 байт

          # Пример

          Для верификации транзакции блокчейна Ethereum нужны следующие данные:

          • транзакция;
          • подпись, полученная с помощью функции ecsign (конкатенация байтов r, s и v);
          • открытый ключ отправителя.
          func check(t: ByteVector, signature: ByteVector, publicKey: ByteVector) = {
             ecrecover(keccak256(t), signature) == publicKey
          }
          

          # groth16Verify

          Семейство функций. Осуществляют проверку zk-SNARK по протоколу groth16 .

          Название Макс. кол-во входов Сложность
          groth16Verify(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 16 2700
          groth16Verify_1inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 1 1200
          groth16Verify_2inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 2 1300
          groth16Verify_3inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 3 1400
          groth16Verify_4inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 4 1500
          groth16Verify_5inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 5 1600
          groth16Verify_6inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 6 1700
          groth16Verify_7inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 7 1800
          groth16Verify_8inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 8 1900
          groth16Verify_9inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 9 2000
          groth16Verify_10inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 10 2100
          groth16Verify_11inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 11 2200
          groth16Verify_12inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 12 2300
          groth16Verify_13inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 13 2400
          groth16Verify_14inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 14 2500
          groth16Verify_15inputs(vk:ByteVector, proof:ByteVector, inputs:ByteVector): Boolean 15 2600

          # Параметры

          Параметр Описание
          vk: ByteVector Ключ для проверки.
          Максимальный размер:
          • Для функций groth16Verify_<N>inputs — не более 384 + 48 × N байт.
          • Для функции groth16Verify — не более 384 + 48 × 16 =1152 байта
          proof: ByteVector Доказательство с нулевым разглашением . Фиксированный размер: 192 байта
          inputs: ByteVector Массив публичных входов доказательства с нулевым разглашением.
          Максимальный размер:
          • Для функций groth16Verify_<N>inputs — не более 32 × N байт.
          • Для функции groth16Verify — не более 512 байт.

          # Пример

          groth16Verify(vk, proof, inputs)
          

          # rsaVerify

          Семейство функций. Проверяют, что цифровая подпись RSA данных достоверна; то есть что она была создана владельцем открытого ключа.

          Название Макс. размер message Сложность
          rsaVerify(digest: digestAlgorithmType, message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean Макс. размер ByteVector 1000
          rsaVerify_16Kb(digest: digestAlgorithmType, message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 16 Кбайт 500
          rsaVerify_32Kb(digest: digestAlgorithmType, message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 32 Кбайт 550
          rsaVerify_64Kb(digest: digestAlgorithmType, message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 64 Кбайт 625
          rsaVerify_128Kb(digest: digestAlgorithmType, message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 128 Кбайт 750

          Рекомендуемая длина модуля ключей RSA — не менее 2048 бит.

          Данные перед подписанием можно хешировать с помощью одного из следующих алгоритмов:

          • MD5
          • SHA-1
          • SHA-224
          • SHA-256
          • SHA-384
          • SHA-512
          • SHA3-224
          • SHA3-256
          • SHA3-384
          • SHA3-512

          ⚠️ MD5 и SHA-1 — устаревшие алгоритмы, для которых были найдены коллизии. Они оставлены только для обратной совместимости. Выбор безопасного алгоритма хеширования — ответственность разработчика приложения.

          # Параметры

          Параметр Описание
          digest: digestAlgorithmType Алгоритм хеширования, примененный к данным перед подписанием. Возможные значения:
          • NOALG — нет хеширования.
          • MD5
          • SHA1
          • SHA224
          • SHA256
          • SHA384
          • SHA512
          • SHA3224
          • SHA3256
          • SHA3384
          • SHA3512
          message: ByteVector Исходные данные.
          Максимальный размер:
          • Для функций rsaVerify_<N>Kb — не более N Кбайт.
          • Для функции rsaVerify — не более 150 Кбайт.
          sig: ByteVector Цифровая подпись. Фиксированный размер: 25 байт
          pub: ByteVector Открытый ключ в бинарном формате. Фиксированный размер: 294 байта

          # sigVerify

          Семейство функций. Проверяют, что цифровая подпись Curve25519 достоверна; то есть что она была создана владельцем открытого ключа.

          Название Макс. размер message Сложность
          sigVerify(message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean Макс. размер ByteVector 180
          sigVerify_8Kb(message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 8 Кбайт 43
          sigVerify_16Kb(message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 16 Кбайт 50
          sigVerify_32Kb(message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 32 Кбайт 64
          sigVerify_64Kb(message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 64 Кбайт 93
          sigVerify_128Kb(message: ByteVector, sig: ByteVector, pub: ByteVector): Boolean 128 Кбайт 150

          # Параметры

          Параметр Описание
          message: ByteVector Исходные данные.
          Максимальный размер:
          • Для функций sigVerify_<N>Kb — не более N Кбайт.
          • Для функции sigVerify — не более 150 Кбайт.
          sig: ByteVector Цифровая подпись. Фиксированный размер: 25 байт
          pub: ByteVector Открытый ключ в бинарном формате. Фиксированный размер: 294 байта
          Функции блокчейна
          Функции вызова dApp из dApp
          Функции блокчейна
          Функции вызова dApp из dApp