Обычно блокчейн биткоина не считают подходящим для самовыполняющихся условных платежей, известных как смарт-контракты или умные контракты. Хотя он даёт базовые возможности программирования, позволяющие устанавливать ограничения по времени и схемы, включающие мультиподписи, есть мнение, что Ethereum, Ethereum Classic или Qtum лучше поддерживают более продвинутые приложения.
Однако новая волна исследований заставляет пересмотреть такой подход. Например, Scriptless Scripts, проект, разрабатываемый по инициативе математика из Blockstream Эндрю Поэлстры, с помощью магии криптографии уводит умные контракты из чейна. Благодаря этому сохраняется надёжность биткоина и не требуется масштабной поддержки умных контрактов на уровне его протокола.
С помощью Discreet Log Contracts (DLC), концептуально схожих с Scriptless Scripts, можно разместить на биткоине другой класс смарт-контрактов. Этот проект разрабатывает один из авторов white paper первоначальной Lightning Network Тадж Драйя. Недавно DLC были представлены на конференции Scaling Bitcoin в Стэнфорде. Они могут использоваться в работе страховых компаний на основе блокчейна, в фьючерсных контрактах, в привязанных к доллару коинах и т.д.
Bitcoin Magazine поясняет, как это работает, предлагаем вам адаптированный перевод статьи.
Пари
Многие умные контракты различных типов в конечном счёте сводятся к своего рода пари.
Например, человек, запланировавший путешествие, желает оградить себя от риска остаться дома из-за возможной забастовки пилотов. Он может заключить пари, поставив на то, что забастовка случится. Если забастовка не состоялась, то ставка теряется, подобно страховому взносу. Если же забастовка происходит, то человек выигрывает пари, получая причитающуюся сумму, словно страховую выплату.
Более интересным примером может послужить ситуация, в которой участники делают ставку на цену биткоина по отношению к доллару (фьючерсный рынок). Если кто-то ставит на то, что цена биткоина пойдёт вниз, и это действительно происходит, то человек «выигрывает» дополнительные биткоины, а если цена растёт, то он «теряет» биткоины. Любопытно, что процесс можно структурировать таким образом, что человеку, заключающему все эти пари, практически гарантировано получение одного и того же количества американских долларов в биткоинах независимо от поворота событий.
Подобное явление можно использовать для создания на блокчейне биткоина «стейблкойна» (от англ. stable — «стабильный», «устойчивый») с фиксированной стоимостью в долларах. (Следует заметить, что в чрезвычайных обстоятельствах подобный проект не может быть реализован — скажем, если биткоин рухнет и его стоимость в долларах окажется равна нулю, но в большинстве случаев схема представляется рабочей.)
Подобные умные контракты, хотя и представляют интерес, не могут быть осуществлены только на базе блокчейна. Блокчейн не в состоянии сообщить ни о забастовке пилотов, ни об обменном курсе доллара и биткоина. Требуется получать данные из-за пределов блокчейна, и здесь на сцену выходят так называемые оракулы.
Оракулы
По сути, оракулы — это доверенные источники информации. Они обеспечивают пользователя данными, которые сам блокчейн не может прочитать. Такие данные можно встроить в умный контракт, после чего он будет выполняться с их помощью.
Поскольку вышеописанные умные контракты в любом случае зависят от внешних источников данных, есть смысл доверять оракулам и таким образом упростить умный контракт. Вместо того чтобы прибегать к более изощрённым решениям, можно, например подключать оракулов к сравнительно простой схеме мультиподписей.
Приведём простой пример. Элис и Боб хотят поспорить на биткоин перед решающим матчем между Аргентиной и Бразилией на чемпионате мира по футболу. Элис делает ставку на Аргентину, Боб уверен в победе Бразилии. Чтобы заключить пари на базе блокчейна, Элис и Боб посылают по биткоину на адрес с мультиподписью, где трата монет требует наличия двух или трёх подписей. Один из трёх ключей хранит Элис, другой — Боб, а третий — оракул.
Если выиграет Аргентина, Элис и Боб должны будут подписать транзакцию, которая перешлёт оба биткоина Элис. Поскольку для этого необходимы лишь две подписи, то подписей Элис и Боба достаточно и оракул так и не вступает в игру. (Естественно, в случае выигрыша Бразилии дело обстоит противоположным образом: Элис и Боб подписывают транзакцию, отсылающую оба биткоина Бобу.)
Проблема возникает в том случае, если в случае победы Аргентины проигравшая сторона — Боб — отказывается подписывать транзакцию. Именно в таком сценарии оракул воспользуется третьим ключом, чтобы помочь Элис получить два биткоина. Важно, что благодаря присутствию такой опции у Боба нет соблазна не подписывать транзакцию. (Это ещё более справедливо в том случае, если Элис и Боб предоставляют какой-либо залог с тем, чтобы Боб смог получить часть своего биткоина обратно после подписания транзакции).
В идеале подпись оракула вообще не должна понадобиться; Элис и Боб способны завершить пари самостоятельно.
Тем не менее простое решение в виде мультиподписи и оракула имеет слабые стороны. Например, оракул, скорее всего, понадобится на стадии заключения пари, по крайней мере он должен быть доступен в качестве своего рода судьи всякий раз, когда в этом возникает необходимость. В теории оракула можно подкупить: скажем, Боб предложит ему часть добычи, если они сговорятся похитить обе монеты. Кроме того, оракул в курсе всех действий Элис и Боба: ему точно известно, на что они ставят и сколько. При этом и все остальные смогут узнать, что Элис и Боб использовали для пари оракула (и, соответственно, что это было пари).
Все эти проблемы можно решить с помощью Discreet Log Contracts. Их использование позволяет сохранить все преимущества решения в виде мультиподписи и оракула, но избежать большинства уязвимых мест этой схемы.
Платёжные каналы
Уже упоминалось, что Драйя, который сейчас работает над проектом Массачусетского технологического института Digital Currency Initiative, — один из авторов white paper протокола Lightning Network. В основе DLC лежит аналогичная концепция.
Ключевая идея Lightning Network заключается в том, что два человека могут открыть платёжный канал, позволяющий им взаимодействовать друг с другом. Канал использует базовые возможности программирования биткоина (такие как адреса с мультиподписями и ограничения по времени) в сочетании со схемами, позволяющими осуществлять транзакции на основе других транзакций, и всё это — не оповещая о действиях в сети до тех пор, пока в этом не возникнет нужды.
По мере того как люди взаимодействуют друг с другом в рамках канала, платёжный канал обновляется, приобретая новый баланс, или так называемое состояние канала. Любая из сторон может в любое время «сбросить» текущее состояние канала на блокчейн и по желанию запросить свою часть баланса. Что немаловажно (здесь реализуются базовые возможности программирования биткоина), обе стороны могут безопасно опубликовать лишь текущее состояние канала. Если они попытаются обмануть, предоставив данные о более раннем состоянии, то вторая сторона сможет вывести все монеты до единой.