Предположим, вы хотите сделать ставку на исход будущего хардфорка Биткоина, каким образом вы бы это сделали? Этот вопрос возник прошедшей весной, когда Роджер Вер, инвестор и сторонник Bitcoin Unlimited, принял вызов от пользователя под ником Loaded. Пари заключалось в том, какой из блокчейнов после хардфорка сети будет доминировать.
Спор возник тогда, когда проект Bitcoin Unlimited (сейчас Emergent Consensus, EC), ярым сторонником которой является Вер, предложил снять ограничение на предельный размер блока. Это было задолго до того, как появилось предложение SegWit2x.
Суть спора заключалась в следующем. Пользователь под ником Loaded в сообщении, оставленном на форуме Bitcointalk, предложил Роджеру Веру обменять по курсу один к одному BTC на BTU (предполагаемое название второго блокчейна Биткоина) в случае хардфорка. Пользователь указал в сообщении адрес кошелька, содержащего 40 000 BTC и доказательства владения им.
«Роджер Вер, предлагаю тебе сделку – обмен 1 к 1. Готов поменять от 60 000 до 130 000 моих BTU на твои BTC», - говорилось в сообщении. Вер ответил, что согласен обсудить детали обмена.
Заинтригованные пари и суммой, которую был готов поставить Вер (примерно 120 миллионов долларов в биткоинах на тот момент), исследователи Патрик МакКорри (Patrick McCorry) из Университетского колледжа Лондона и Этан Хейлман (Ethan Heilman) из Университета Бостона, совместно с Эндрю Миллером, доцентом Иллинойского университета, начали искать способ реализовать это пари.
В итоге они выпустили документ, излагающий технические детали, необходимые для осуществления пари.
Технические трудности
Чтобы лучше понять проблему, которую пытались решить МакКорри, Хейлман и Миллер, стоит внимательнее рассмотреть условия сделки, которую хотят заключить Loaded и Вер.
Во-первых, каждой из сторон необходимо будет отложить 60 000 BTC до хардфорка. После разветвления сети и появления двух блокчейнов, каждая из сторон будет иметь монеты в обоих блокчейнах – по 60 000 BTC и 60 000 BTU. Тогда Loaded обменяет свои 60 000 BTC в одной сети на 60 000 BTU Роджера в другой. После того, как обмен будет совершен у Loaded будет 120 000 BTC, а у Вера – 120 000 BTU.
Главный вопрос заключается в том, кто же по итогу окажется богаче.
Однако такую схему нелегко реализовать. Несмотря на то, что быстрые межсетевые транзакции кажутся наиболее очевидным решением проблемы, этот способ может сработать только после хардфорка, когда появятся две сети. До этого будет только одна сеть. Таким образом фокус состоит в том, чтобы найти путь для каждой сторон произвести обмен до форка, а затем и после него. А так как SegWit еще не активирован, решение должно также принимать во внимание пластичность транзакций (transaction malleability) – проблему, которая только все усложняет.
Однако Хейлман и МакКорри отметили, что они отлично провели время, занимаясь поиском решения и рассмотрением проблемы пластичности.
«Это гораздо сложнее, но от этого только веселее», - сказал Хейлман.
Как это работает
Предложенное исследователями решение – модифицированная версия быстрого протокола обмена данными, который базируется на двух обременениях транзакций: CheckTimeLockVerify (CTLV) и хэшлоках. CTLV устанавливает транзакции на момент времени в будущем, а хэшлоки требуют «секрет» (прообраз хэша) для разблокировки выхода транзакции.
Стоит также отметить, что протокол будет работать не только в случае хардфорка BU, но и любого другого форка, который имеет так называемую «защиту от повтора» - то, что позволяет быть уверенным в том, что транзакции, появляющиеся в блокчейне после разветвления, не дублируют друг друга.
В итоге сделка будет выглядеть примерно следующим образом.
Сначала Вер вычисляет «секрет» (прообраз) и хэширует его. Затем три транзакции должны быть созданы и подписаны обеими сторонами до форка. Таким образом, когда блокчейн разветвится, Вер и Loaded нужно будет только совершить транзакции, чтобы получить свои депозиты.
Фонд транзакции
Для совершения сделки Вер и Loaded вносят по 60 000 BTC в «фонд транзакции». Эта транзакция имеет три выхода. Один связан с монетами Вера, другой – с монетами Loaded и третий выступает в качестве страховки от ошибки, позволяя Loaded отменить транзакцию, если Вер откажется подписать любые внесетевые транзакции, необходимые для совершения сделки. Для сохранения денег в безопасности до форка, каждый выход имеет замок с блокировкой в определенное время.
Теперь, когда деньги для сделки находятся в сохранности, оба участника могут перейти к добавлению своих цифровых подписей к еще двум транзакциям. Это определит то, как деньги в фонде транзакции будут потрачены после форка.
Бартерная сделка
«Бартерная сделка» (swap transaction), на самом деле – пара сделок. При ее активации, одна транзакция забирает 120 000 BTU из сети BU и отсылает их Веру, в то время как другая транзакция отправляет 120 000 BTC из сети BTC пользователю Loaded. Чтобы убедиться, что каждая транзакция работает только в той сети, в которой должна, протокол использует защиту от повтора, которая уже включена в его обновление. Таким образом, каждый из участников не сможет получить монеты в обеих сетях.
Когда придет время, за активацию сделки будет ответственен Вер. Чтобы потребовать свои средства из форка BU, ему придется раскрыть секрет, созданный в самом начале. С этим секретом Loaded сможет автоматически и быстро получить все свои средства из форка BTC. Но тут есть подвох. Вер может сначала решить подождать и посмотреть, что будет происходить с рынком. Если сеть BU будет выглядеть не очень хорошо, он может передумать и не захотеть совершать сделку. Еще одна транзакция выступает в качестве защиты от такого поведения.
Штрафная транзакция
Чтобы стимулировать Вера на своевременное совершение сделки, есть и третья «штрафная транзакция», которая также создается заранее. Подписывая штрафную транзакцию, Вер соглашается отдать все монеты Loaded, в случае, если он решит не совершать сделку. Если Вер не подпишет транзакцию заранее, то Loaded использует защиту от ошибки в фонде транзакции, чтобы отменить всю сделку.
Стоит еще раз отметить, что все упомянутые транзакции должны быть созданы и подписаны до форка.
Делайте ваши ставки
В случае осуществления хардфорка EC, Вер, который уже давно продвигает идею блоков большего размера, считает, что сеть EC будет в выигрыше. Но готов ли он выполнить условия сделки, которую ему предложил Loaded? Если он согласится, то как говорят МакКорри и Хейлман они будут просто счастливы помочь провести сделку. Они также считают, что другие разработчики также присоединятся к их усилиям. Теперь остается только ждать окончательного решения Вера.
Хейлман отмечает: «Я не живу надеждой на хардфорк Биткоина, однако, если он все же произойдет, мы сможем понаблюдать за исходом интересного пари».
С другой стороны, велика вероятность того, что условий для проведения пари не будет. Это произойдет в том случае, если сработает соглашение SegWit2X и хардфорк будет проведен после активации SegWit и при поддержке подавляющего большинства членов сообщества. В таком случае, изменение размера блока произойдет не про правилам консенсуса BU (EC), а по правилам SegWit2X, что формально и фактически позволяет участникам отказаться от него. Кроме того, второго блокчейна со сколько-нибудь существенной долей узлов и/или хэшрейта просто не появится, и сеть Биткоина останется единой. За такой вариант, беспорно, проголосуют все разумные пользователи. Сеть с десятками миллиардов капитализации - не лучшее поле для игр.