Смарт-контракты для приватной блокчейн-сети

Waves Enterprise
Oct 30 · 6 min read
Подход Waves Enterprise позволяет решить на уровне приватного блокчейна многие проблемы смарт-контрактов в публичных сетях.

Разница между смарт-контрактами в публичных и приватных сетях

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

  1. Игры — Crypto Kitties, Ride on waves и т.д.
  2. Обмен токенов
  3. Надежные системы голосования
  4. Краудфандинг (ICO).

Благодаря росту популярности публичных блокчейн-платформ компании поняли, что технология блокчейн может очень эффективно применяться в их бизнес-процессах. В совокупности с фокусом на потребности бизнеса это дало толчок развитию смарт-контрактов. Из нашего опыта работы с корпоративными клиентами можно выделить несколько популярных кейсов, в которых смарт-контракты на приватном блокчейне могут проявить себя с лучшей стороны:

  1. Документооборот компании
  2. Бизнес-процессы цепи поставок
  3. Страхование
  4. Надежные системы голосования
  5. Исполнение взаимных обязательств с поставщиками
  6. Лизинг и аренда оборудования
  7. Создание деривативных финансовых инструментов, обеспеченных материальными и нематериальными активами (например, токенизация долга)
  8. Аукционы любого вида и сложности
  9. Предиктивная аналитика данных на блокчейне.

Как вы понимаете, смарт-контракты для публичных и приватных блокчейнов отличаются. Основные отличия смарт-контрактов на приватном блокчейне:

  • Данные, с которыми работают смарт-контракты, более чувствительны, чем в публичных сетях.
  • Общеизвестно, что смарт-контракты должны работать с документами и данными, хранящимися вне блокчейна, что невозможно для публичных блокчейн-платформ. В публичных сетях существуют оракулы, которым или доверяют, или позволяют напрямую хранить на блокчейне лишь ограниченный объем данных. Оба случая представляют серьезные ограничения для приватного блокчейна.
  • Иногда требуется шифрование транзакций, вызывающих смарт-контракты, чтобы только авторизованные участники могли расшифровать и исполнить приватный смарт-контракт.

Чего ожидают от функциональности смарт-контрактов в бизнес-приложениях корпоративные клиенты?

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

Вопрос: На каком языке должны быть написаны смарт-контракты, и каким должен быть их уровень безопасности?

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

Вопрос: Может ли система выразить сложные бизнес-правила в простой форме?

Ответ: Для большинства языков ответ, к сожалению, отрицательный. На это много причин. Корпоративные разработчики не знают специфику блокчейна и языки разработки смарт-контрактов, а подходящие языки не могут работать с данными вне блокчейна.

Вопрос: Можем ли мы в будущем доработать контакты, не переписывая все блокчейн-структуры?

Ответ: Нет — для большинства решений на рынке (кроме Hyperledger Fabric). Основная причина — в том, что контакты интегрированы в блокчейн слишком глубоко. Это — наследие публичных блокчейнов, где повторная интеграция является прямой угрозой безопасности системы.

Вопрос: Насколько легко интегрировать смарт-контракты в существующую инфраструктуру клиента и использовать с другими бизнес-приложениями?

Ответ: К сожалению, большинство бизнес-приложений или их API потребуют ре-дизайна, и их сложно запускать из смарт-контрактов. Использование блокчейна в проекте приведет к дополнительным расходам для бизнеса.

Сейчас мы расскажем о нашем подходе к решению этих проблем и о готовом решении.

Смарт-контракты Waves Enterprise

Итак, какие смарт-контракты доступны на Waves Enterprise?

Ride

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

Контейнеризированные смарт-контракты

Контейнеризированные смарт-контракты Waves Enterprise — программы, упакованные в Docker-контейнер. Docker-контейнер помещается в Docker-репозиторий (один или несколько). У каждого контракта есть адрес на блокчейне и связанный с ним хэш Docker-образа контракта (чтобы гарантировать использование валидного контракта, при создании контракта транзакцией Docker Create хэш от исходного кода контракта записывается в блокчейн: подробнее об этом рассказано в нашей документации). Для исполнения смарт-контракта создается блокчейн-транзакция с требуемыми параметрами вызова, контракт вычисляет, а затем записывает результат в блокчейн. Благодаря Docker-контейнерам можно использовать любые языки программирования и фреймворки — в отличие от Hyperledger Fabric, где разработчики ограничены его SDK. Отметим, что Docker изолирует приложение от ноды Waves Enterprise, и у нас нет доступа к ноде на уровне кода. Но у нас есть сетевое подключение, и мы можем при необходимости выполнять HTTP-запросы. Это значит, что запрос может быть отправлен не только нашей ноде, но и любому другому известному сервису. Суммируя все вышесказанное, выделим основные преимущества контейнеризированных смарт-контрактов Waves Enterprise:

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

