waves_logo Docs
  • Почему Waves
    Почему Waves
  • Основные понятия
    Основные понятия
  • Аккаунт
    • Создание аккаунта
      Создание аккаунта
    • Адрес
      Адрес
    • Баланс аккаунта
      Баланс аккаунта
    • Хранилище данных аккаунта
      Хранилище данных аккаунта
    • Псевдоним
      Псевдоним
    • dApp и смарт-аккаунт
      dApp и смарт-аккаунт
    Аккаунт
  • Токен (ассет)
    • NFT: невзаимозаменяемый токен
      NFT: невзаимозаменяемый токен
    • Смарт-ассет
      Смарт-ассет
    • ID токена
      ID токена
    • WAVES
      WAVES
    Токен (ассет)
  • Транзакция
    • Комиссия за транзакцию
      • Спонсирование комиссии
        Спонсирование комиссии
      Комиссия за транзакцию
    • Подпись и подтверждения
      Подпись и подтверждения
    • Типы транзакций
      • Вызов скрипта
        Вызов скрипта
      • Выпуск
        Выпуск
      • Генезис
        Генезис
      • Данные
        Данные
      • Довыпуск
        Довыпуск
      • Закрытие лизинга
        Закрытие лизинга
      • Лизинг
        Лизинг
      • Массовый перевод
        Массовый перевод
      • Обмен
        • Ордер
          Ордер
        Обмен
      • Обновление информации ассета
        Обновление информации ассета
      • Перевод
        Перевод
      • Сжигание токена
        Сжигание токена
      • Cоздание псевдонима
        Cоздание псевдонима
      • Спонсирование
        Спонсирование
      • Установка скрипта
        Установка скрипта
      • Установка скрипта ассета
        Установка скрипта ассета
      • Ethereum-like транзакция
        Ethereum-like транзакция
      Типы транзакций
    • Валидация транзакции
      Валидация транзакции
    Транзакция
  • Блок
    • Корневой хеш транзакций
      Корневой хеш транзакций
    • Блок генезиса
      Блок генезиса
    Блок
  • Нода
    • Лизинг
      Лизинг
    • Доход генератора блока
      Доход генератора блока
    • Монетарная политика
      Монетарная политика
    Нода
  • Mainnet, Testnet, Stagenet
    Mainnet, Testnet, Stagenet
  • Unit Zero
    Unit Zero
  • Оракул
    Оракул
  • Протоколы и форматы данных
    • [en] Cryptographic practical details
      [en] Cryptographic practical details
    • Leased Proof of Stake
      Leased Proof of Stake
    • [en] Waves-NG solution
      [en] Waves-NG solution
    • Протокол Waves-NG
      Протокол Waves-NG
    • Waves 1.5
      Waves 1.5
    • Типы данных блокчейна
      Типы данных блокчейна
    • Бинарные форматы
      • Бинарный формат адреса
        Бинарный формат адреса
      • Бинарный формат псевдонима
        Бинарный формат псевдонима
      • Бинарный формат блока
        Бинарный формат блока
      • [en] Network message binary format
        • [en] Block message binary format
          [en] Block message binary format
        • [en] Checkpoint message binary format
          [en] Checkpoint message binary format
        • [en] Get block message binary format
          [en] Get block message binary format
        • [en] Get peers message binary format
          [en] Get peers message binary format
        • [en] Get signatures message binary format
          [en] Get signatures message binary format
        • [en] Handshake message binary format
          [en] Handshake message binary format
        • [en] Peers message binary format
          [en] Peers message binary format
        • [en] Score message binary format
          [en] Score message binary format
        • [en] Signatures message binary format
          [en] Signatures message binary format
        • [en] Transaction message binary format
          [en] Transaction message binary format
        [en] Network message binary format
      • Бинарный формат ордера
        Бинарный формат ордера
      • Бинарный формат транзакции
        • Вызов скрипта
          Вызов скрипта
        • Выпуск
          Выпуск
        • Генезис
          Генезис
        • Данные
          Данные
        • Довыпуск
          Довыпуск
        • Лизинг
          Лизинг
        • Массовый перевод
          Массовый перевод
        • Обмен
          Обмен
        • Обновление информации ассета
          Обновление информации ассета
        • Отмена лизинга
          Отмена лизинга
        • Сжигание токена
          Сжигание токена
        • Cоздание псевдонима
          Cоздание псевдонима
        • Спонсирование
          Спонсирование
        • Перевод
          Перевод
        • Установка скрипта
          Установка скрипта
        • Установка скрипта ассета
          Установка скрипта ассета
        • Ethereum-like
          Ethereum-like
        Бинарный формат транзакции
      • Бинарный формат подтверждений
        Бинарный формат подтверждений
      Бинарные форматы
    • [en] Validation rules
      [en] Validation rules
    Протоколы и форматы данных
  • Термины
    Термины
      • English
      • Русский
      On this page
        • Отправитель и подпись
        • Комиссия за транзакцию
        • JSON-представление транзакции
        • Бинарный формат транзакции
        • Примеры транзакций
        • Как подписать и отправить транзакцию
        • Что происходит с транзакцией после отправки
      waves_logo Docs

          # Транзакция

          Транзакция — действие на блокчейне от имени аккаунта.

          В Waves предусмотрено множество типов транзакций. Например:

          • транзакция данных записывает информацию в хранилище данных аккаунта;
          • транзакция перевода отправляет заданное количество токена с одного аккаунта на другой.

          Набор полей транзакции зависит от ее типа. Типы транзакций перечислены в разделе Тип транзакции.

          # Отправитель и подпись

          Каждая транзакция содержит открытый ключ аккаунта-отправителя, от имени которого выполняется действие на блокчейне. Транзакция, отправленная с обычного аккаунта (на котором не установлен скрипт), должна содержать цифровую подпись отправителя. Смарт-аккаунты и dApp могут устанавливать собственные правила верификации исходящих транзакций. Подробнее см. в разделе Подпись и подтверждения транзакции.

          # Комиссия за транзакцию

          Транзакции в Waves очень дешевые, но не бесплатные: с отправителя взимается комиссия. В транзакции можно указать любую сумму комиссии, но не менеe минимальной. Минимальные комиссии представлены в разделе Комиссия за транзакцию.

          # JSON-представление транзакции

          REST API ноды Waves использует JSON-представление транзакции: через API можно отправлять транзакции на ноду и получать информацию о транзакциях на блокчейне в формате JSON.

          Пример JSON-представления:

          {
            "senderPublicKey": "BVv1ZuE3gKFa6krwWJQwEmrLYUESuUabNCXgYTmCoBt6",
            "sender": "3N8S4UtauvDAzpLiaRyDdHn9muexWHhBP4D",
            "feeAssetId": null,
            "proofs": [
              "22QJfRKX7kUQt4qjdnUqZAnhqukqhnofE27uvP8Q5xnBf8M6PCNtWVGq2ngm6m7Voe7duys59D1yU9jhKrmdXDCe"
            ],
            "fee": 100000,
            "alias": "91f452553298770f",
            "id": "AD7KmXwoVNc2fXsmaxsHsrnT1tfPF3HsWYtfjFijVsvM",
            "type": 10,
            "version": 2,
            "timestamp": 1548443069053,
            "height": 466104
          }
          
          Поле Описание
          senderPublicKey Открытый ключ отправителя: байты в кодировке base58
          sender Адрес отправителя: байты в кодировке base58
          feeAssetId ID токена, в котором указана комиссия: байты в кодировке base58.
          null означает, что комиссия указана в WAVES.
          Для транзакций вызова скрипта и транзакций перевода комиссия может быть указана в спонсорском ассете, см. раздел Спонсирование комиссии
          proofs Массив подтверждений транзакции. До 8 подтверждений, каждое подтверждение до 64 байт, байты в кодировке base58
          fee Комиссия за транзакцию. Всегда целое число, выраженное в атомарных единицах ассета. Например, если комиссия составляет 0,001 WAVES, в JSON-представлении указывается 100000, поскольку 1 WAVES = 108 WAVELET
          id Идентификатор транзакции: байты в кодировке base58. Как вычисляется идентификатор транзакции, см. в разделе Cryptographic practical details
          type Тип транзакции. Номера типов см. в разделе Тип транзакции
          version Версия транзакции.
          Список версий для каждого типа транзакции см. в описании бинарных форматов транзакции
          applicationStatus Статус выполнения:
          - succeeded — транзакция успешна.
          - script_execution_failed — результат выполнения dApp-скрипта или скрипта ассета был неудачным.
          - elided — транзакция стала невалидной в результате оспаривания блока. Подробнее в разделе Waves 1.5: легкая нода.
          Поле добавлено с момента активации фичи № 15 “Ride V4, VRF, Protobuf, Failed transactions”. Подробнее о валидации транзакций
          Значение elided добавлено с момента активации фичи № 22 “Light Node”
          timestamp Временная метка транзакции, указанная отправителем: Unix-время в миллисекундах. Транзакция не будет добавлена в блокчейн, если значение временной метки транзакции отличается от временной метки текущего блока более чем на 2 часа назад или 1,5 часа вперед
          height Порядковый номер блока, в который была добавлена транзакция

          Поля sender, id, applicationStatus, height не нужно заполнять при отправке транзакции, и они не хранятся на блокчейне: их вычисляет нода при предоставлении данных о транзакции через REST API.

          В ранних версиях некоторых типов транзакций вместо массива proofs используется поле signature, содержащее подпись транзакции.

          Поля, зависящие от типа транзакции, представлены в описании типов транзакций.

          # Бинарный формат транзакции

          Транзакции хранятся на блокчейне в бинарном формате (байтовом представлении). Расширения ноды, в частности gRPC-сервер, могут работать непосредственно с данными в бинарном формате.

          Подпись транзакции и ее идентификатор также формируются на основе бинарного формата. Правила генерации подписи и идентификатора транзакции представлены в разделе Cryptographic practical details.

          Описание бинарного формата транзакции приведено в разделе Бинарный формат транзакции.

          # Примеры транзакций

          Коллекция транзакций по типам представлена в разделе Примеры транзакций.

          Получить транзакцию по ее идентификатору, или список транзакций по адресу аккаунта, или список всех транзакций в блоке можно:

          • В Waves Explorer .

          • С помощью методов Node REST API:

            • GET /transactions/info/{id} — возвращает данные транзакции по ID.
            • GET /transactions/address/{address}/limit/{limit} — возвращает по адресу аккаунта список относящихся к нему транзакций.
            • GET /blocks/at/{height} — возвращает данные блока на заданной высоте, в том числе все транзакции блока.

          # Как подписать и отправить транзакцию

          • С помощью одной из клиентских библиотек. См. примеры в разделе Создание и отправка транзакций.

            💡 Подписывать и отправлять транзакции от имени пользователей, не запрашивая у них секретную фразу (seed) или закрытый ключ, можно с помощью одного из следующих фреймворков:

            • библиотека Signer;
            • Keeper Wallet API (требует, чтобы в браузере пользователя было установлено расширение Keeper Wallet).
          • В Waves IDE с помощью интерактивной консоли JavaScript.

          • В приложении WX Network , разработанном сторонней командой из сообщества, доступно создание некоторых типов транзакций, таких как перевод токена, выпуск/довыпуск/сжигание токена, настройка спонсирования, установка скрипта ассета, создание псевдонима.

          • С помощью REST API ноды:

            • метод POST /transactions/broadcast позволяет отправить на ноду уже подписанную транзакцию;
            • метод POST /transactions/sign позволяет сгенерировать подпись транзакции (однако этот метод доступен только владельцу ноды).

          # Что происходит с транзакцией после отправки

          Получив транзакцию, нода проверяет ее валидность: достоверность подписи, достаточность баланса отправителя и др., подробнее см. в разделе Валидация транзакции. Если транзакция валидна, нода добавляет транзакцию в UTX pool — список транзакций, ожидающих попадания в блок, и передает эту транзакцию другим нодам сети блокчейна.

          У блока есть ограничения на размер (1 Мбайт), поэтому транзакция может попасть в блок не сразу. В первую очередь ноды добавляют в блок самые «выгодные» транзакции — с наибольшей комиссией за байт.

          После добавления в блок транзакция меняет состояние блокчейна: балансы аккаунтов, записи в хранилище данных аккаунта и т. п.

          Транзакция из UTX pool может так и не попасть в блок, если во время нахождения в UTX pool она стала невалидной. Например, истекло время жизни транзакции: временная метка оказалась более чем на 2 часа в прошлом относительно текущего времени. Или другая транзакция попала в блок, изменила состояние блокчейна, и теперь баланс отправителя недостаточен для выполнения транзакции или скрипт аккаунта или ассета отклоняет транзакцию.

          WAVES
          Комиссия за транзакцию
          WAVES
          Комиссия за транзакцию