Несколько месяцев назад мне захотелось разобраться, о чём весь этот хайп: биткоин, токены, смарт-контракты, ICO. С биткоином всё было относительно просто, ведь есть замечательная книга bitcoinbook.
Со смарт-контрактами дело обстояло сложнее. Как оказалось, виной тому не самое удачное название. Когда мы слышим слово "контракт", в голову приходит юридический смысл термина: договор между двумя или более сторонами. И такое понимание смарт-контрактов имеет право на существование, но суть явления значительно шире, и контракт — не самый интересный и важный случай.
На волне популярности ICO зашла речь о государственном регулировании. Я не фанат ни государства, ни регулирования, но нужно признать, что государство — один из важнейших институтов, и без него не обойтись. Тем не менее мне кажется, что сообщество сфокусировало усилия на частном случае проблемы, причём не самом важном. Рассматриваемая технология, при правильном её применении, может до неузнаваемости изменить очень многие сферы жизни. Вместо того, чтобы рассматривать изолированный случай ICO и придумывать регулирование "по аналогии" с IPO, стоит подойти к делу более системно.
Когда появляется новая технология, и не совсем понятно, как её применять, возникает соблазн ориентироваться на старые модели. Так было со смартфонами: первые версии смартфонов на Windows Mobile пытались вместить интерфейс настольной операционной системы в маленький экран; с иконками, мышью и кнопкой "Пуск". Такие смартфоны вполне можно было использовать, но настоящая революция случилась, когда разработчики поняли, что смартфон — это не маленький компьютер, а нечто принципиально иное, и взаимодействие с пользователем должно строиться совсем по другим моделям.
Продолжная аналогию со смартфоном: смарт-контракты — это не "самоисполняющиеся контракты". Чтобы понять, как они встроятся в нашу жизнь, нужно разобраться, чем же они всё-таки являются, а затем тщательно подумать, как их свойства можно использовать себе на благо.
Сразу оговорюсь, что не претендую на роль эксперта в этой области. Цель этого текста — изложить моё видение и стимулировать диалог. Вполне может оказаться, что в каком-то месте я сказал ерунду или упустил что-то очень важное. В таком случае, добро пожаловать в комментарии.
Вторая оговорка относится к техническим особенностям блокчейн-систем. Для простоты я предолагаю, что все заявленные гарантии эти систем действительно исполняются. Мы рассматриваем концептуальные вопросы применения, поэтому уязвимости, недочёты и слабые стороны конкретных реализаций остаются за скобками — это тема для отдельного обсуждения, в котором я не квалифицирован участвовать. Кроме этого, когда я употребляю слова вроде "невозможно", они на самом деле означают "очень дорого в смысле времени и ресурсов". Гарантии блокчейна носят вероятностный характер, поэтому являются "гарантиями" в практическом, а не логическом смысле слова.
Компьютер бога
Для начала я хочу предложить забыть слово "контракт" и посмотреть на явление с почтительного расстояния.
Представьте, что у вас есть компьютер. Он работает так же, как привычные нам компьютеры. На нём можно запускать программы, написанные на специальных языках программирования. Вместе с тем, у него есть несколько важных особенностей:
- его нельзя остановить или уничтожить
- он гарантирует, что инструкции-программы будут исполнены точно так, как их записал разработчик
- им может пользоваться кто угодно, у кого есть доступ в интернет
- каждая программа точно знает, какой пользователь к ней обращается, то есть ни один пользователь не может выдать себя за другого
- программы могут взаимодействовать с другими программами так же, как пользователи
В большинстве существующих реализаций есть ещё одно свойство: каждый пользователь видит, что происходит "внутри" программ, то есть компьютер не может скрывать приватную информацию. Тем не менее, это не фундаментальный принцип, поэтому я поместил его вне основного списка.
Как выглядит программа, запущенная на таком компьютере? У программы есть две части: данные и правила их изменения. Компьютер гарантирует, что данные не будут изменены, если только не существует позволяющего это правила.
Для человека, не знакомого с программированием, сказанное выше скорее всего вносит мало ясности, поэтому рассмотрим элементарный пример.
Контрафакт
Вы — производитель сумкок в премиум-сегменте. Каждому известно, что самая большая головная таких компаний и их клиентов — это подделки. Что ж, у нас есть решение.
Запускаем на нашем компьютере программу, которая выглядит примерно так:
# ДАННЫЕ:
Наименование товара: Сумка Р&К красная из крокодиловой кожи с золотыми пряжками
Серийный номер: 349587
Производитель: Компания Рога и Копыта
Владелец: Компания Рога и Копыта
# ПРАВИЛА
1: Изменить поле "Владелец" может только пользователь, указанный в данный момент в поле "Владелец".
Что происходит дальше? Дальше мы, производитель, передаём сумку на оптовый склад, меняя владельца на "Оптовый склад". На оптовый склад приезжает представитель магазина, и склад продаёт магазину сумку и меняет владельца в электронном сертификате на "Магазин неприлично дорогих сумок".
Клиент приходит в магазин в поисках сумки. Желая защититься от подделок и других неприятных сюрпризов, он сверяется с компьютером и видит следующее:
# ДАННЫЕ:
Производитель: Компания Рога и Копыта
Наименование товара: Сумка Р&К красная из крокодиловой кожи с золотыми пряжками
Серийный номер: 349587
Владелец: Магазин неприлично дорогих сумок
# ПРАВИЛА
1: Изменить поле "Владелец" может только пользователь, указанный в данный момент в поле "Владелец".
На сумке выбит номер 349587
, видит клиент. Компания-производитель действительно объявила, что выпустила сумку с таким серийным номером, ведь никто другой не может выдать себя за компанию "Рога и Копыта". И, что самое главное, существует непрерывная цепочка передачи товара, от производителя сумок и до магазина.
Клиент не доверяет магазину. Есть подозрение, что владельцу магазина выгоднее продать убедительную копию, сшитую руками бесправных рабочих в какой-нибудь жаркой стране. Но клиент доверяет компании-производителю и гарантиям системы.
Можно возразить: а почему бы не сшить подделку с серийным номером 349587
? Можно поступить и так, но чтобы её потом продать, нужно быть текушим владельцем подлинной сумки, что не имеет никакого экономического смысла, если вы торгуете сумками.
Итак, клиент теперь знает, что сумка подлинная и не была украдена.
Несмотря на то, что этот пример игрушечный, он демонстрирует одну из важнейших возможностей смарт-контрактов: регистрировать право собственности и надёжно передавать его между владельцами.
Блокчейн-системы часто называют словом trustless, то есть позволяющими пользователям взаимодействовать, не доверяя друг другу. Это действительно так в некоторых частных случаях (биткоин), но в большинстве ситуаций доверие всё равно требуется. В примере с контрафактом мы должны доверять производителю. Система же позволяет распространить это доверие дальше по цепочке.
Цифровые деньги
В примере выше происходят два пареллельных процесса. Право собственности двигается от производителя к конечному потребителю, а деньги двигаются в обратном направлении. Было бы удобно объединить эти две составляющие.
Представим, что нашёлся отважный банк, который разработал и запустил такой смарт-контракт:
# ДАННЫЕ
Создатель: Банк "Доверие"
Счета:
Рога и Копыта : 1000000
Оптовый склад : 900000
Магазин : 500000
Клиент : 100000
Контракт Сумка: 0
# ПРАВИЛА
1: Значения в поле "Счета" означают количество виртуальных денег на счёте данного пользователя.
2: Любой пользователь может перевести деньги со своего счёта на счёт другого пользователя.
3: Банк "Доверие" обязуется в любой момент обменять виртуальные деньги на национальную валюту (и обратно) по курсу 1к1.
Чтобы обеспечить работу такого контракта, у банка должна быть возможность свободно начислять и снимать деньги со счетов пользователей — точно так же, как это происходит сейчас при переводе наличных денег на виртуальный счёт. То есть, пользователи должны доверять банку. Тем не менее, транзакции инициируются пользователями, а проводятся системой; единственное, что делает банк — это гарантирует обмен токенов на фиатные деньги по фиксированному курсу.
Также в контракте можно заметить кое-что странное. Сумка тоже имеет свой счёт в банке. Немного позже станет ясно, зачем это нужно, а пока вспомним, что программы могут взаимодействовать с программами, то есть контракт в каком-то смысле является равноправным пользователем системы. Так что ничто не мешает сертификату иметь свой счёт. Разумеется, сертификат не может прийти в банк и получить наличные или положить наличные на счёт, но это и не нужно.
Предположим, что к моменту выпуска сумки каждый из четырёх участников процесса уже обменял какое-то количество национальной валюты на виртуальную.
В своей исходной форме контракт-сертификат позволяет владеть сумкой и передавать право собственности. Давайте дополним его так, чтобы сумку можно было продать за виртуальные деньги, причём продавец и покупатель не должны доверять друг другу — а только банку и производителю.
# ДАННЫЕ:
Производитель: Компания Рога и Копыта
Наименование товара: Сумка Р&К красная из крокодиловой кожи с золотыми пряжками
Серийный номер: 349587
Владелец: Магазин неприлично дорогих сумок
Покупатель: (пусто)
Цена: (пусто)
# ПРАВИЛА
1: Изменить поле "Владелец" может только пользователь, указанный в данный момент в поле "Владелец".
2: Владелец может устанавливать значение поля "Покупатель" на любого пользователя системы.
3: Владелец может устанавливать значение поля "Цена" на любое положительное число.
4: Если значения полей "Покупатель" и "Цена" не пустые
4.1: Если на виртуальном счёте контракта в банке находится сумма, равная цене продажи, деньги переходят на счёт Владельца, а затем Владельцем становится Покупатель. Поля "Покупатель" и "Цена" становятся пустыми.
4.2: Если сумма на виртуальном счёте контракта в банке больше или меньше Цены, она должна быть переведена на счёт пользователя "Покупатель".
Получается, что теперь передача права привязана к передаче виртуальных денег. Они либо происходят одновременно, либо не происходят вообще. У продавца нет причин опасаться, что он передаст право собственности покупателю, а банк отменит транзакцию. Покупатель знает, что если он заплатит нужную сумму, право перейдёт ему, либо деньги вернутся назад. Конечно же, такой контакт не может гарантировать передачу физического объекта из рук в руки, но об этом мы поговорим ниже.
Главная государственная услуга
К сожалению, в реальной жизни всё не так просто. Конечно же, наш компьютер не идентифицирует непосредственно пользователей (людей). Для идентификации нужны специальные ключи шифрования.
Они называются "приватный ключ" (он должен оставаться в секрете) и "публичный ключ" — он является идентификатором пользователя в системе, вроде логина на традиционном сайте. Публичный и приватный ключи связаны математически таким образом, что только владелец приватного ключа может доказать, что он является именно этим пользователем, причём для этого не нужно раскрывать приватный ключ. Получается, что доступ пользователя к системе обеспечивается физическим доступом пользователя к приватному ключу, который как правило хранится на каком-то носителе данных.
Предполагается, что тот, у кого есть доступ к ключу компании "Рога и Копыта", является её представителем и действует в её интересах. Что, конечно, не всегда так.
Ключ можно потерять или украсть. Можно силой заставить владельца выполнить необходимые злоумышленнику действия. В нашем примере цена такой уязвимости — несколько сотен долларов. Но представьте, что мы продаём не сумки, а, например, недвижимость или доли в бизнесе.
Здесь в дело вступает государство. Несмотря сомнительное стремление заполнять собой всё новые и новые сферы жизни, у государства есть несколько полезных свойств: оно безлично, обладает монополией на насилие и большим запасом доверия. Тот, кто сталкивался с работой государственной машины, может горько усмехнуться на последнее утверджение, но это факт. Конкретные функции государства или его представители могут потерять ваше доверие, но, если присмотреться внимательнее, окажется, что мы все доверяем документам и сертификатам, выданным государством (паспорт гражданина, водительское удостоверение, свидетельство права собственности). Заключая сделки, мы предполагаем, что они признаются государством, и наши интересы находятся под его защитой.
Иногда говорят, что блокчейн приведет нас к цифровой анархии, но это не более, чем мечты. Хитроумная криптография не избавляет нас от проблем физической безопасности.
Как же может выглядеть роль государства?
Джон Локк на стероидах
Самая очевидная проблема, которую нужно решить — это физический доступ пользователя к ключу и идентификация. Систему нужно выстроить таким образом, чтобы при потере ключа человек не терял доступ к своим контрактам. Для этого нам нужна некая сущность, которая управляется указанным ключом, но ключ может заменить государство по запросу гражданина.
То есть, во всех примерах выше мы должны заменить пользователей (владельцев ключа) на специальный контракт, который символизирует сущность, которая может совершать юридически значимые действия (физическое или юридическое лицо).
Давайте представим, что вы храните токены в банке "Доверие". Счёт привязан к приватному ключу. Теряя ключ, вы навсегда теряете доступ к токенам. Что будет, если счёт привязать не к ключу, а к контракту, являющемуся аватаром физического лица?
# ДАННЫЕ
Эмитент: Государство
Тип: Физическое лицо
Владелец: публичный ключ 2398457325034205873245
# ПРАВИЛА
1: Эмитент может менять владельца.
2: Владелец может выполнять любые действия от имени этого контракта.
Теперь, в случае утери ключа, вы можете прийти к государству и попросить выдать вам новый ключ, сменив на него владельца вашего аватара. Чтобы немедленно заблокировать все действия этого контракта, у вас может быть доверенное лицо, которое имеет такую возможность.
Поскольку государство обладает нашим эксклюзивным доверием при идентификации людей, без него сложно обойтись. Запрещает ли нам блокчейн использовать смарт-контракты как-то по-другому, например привязывать токены напрямую к ключу, минуя выданный государством сертификат? Вообще-то не запрещает, но государство регулирует эту сферу — не в смысле "рассказывает всем как жить". В данном случае это означает, что государство заявляет: только смарт-контракты, соответствующие установленной форме, находятся под моей защитой. Если вы совершаете транзакции не в установленной форме, и случается что-то непредвиденное, это ваши проблемы.
Мы заменили пользователя физическим лицом. Но у контракта-физического лица есть эмитент, и это ещё одна важная сущность: государство. Эту сущность тоже придётся представить в виде смарт-контракта, по тем же самым причинам: безопасность. Если гражданин в случае непредвиденных обстоятельств может обратиться за помощью к государству, государству обращаться некуда. Я не буду рассматривать детали реализации такого контракта здесь — это тема для отдельной статьи. Вероятно, государство должно управляться несколькими ключами, которые голосованием могут исключить какой-то ключ, если тот оказался скомпрометирован.
Контракт-государство символизирует юрисдикцию, суверена, общественный договор — как вам больше нравится. Для него ещё предстоит придумать термин, но мне приглянулось слово Империй. Вообще, заимствовать терминологию из древнеримского права мне кажется хорошей идеей: термины не будут пересекаться, так что при обсуждении не придётся указывать, о каком гражданение идёт речь: о настоящем или гражданине-контракте.
Следующие шаги
Конечно же, я опустил очень много деталей ради того, чтобы объяснить концепцию в общих чертах. Схема складывается такая: мы переносим юридические сущности в смарт-контракты, описывая то, по каким правилам они взаимодействуют. Базовые элементы схемы — это государство, физические лица, деньги и право собственности, и именно с них следует начать.
Вероятно, информация о деньгах будет храниться в одном контакте, а государство будет предоставлять лицензированным банкам право обменивать национальные валюты на токены.
Какие ещё юридические сущности предстоит перевести в смарт-контакты?
- юридические лица: ИП, ООО, АО
- налогообложение
- право собственности на разные объекты: недвижимость, автомобили
- кредитование под залог, с автоматической передачей права собственности в случае невыполнения условий предоставления кредита
- различные лицензии
- гражданские состояния: физическое лицо может быть дееспособным, недееспособным, живым, мёртвым, состоять в браке или других гражданских отношениях
- завещание и автоматическое наследование
- голосование и назначение на должность: избранное лицо может автоматически "назначаться" на должность, при этом правами обладает контракт-должность, а обладатель должности меняется в соответствии с заданными правилами
Все бизнес-модели, которые я встречал на сегодняшний день, связаны с переносом старых процессов на рельсы смарт-контрактов. Мы слышали обещание избавить нас от посредников, при этом множество появившихся стартапов пытаются заниматься посредничеством с помощью блокчейна. Мы видим всё те же платежные системы и торговые площадки. Я надеюсь, что скоро появятся другие компании, которые сконцентрируют свои усилия на предоставлении удобного интерфейса к общей системе децентрализованного обмена и извлечении из блокчейна коммерчески полезной информации.
Автор: Михаил Акимов