Автономность и безопасность. Как работают смарт-контракты

Как создать «умный» контракт, какие преимущества и недостатки они имеют. «РБК-Крипто» отвечает на все вопросы о новой перспективной технологии

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

История смарт-контрактов

Термин «умные контракты» был придуман ученым-программистом Ником Сабо, вероятно, в 1993 году, чтобы объяснить цель внедрения в разработку протоколов того, что он назвал «высокоразвитой» ступенью договорного права и связанных с ними бизнес-практик в электронной коммерции. Сабо, вдохновленный такими исследователями, как Дэвид Чаум, также полагал, что разработка умных-контрактов с помощью выполнения криптографических протоколов и других механизмов цифровой безопасности могут стать значительным улучшением по сравнению с традиционными юридическими контрактами.

Сабо использовал слово «умный» в кавычках и заявил о том, что искусственный интеллект задействован не будет. Он приводил классический пример смарт-контракта: это вендинговый автомат. Если условия «контракта» устраивают покупателя (т. е. он опускает деньги в автомат), то машина автоматически соблюдает условия неписаного соглашения и предоставляет покупку.

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

Выбор IDE и версии Solidity

Прежде чем мы начнем, нам нужна надлежащая интегрированная среда разработки (IDE). Другими словами, нам нужен удобный терминал с необходимыми инструментами для написания нашего кода. Для целей данного руководства мы выберем Remix, IDE, созданную фондом Ethereum, которая позволяет писать, тестировать, отлаживать, запускать умные контракты и многое другое. Вы можете использовать его либо прямо в браузере, либо скачать его локально, если хотите.

После запуска Remix вы увидите редактор кода в центре, файловый менеджер слева и компилятор справа.

Initial Remix window

Будет какой-то заранее написанный код — он нам не понадобится. Чтобы создать первый уникальный умный контракт, давайте нажмем на значок плюса в верхнем левом углу терминала и дадим ему имя.

Creating a new project in Remix

Поскольку у нас есть пустой документ. sol, мы должны указать версию Solidity, которую будет запускать компилятор. На момент написания данного руководства последняя версия была 0.5.7. Если вы не уверены, какую версию использовать, вы можете указать диапазон версий.

2 типа указания версии Solidity

Давайте дадим нашему умному контракту имя, а затем круглые скобки.

Именование контракта

Как работают смарт-контракты?

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

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

Платформа Ethereum использовалась для распространения децентрализованных приложений (DApps). Вместо множества приложений, управляемых многими протоколами, Ethereum позволяет управлять всеми приложениями по одному протоколу.

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

Объекты умных контрактов и условия для работы

Любой смарт-контракт должен обладать следующими атрибутами:

  • Подписанты — стороны умного контракта (как минимум два участника), которые участвуют в процессе подписания контракта или отказа от прописанных условий путем использования цифровых подписей;
  • Предмет контракта — предметом смарт-контракта может выступать только объект, который находится в самой децентрализованной сети или на других источниках, к которым программа может получить доступ без привлечения человека. Именно отсутствие этого атрибута не позволяло реализовать смарт-контракты в 1998 году, так как в то время еще не была сформирована и разработана концепция блокчейна как виртуальной децентрализованной среды;
  • Условия контракта — условия выглядят в виде математического описания, которое должно быть запрограммировано в рабочей среде самого смарт-контракта. Прописываются согласно алгори;
  • Децентрализованная платформа — данные о каждом смарт-контракте должны записываться и храниться в распределенном реестре.

Смарт-контракты смогут выполняться, только если будут созданы определенные условия:

  • Наличие цифровой подписи, базой для которой являются открытые и закрытые ключи;
  • Децентрализованная платформа, которая обслуживается независимыми нодами (узлами);
  • Доверенный источник цифровых данных;
  • Математически доказанная полнота по Тьюрингу.

Преимущества смарт-контрактов

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

Автономность

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

Снижение затрат

Поскольку контракты не зависят от третьей стороны, затраты снижаются. Меньшее вмешательство человека приводит к снижению затрат.

Скорость

Умные контракты используют программный код для автоматизации задач, которые в противном случае выполнялись бы вручную. Поэтому они увеличивают скорость бизнес-процессов и менее подвержены ошибкам вручную.

Безопасность

Основывая контракты на блокчейне Ethereum, они не могут быть потеряны. Все является неизменным. Ничто и никто не может заставить его исчезнуть, и у вас всегда есть к ним доступ.

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

Выводы

Мы описали принципы работы и особенности smart contracts в общих чертах, но это перспективное направление для исследований. Несмотря на недостатки технологии распределённого реестра и проблемы масштабирования ряда проектов, их преимущества над традиционными централизованными системами очевидны. Это изменит не только финансовую индустрию, но и практики государственного управления.

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

Недостатки смарт-контрактов

С другой стороны, программы такого типа также имеют определенные недостатки. Главный состоит преимущественно в использовании технологий, которые он задействует: интернет-вещей и блокчейн.

IoT может обеспечить связь с активами, но ему еще предстоит пройти долгий путь в области безопасности. IoT-устройства легко взломать. Блокчейн более чем безопасен, но он неизменен. После того, как условия согласованы, их нельзя будет впоследствии изменить, что невыгодно для одной из сторон.

Создание и развертывание собственного токена ERC20. Выпуск токенов и создание ICO.

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

Сначала нам нужно создать еще один файл в Remix и загрузить интерфейс ERC20, а именно:

Как создать смарт-контракт?

