Остерегайтесь невозможного умного контракта

Исходный узел: 1576899

Три наиболее распространенных заблуждения умного контракта

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

Но в мире шуток, наполненных шумихой, умные контракты - все в моде, так почему же нет? Проблема в том, что, хотя мы теперь знаем три убедительных варианта использования разрешенных блокчейнов в биткойн-стиле (происхождение, межфирменные записи и легкие финансы), нам еще предстоит найти эквивалент для умных контрактов в стиле Эфириума.

Нельзя сказать, что людям не хватает представлений о том, что они хотят, чтобы умные контракты делали Скорее, это так много из этих идей просто невозможно, Видите ли, когда умные люди слышат термин «умные контракты», их воображение начинает сходить с ума. Они вызывают в воображении мечты об автономном интеллектуальном программном обеспечении, уходящем в мир, забирающем свои данные для поездки.

К сожалению, реальность умных контрактов гораздо более приземленная, чем все это:

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

Вот и все. В самом деле. Умный контракт - это просто причудливое имя для кода, который выполняется в блокчейне и взаимодействует с состоянием этого блокчейна. И что is код? Это Паскаль, это Питон, это PHP. Это Java, это Fortran, это C ++. Если мы говорим о базах данных, это хранимые процедуры написано в расширении SQL. Все эти языки в основном эквивалентны, решая одни и те же проблемы одним и тем же способом. Конечно, у каждого есть свои сильные и слабые стороны - вы с ума сошли бы, создав веб-сайт на C или сжав HD-видео в Ruby. Но в принципе, по крайней мере, вы могли бы, если бы, Вы бы просто заплатили высокую цену за удобство, производительность и, скорее всего, за свои волосы.

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

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

Обращение в сторонние службы

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

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

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

Так в чем же обход? На самом деле, это довольно просто. Вместо смарт-контракта, инициирующего поиск внешних данных, одна или несколько доверенных сторон («оракулы») создают транзакцию, которая встраивает эти данные в цепочку. Каждый узел будет иметь одинаковую копию этих данных, поэтому его можно безопасно использовать при умном вычислении контракта. Другими словами, оракул выталкивает данные на блокчейн, а не умный контракт тянущий это внутри.

Когда дело доходит до умных контрактов, вызывающих события во внешнем мире, возникает аналогичная проблема. Например, многим нравится идея умного контракта, который вызывает API банка для перевода денег. Но если каждый узел независимо выполняет код в цепочке, кто отвечает за вызов этого API? Если ответом является только один узел, что произойдет, если этот конкретный узел неисправен, умышленно или нет? И если ответом является каждый узел, можем ли мы доверять каждому узлу пароль этого API? И действительно ли мы хотим, чтобы API вызывался сотни раз? Еще хуже, если умный контракт должен знать, был ли вызов API успешным, мы снова возвращаемся к проблеме зависимости от внешних данных.

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

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

Обеспечение платежей внутри сети

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

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

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

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

Сокрытие конфиденциальных данных

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

Некоторые люди думают, что умные контракты могут решить эту проблему. Они начинают с того, что каждый умный контракт содержит свою собственную миниатюрную базу данных, над которой он имеет полный контроль. Все операции чтения и записи в этой базе данных выполняются кодом контракта, что делает невозможным для одного контракта непосредственное чтение данных другого. (Эта тесная связь между данными и кодом называется инкапсуляцией и является основой популярного объектно-ориентированного программирования парадигма.)

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

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

Для чего нужны умные контракты

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

Любая база данных модифицируется с помощью «транзакций», которые содержат набор изменений в этой базе данных, которые должны завершиться успешно или потерпеть неудачу в целом. Например, в бухгалтерской книге платеж от Алисы к Бобу представлен транзакцией, которая (а) проверяет, достаточно ли у Алисы средств, (б) вычитает сумму со счета Алисы и (в) добавляет такое же количество к счету Боба. ,

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

Можно представить различные способы выражения этих правил, но на данный момент есть две доминирующие парадигмы, вдохновленные биткойнами и эфириумом соответственно. Метод Биткойн, который мы могли бы назвать «ограничениями транзакций», оценивает каждую транзакцию с точки зрения: (a) записей базы данных, удаленных этой транзакцией, и (b) созданных записей. В бухгалтерской книге правило гласит, что общее количество средств в удаленных записях должно совпадать с общим количеством созданных. (Мы считаем, что изменение существующей записи эквивалентно удалению этой записи и созданию новой вместо нее.)

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

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

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

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

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

Пожалуйста, оставьте любые комментарии в LinkedIn.

Отметка времени:

Больше от многоцепочечного