Мнение: код — это не закон, а закон – это не код

Эта статья написана философом, членом Ассоциации футурологов России и аналитиком проекта eGaaS Александром Болдачевым специально для Forklog.

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

Но что-то пошло не так. И после истории со взломом на платформе Ethereum контрактов The DAO стало очевидным, что в системе, построенной на принципе «код — это закон», не хватает какого-то существенного элемента. Может быть, этого самого закона? Который не есть код.

Умны ли умные контракты?

Прежде всего, хотелось бы обратить внимание на, казалось бы, очевидную и понятную даже не программистам (а программистам уж и подавно) мысль: так называемые «умные контракты», скажем, на том же Ethereum, ни в коем случае не являются умными.

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

Проблема неизменности и независимости реестров

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

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

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

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

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

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

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

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

Децентрализация

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

И именно этот уровень был проигнорирован при создании Ethereum и, естественно, The DAO. Именно поэтому при возникновении проблемы перед Ethereum было только два варианта решения: «пусть все остается как есть» или «давайте откатим все назад и запустим заново».

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

Неизменность кода

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

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

Посредники

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

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

Закон есть закон

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

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

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

Итак, код это не закон — он не решает проблем. Он, как и люди, может их только создавать. И закон — это не код, а прежде всего способ привлечения человеческого разума для решения проблем и устранения ошибок кода.

Подписывайтесь на ForkLog в социальных сетях

Telegram (основной канал) Discord Instagram
Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Рассылки ForkLog: держите руку на пульсе биткоин-индустрии!

*Ежедневная рассылка — краткая сводка наиболее важных новостей предыдущего дня. Чтение занимает не больше двух минут. Выходит в рабочие дни в 06:00 (UTC)
*Еженедельная рассылка — объясняем, кто и как изменил индустрию за неделю. Идеально подходит для тех, кто не успевает за новостным потоком в течение дня. Выходит в пятницу в 16:00 (UTC).

Мы используем файлы cookie для улучшения качества работы.

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

OK
Exit mobile version