waves_logo Docs
  • Обзор
    Обзор
  • Практические руководства
    • Получение данных из блокчейна
      Получение данных из блокчейна
    • Создание и отправка транзакций
      Создание и отправка транзакций
    • Токенизация
      Токенизация
    • Распространение токена (airdrop)
      Распространение токена (airdrop)
    • Прием платежей
      Прием платежей
    • Обмен токенов
      Обмен токенов
    • Простое голосование
      Простое голосование
    • Список как аргумент
      Список как аргумент
    Практические руководства
  • Смарт-контракты Waves
    Смарт-контракты Waves
  • dApp
    • Создание и запуск dApp
      Создание и запуск dApp
    dApp
  • Cмарт-аккаунт
    • Создание смарт-аккаунта
      Создание смарт-аккаунта
    • [en] Creating and deploying a script manually
      [en] Creating and deploying a script manually
    • [en] Video tutorials
      [en] Video tutorials
    Cмарт-аккаунт
  • Cмарт-ассет
    Cмарт-ассет
  • Инструменты разработчика
    • Waves IDE
      Waves IDE
    • Расширение для VS Code
      Расширение для VS Code
    • Surfboard
      Surfboard
    • Ride REPL
      Ride REPL
    Инструменты разработчика
  • Signer ◆
    Signer ◆
  • Waves API
    • Data Service API
      Data Service API
    • Node REST API 🡥
      Node REST API 🡥
    • Node gRPC Server 🡥
      Node gRPC Server 🡥
    • Blockchain Updates 🡥
      Blockchain Updates 🡥
    Waves API
  • Клиентские библиотеки
    • Waves C#
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Waves C#
    • Gowaves
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Gowaves
    • WavesJ
      • Установка SDK
        Установка SDK
      WavesJ
    • Ts-lib-crypto
      • Установка SDK
        Установка SDK
      Ts-lib-crypto
    • Waves-PHP
      • Установка SDK
        Установка SDK
      Waves-PHP
    • Waves-python
      • Установка SDK
        Установка SDK
      Waves-python
    • Waves-rust
      • Установка SDK
        Установка SDK
      Waves-rust
    Клиентские библиотеки
      • English
      • Русский
      On this page
        • Cмарт-контракты Waves
        • Отличия от смарт-контрактов других блокчейнов
        • Примеры приложений на основе смарт-контрактов Waves
      waves_logo Docs

          # Обзор смарт-контрактов Waves

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

          Cмарт-контракты позволяют реализовать широкий спектр приложений — финансовые (DeFi), игровые и многие другие. Благодаря размещению на блокчейне смарт-контракты прозрачны — каждый может посмотреть код и понять, как он работает.

          # Cмарт-контракты Waves

          Смарт-контракты Waves — это аккаунты и ассеты, к которым прикреплены скрипты на языке Ride. Ride — специализированный язык для разработки децентрализованных приложений, легкий в освоении и помогающий разработчикам писать код без ошибок.

          На блокчейне Waves представлены три типа смарт-контрактов:

          • dApp позволяют выполнять практически все операции, возможные на блокчейне Waves. Вызываемые функции могут переводить, выпускать и сжигать токены, изменять данные в хранилище данных dApp и многое другое. Скрипт dApp можно вызвать, отправив транзакцию вызова скрипта, а также dApp могут вызывать друг друга. К вызову могут быть приложены платежи в пользу dApp. dApp также предоставляет функциональность, аналогичную смарт-аккаунту. Подробнее о dApp
          • Смарт-аккаунты проверяют транзакции и ордера, отправляемые от имени аккаунта, на соответствие условиям, указанным в скрипте. Если условия не выполнены, транзакция будет отклонена. Примером смарт-аккаунта является мультиподпись, позволяющая нескольким пользователям совместно управлять активами: транзакция с такого аккаунта разрешена, если содержит валидные подписи совладельцев. Подробнее о смарт-аккаунтах
          • Смарт-ассеты позволяют ограничить транзакции с участием ассета — например, разрешить обмен только по определенной цене, отправку только получателям из доверенного списка или любые операции только в заданном интервале высоты блокчейна. Подробнее о смарт-ассетах

          Смарт-контракты могут использовать данные блокчейна: текущую высоту, балансы аккаунтов, параметры ассетов, записи в хранилищах данных любого аккаунта. Поскольку блокчейн — это распределенный реестр, который хранится на множестве серверов по всему миру, смарт-контракты не могут обратиться к файловой системе. Чтобы доставить на блокчейн данные из внешнего мира, используются оракулы.

          # Отличия от смарт-контрактов других блокчейнов

          • Отсутствие «газа»

            Выполнение скриптов на блокчейне Waves не требует «газа» — переменной платы в зависимости от объема вычислений. Это существенно повышает надежность приложений. Язык смарт-контрактов Ride является неполным по Тьюрингу: в нем отсутствуют циклы. Благодаря этому можно заранее — до начала вычислений и даже до установки скрипта — рассчитать вычислительные затраты. Сложность скриптов, участвующих в одной транзакции, ограничена, что позволяет установить низкие и предсказуемые комиссии за выполнение скрипта при сохранении высокой пропускной способности блокчейна.

            Например, минимальная комиссия за транзакцию вызова функции dApp составляет 0,005 WAVES (всего несколько центов). Дополнительная комиссия требуется только в случае, если вызываемая функция выпускает новый ассет (не являющийся NFT): 1 WAVES за каждый ассет, а также в случае, если сама транзакция отправлена от имени смарт-аккаунта или dApp со сложностью выше пороговой: 0,004 WAVES.

          • Состояние смарт-контракта

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

          # Примеры приложений на основе смарт-контрактов Waves

          • Neutrino — алгоритмический DeFi-протокол, предоставляющий инфраструктуру индексного токена XTN, обеспеченного набором токенов экосистемы Waves и управляемого сообществом пользователей.
          • Swop.fi — сервис для моментального обмена криптовалют на основе модели AMM (automated market maker) и получения пассивного дохода от вложений в криптовалюты. Совокупная стоимость ликвидности — более 100 млн $.
          • Waves Ducks — игра, основанная на коллекционировании NFT c изображениями знаменитостей и мемов в виде уток, которая мотивирует сообщество продвигать экосистему Waves.
          • SIGN Art — веб-галерея цифрового искусства, позволяющая сертифицировать, токенизировать и продавать произведения. В апреле 2021 года на платформе SIGN Art был продан невзаимозаменяемый токен (NFT) по самой высокой цене среди подобных сделок вне блокчейна Ethereum.
          • Power DAO (decentralized autonomous organization) — первая модель управления, основанная на целях и предназначенная для максимизации возможностей самоуправления сообществ.
          Список как аргумент
          dApp
          Список как аргумент
          dApp