Контракт разработан на определенном языке (Solidity, Serpent или Mutan), скомпилирован в EVM и, за некоторыми исключениями, соответствует стандартному интерфейсу ERC-20. Solidity является языком, который основан на JS, Python и C++.

Чтобы подойти к созданию смарт-контракта, нужно знать Solidity. Как бумажные контракты создаются людьми, которые знают всю правовую среду вокруг них, в умных контрактах необходимо знать компьютерный код, называемый Solidity.

В документе «Введение юриста в смарт-контракты» для смарт-контрактов описываются два «уровня»: платформа смарт-контрактов (SCP), которая представляет собой инфраструктуру, позволяющую создавать их и управлять ими на блокчейне, и система управления смарт-контрактами (SCMS). Этот протокол добавляется к этой инфраструктуре, чтобы пользователю было проще взаимодействовать с контрактами. То есть, он является графическим интерфейсом.

Контракт выполняется в сети, внутри виртуальной машины Ethereum (EVM). Это исполнение не является бесплатным, но оплачивается в форме «газа», небольшого количества эфирной валюты, внесенного одним или несколькими участниками контракта. Важной деталью является то, что исполнение децентрализовано и производится во всех узлах сети. Это одна из причин, по которой EVM работает так медленно и может обрабатывать только около 15 транзакций в секунду.

Waves Enterprise SDK

Мы в Waves Enterprise решили собрать в одной коробке набор инструментов, который бы инкапсулировал все лучшие практики разработки публичных блокчейнов. Мы занимаемся именно энтерпрайз-блокчейном и понимаем основные требования заказчиков к инструментам:

  • использование распространённого технологического стека;
  • отсутствие нескольких языков в рамках одного проекта;
  • предсказуемая, гарантированная поддержка от вендора.

Их мы учли при создании Waves Enterprise SDK

. Он инкапсулирует лучшие паттерны из мира блокчейн-разработки, использует стандартные корпоративные языки программирования (Java, Kotlin) и единый набор инструментов как для смарт-контрактов, так и для приложений, которые берут из них данные.

Рассмотрим пример смарт-контракта в нашем SDK — это порт ERC-20 токена:

override fun transferFrom(from: String, to: String, amount: Long) { require(allowance(from, са11.са11ег) >= amount) { «INSUFFICIENT_ALLOWANCE» } require(balance0f(from) >= amount) { «INSUFFICIENT_BALANCE» } modifyBalance(from) { it – amount } modifyBaIance(to) { it + amount } modifyAlIowance(from, саll.саllег) { it – amount } } fun modifyBalance(address: String, fn: (Long) –> Long) { balance.put(address, fn(balance0f(address))) } fun modifyAllowance(from: String, to: String, fn: (Long) –> Long) { allowances.put(allowanceKey(from, to), fn(allowance(from, то))) }

Это код на Kotlin, который использует невысокоуровневые функции, чтобы проверить, кто кому сколько дал прав на перевод токенов, отследить баланс, по которому дали разрешение. В чём преимущество этого кода по сравнению с Solidity?

  • нет скрытых уязвимостей: невозможны re-entrancy атаки.
  • не нужно думать об оптимизации по газу — комиссия фиксирована.
  • пишется на более распространенном языке — после нашего обучения за один день Java-разработчики уже начинали писать свои контракты.

Но, как мы обсуждали, смарт-контракты — это ещё не всё. Нужно получить данные, информацию по обновлению контракта. У нас в SDK для этого есть библиотека, которая заменяет The Graph, и в этой библиотеке тоже всё пишется на Kotlin. Достаточно создать ротацию BlockListener, уточнить, какие ключи в блокчейне мы слушаем, — и можно писать произвольный код, который разложит данные транзакции в объектную модель для дальнейшей работы.

@VstBlockListener fun handleEvent( @VstKeyFiIter(keyPrefix = «BALANCE_») event: VstKeyEvent ) { val balance = event.payload val tx = event.tx // транзакция val contractID = tx.sender }

В классическом Ethereum, чтобы вызвать контракт, нужно использовать библиотеку Web3j на JS. Нужен отдельный код, чтобы вызвать контракт, собрать транзакцию. У нас это уже реализовано в рамках единого языка стандартными инструментами. То есть наш SDK реализует полный жизненный цикл программной разработки на блокчейне в одной коробке.

Как происходит процесс оформления смарт-контрактов

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

Решение проблемы сложности языка программирования

Между человеком и смарт-контрактами возникает барьер — знание языков программирования. Есть несколько способов решения этой проблемы:

  1. Изучение ЯП. Проблема — на это уходит масса времени.
  2. Использование готовых решений. Проблема — неуверенность в правильности редактирования кода.
  3. Применение таких шаблонов, которые предлагает Nxt. Проблема — ограниченные возможности.
  4. Оплата работы программиста. Проблема — качественный программист смарт-контрактов берет за свою работу большие деньги, так как работы в криптомире сейчас достаточно.

Наиболее оптимальное решение создается в проекте iOlite, который делает движок для преобразования обычного языка в код контракта.

Этот инструмент называется Fast Adaptation Engine и стремится заменить работу кодеров. Структуры языковых выражений привязываются к частям кода, затем соединяются и перерабатываются, создавая целостную программу. Для этого подключена огромная база данных. Данные в эту базу вносятся разработчиками. Если часть кода, внесенного программистом, была успешно применена в разработке смарт-контракта, он получает бонус в токенах iOlite.

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

Подводя итоги, необходимо выделить Hyperledger Fabric как платформу, которая активно используется уже сейчас, предоставляя разработчикам гибкие инструменты для применения смарт-контрактов.

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]