Что происходит при вызове контракта?

Как описано в предыдущем разделе, Docker-контейнер содержит некоторое ПО. Но что на самом деле происходит, когда транзакция вызова контракта попадает в пул транзакций ноды? Процедура такова:

  1. Если нет активного контейнера, то он будет развернут из образа, который хранится в репозитории.
  2. Он загружает exec, файрвол, если подключение к интернету для этого контракта запрещено, и доменная нода инициализируется переменными среды.
  3. Затем выполняется скрипт run.sh, который инсталлирует зависимости, если контейнер не существует.
  4. Контракт может получать информацию о ноде и транзакции через переменные среды операционной системы.
  5. Если вычисление контракта занимает слишком много времени, он будет отменен по причине тайм-аута (точное время тайм-аута пользователь может задать в настройках).
  6. Результат исполнения контракта должен быть отпечатан в STDOUT и отформатирован как List [DataEntry]. Более подробная информация о формате и выводе находится в документации.
  7. Если контракт успешно исполнен, майнер создаст ExecutedContractTransaction и подпишет ее. Транзакция содержит транзакцию вызова, инициировавшую контракт, и результат. Затем, как и любая другая транзакция, она записывается в блок добавляется в стейт.
  8. Все участники, получающие блок, могут подтвердить, что транзакция была подписана участником с ролью miner и добавить ее в стейт.

Примеры и необходимые шаги развертывания есть в этом гайде в нашей официальной документации.

Краткое сравнение с ‘лучшими’ решениями на рынке

Преимущества этих технологических решений важны, и здесь мы сравним наши контейнеризированным смарт-контракты с другими известными смарт-контрактами.

1. Ethereum имеет многочисленное сообщество и долгое время является платформой номер один для разработки dApp в сфере публичных блокчейнов. Также существуют версии для использования в приватных блокчейнах (например, Quorum и Masterchain). Но с точки зрения исполнения в публичной сети языки Solidity и EVM в целом имеют, в отличие от контейнеризированных смарт-контрактов Waves Enterprise, ряд ограничений.

  • “Газ”. Языки EVM — полные по Тьюрингу, но для стабильной работы в случае атаки, которая может парализовать систему бесконечными вычислениями, существуют ограничения по числу операций EVM в рамках исполнения одного контракта и по сложности. В результате при сложном контракте может быть выдана ошибка “не хватает газа”. В приватной сети это неудобно, потому что бизнес-процессы всегда должны быть завершены.
  • Данные вне блокчейна. В смарт-контракты Ethereum можно добавить некоторое количество данных, но их хранение ограничено и дорого. Например, вы не можете написать контракт, который запросит текущие биржевые котировки и будет использовать их для других операций. Другими словами, вы не можете создать мини-веб-сервер с помощью Solidity, но можете это сделать с помощью Waves Enterprise — и даже выбрать язык программирования и фреймворк.

2. Hyperledger Fabric — на сегодня самая известная платформа для приватных блокчейн-решений, и она тоже использует смарт-контракты в Docker-контейнере. Но они ограничены использованием SDK и доступны только на языках Go, JS и т. д. Разработчикам приходится совершать много операций низкого уровня — например, диспетчеризацию и вычисление аргументов. В результате даже простейшая программа в духе “Hello world” на Go потребует 90 строк кода. Для многих разработчиков это неудобно.

Что дальше?

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

Ссылки

  1. Сайт Waves Enterprise
  2. Документация
  3. Контейнеризированные смарт-контракты Waves Enterprise
  4. Документация Waves Ride

Следите за нами в соцсетях!
Twitter
Youtube
Facebook
Linkedin

Подписывайтесь на наш канал в Telegram

Waves Enterprise

Written by

Универсальное блокчейн-решение для бизнеса и государства

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade