Будущее биткоина

В данном посте речь пойдет не про курс биткоина к презренной зеленой бумажке, а о том что ожидает биткоин в технологическом плане в ближайшем будущем.

Не так давно биткоин преодолел отметку в 10 тыс, долларов, после чего провёл пару днй в плоской коррекции, нарисовав две не очень приятные для говядины свечки подряд:

После чего, ракетой полетел дальше, и выше и выше…

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

Поскольку биткоин и лежащая в основе технология блокчейн относительно новы, например они куда свежее чем например СТО или ядрена бомба, или даже полевой транзистор, но уже всё таки постарше чем такие умопомрачительные вещи как CRISPR (про него в другой раз), попытка проникнуть в суть этой технологии может показаться пугающе сложной. Это статья написана для того, чтобы осветить проблему масштабирования, которая в настоящий момент стоит перед биткоином, и чего можно ожидать в ближайшем будущем для ее решения.

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

Масштабируемость биткоина, или почему #NO2X

Когда Биткоин был впервые введен в оборот, его полумифический создатель Сатоши Накамото, описал Биткойн в своём вайтпепере как «исключительно пир-ту-пир версию электронной наличности, которая позволит осуществлять прямой обмен между участниками сети, без участия какого-либо централизованного института посередине». Привед, центробанки!

Одной из фундаментальных ценностей биткоина была почти мгновенная и безопасная транзакция от пользователя к пользователю (пир-ту-пир). Сейчас, как никогда ранее, Биткоин становиться превалирующей мировой крипто-валютой, с ростом за последний год более чем в 12 раз.

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

Уже из одного этого графика становится очевидна основная проблема Биткоина — что такое, пусть миллион транзакций в сутки в глобальном масштабе — капля в море, та же Visa в сутки осуществляет 150+ миллионов, т.е. около 1600 в секунду. Теперь вспомним, что все транзакции в сети Биткоина записываются в блоки размером около 1 мегабайта, т.е. миллиона байт. Блоки идут +- раз в 10 минут, т.е. 600*1600=960000, т.е. на одну транзакцию должно приходится чуть больше байта, чтобы обеспечить пропускную способность визы. Это нереально, т.к. в транзакцию входит адрес отправителя, получателя, количество битков, временной отпечаток, нонс, хэш предыдущего блока. Ну никак. Небольшая инфографика о том, что на самом деле происходит при транзакции в сети биткоина:

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

  • медиана размера транзакции находится в районе 250 байт(именно медиана, потому что мы знаем что у 9 медсестёр и одного игорюши сечина средняя зп огого какая)
  • Как уже упоминалось, размер блока около 1 мб.
  • т.е. в блоке около 4000 транзакций
  • время блока — около 10 минут
  • т.е. мы получаем 6,6(6) транзакций в секунду.  маловато.

Транзакции которые не вошли в блок попадают в так называемый mempool который есть на каждой ноде, где и находятся до попадания в блок. И вот у нас в мемпуле сидит тысяч 100 транзакций ждущих подтверждения. И как майнерам выбрать какую именно подтверждать? Правильно, с помощью платы за транзакцию. Обычно она исчисляется с сатоши(10 миллиардных биткоина) за байт, и может доходить до 1000 сатоши/байт. Еще немного математики:  0.00000001 * 1000 * 250 = 0.0025 биткоина, т.е. в моменте 40 долларов. Дорого. Здесь следует сделать оговорку, что это плоская плата, будете переводить 0.01 биткоина или 10 или 100 — не важно, плата будет одинаковой.

Теперь представим что Саша хочет послать Маше 10 баксов — т.е. он либо заплатит еще 10 за транзакцию, либо будет ждать несколько десятков блоков.

Одним из предлагаемых решений был так называемый SegWit2x, который предполагал увеличение блока в два раза, каждый раз когда надо. По небольшому размышлению становится понятно, что это — путь в никуда. пусть 10 транзакций в секунду до 100000 в секунду даст нам увеличение блока в 10 тысяч раз, т.е. до 10 гб. Как такие блоки передавать по сети? я уж не говорю что хранить такой блокчейн можно будет только на очень больших массивах жестких дисков или в облаке, что приведет к предельной концентрации корневых нод и всей сети. Но есть и другие пути…

Segregated Witness (SegWit)

Или разделённое свидетельство. Оно уже было имплементировано в сеть, еще в августе. Суть в том что размер транзакции уменьшается, тем самым позволяя большему количеству транзакции войти в блок. Сегвит это мягкая вилка (soft fork), т.е. полностью совместимая с предудущими версиями блоков.

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

Более того, сегвит изменяет определение размера транзакции: вместо того чтобы исчислять его в байтах, ей присваивается вес, вес блока составляет 4000. До-сегвитовская транзакция имеет вес 4, а поддерживающая сегвит 0.25, что позволяет поместить в блок примерно в 16 раз больше транзакций при увеличении размера блока максимум до 2 мб. Однако для того, чтобы полностью перевести всю сеть биткоина на сегвит, необходимо чтобы все корневые узлы и все кошельки внедрили поддержку сегвита, что пока идёт не очень быстро (в данном случае уместна аналогия с апгрейдом с винХП на вин7, против перехода с винХП на хромОсь в случае харфорка сегвитХ2), и к текущему моменту только 12% всех транзакций идут в сегвит формате.

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

Слоёные решения

Дя, я долго подбирал русский аналог для multi-layered и многоуровневое решение как то не отражает сути.

Как уже описывал выше, покупка чашки кофе за биткоины может оказаться не самой удачной идей (как впрочем и используя банковскую карту), и цена транзакции может быть выше покупки и время подтверждения в лучшем случае 10 минут — в общем не-не-не.

Протокол Lightning Network — одно из текущих решений, находящихся в разработке, от которого ожидается решение проблемы, или во всяком случае значительное её смягчение. Эта сеть состоит из двух дополнительных слоёв, которые позволяют пользователям создавать прямые каналы между собой, фактический позволяя осуществлять неограниченное количество транзакций между собой практический мгновенно.  Так так, скажет внимательные читатель, вот мы тут уединимся и наплодим целую кучу биткоинов, которые не в сети, а потом…. А вот потом не будет, и сейчас разберем каким образом все предполагается осуществлять.

Второй слой

Пользователь присоединяется к сети второго слоя производя транзакцию в основной блокчейн, в которой он декларирует количество биткоинов которое он собирается использовать в сети второго слоя. После чего пользователь присоединяется к группе связанных между собой узлов, называемых фабриками каналов (channel factories). Этот канал по сути представляет собой группу пользователей, заинтересованных в проведении между собой большого количества мелких транзакций (вот же ж мечта состоятельного разумного человека — раз в месяц выделяет сотую биточка на кофе, сотую на вино и т.д. присоединяясь к соответствующим каналам, идеальное планирование расходов!). После чего фабрики каналов уже на третьем слое делают возможным неограниченное количество транзакций между участниками, но в рамках декларированного количества биткоинов.

lightning network channel structure

Третий слой

Каналы микроплатежей создаются на третьем уровне для обеспечения расчетов между любыми двумя участниками (в картинке наверху их 3 посколку участников три, простейгая комбинаторика, 4 участника — окей, 6, n участников — n*(n-1)/2, на два делим из-за того что сочетания AB = BA в нашем случае). Поскольку на третьем уровне основной блокчейн уже не присутствует, он не может быть использован для подтверждения. Вместо этого используются смарт-контракты (умные контракты, в отличие от тех к которым мы привыкли, они не статичны во времени и не могут быть изменены в одностороннем порядке, как мы это любим), такие как мультиподпись, означающая адрес который может быть подписан несколькими участниками для перемещения фондов, или же хэшированные ограниченные по времени контракты, представляющие собой криптографический подписанный автоматический контракт который замораживает фонды на определенное заранее время, и коль скоро у вас в кармане нет квантового компьютера который сломает криптографическую подпись.

Рассмотрим на примере, как работает микротранзакция в лаитнинг сети:

  1. Маша хочет зарезервировать 1 биткоин для расчетов с Сашей. Она декларирует этот 1 биткоин в передающую транзакцию в блокчейн. Это означает, что этот 1 биткоин зарезервирован за адресом с мультиподписью, который может быть освобожден если обе стороны решат прекратить действие этого адреса. Сам адрес защищен хэшированным, ограниченным по времени контрактом, который можно интерпретировать так: «У Маши есть 1 биткоин, у Саши есть 0 биткойнов, которые будут освобождены через сутки». Это означает, что у Маши есть на 1 биткоин меньше на сутки, после чего он вернется к Маше с соответствующей записью в блокчейн (если конечно Маша не решит не обламывать Сашу).
  2. Маша, спустя 4 часа, всё таки решает, что ну на биток Саша не тянет, но на 0.1 вполне. Теперь контракт изменяется на «У Маши есть 0.9 биткоина, у Саши есть 0.1 биткоина, которые будут освобождены через 18 часов».
  3. Полные сутки проходят и эта передающая транзакция закрывается, и финальный контракт содержащий балансы Саши и Маши отправляется в блокчейн. Если Саша и Маша хотят продолжать расчеты дальше, то они могут продлить действие контракта сколь им угодно. Если один из них захочет прекратить действие досрочно — то он\она выходит из передающий транзакции, что влечет немедленную публикацию контракта в блокчейн с актуальными на момент выхода балансами.

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

Имплементация лаитнинг сети весьма сложна, и полностью её понять практический с нуля невозможно, но для конечного пользователя это и не важно: слыхали про ПеГеПе? ака pretty good privacy, в ранних имплементациях это было клево, вы полторы минуты стучите рандомно по клавиатуре, у вас создаётся случайный ключ, вы этим ключом шифруете свое сообщение, и шифруете этот ключ публичным ключом адресата, и отправляете шифрованное сообщение и шифрованный ключ, получатель дешифрует ключ своим приватным ключом, и с помощью полученного ключа, наконец расшифровывает ваше сообщение? уже мозг закипел? окей, а если я теперь скажу что тот же самый пгп используется в телеграмме\ватсапе\и т.д. и вы этого даже не замечаете)) Тоже самое произойдёт с лаитнинг сетью со временем.

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

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

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

Шнорр подписи (Schnorr Signatures)

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

  • Начиная с пустого кошелька, Я получаю 1 биткоин в транзакции №1, потом в отдельной транзакции №2 Я получаю ещё 1 биткоин (яхууу!)
  • Теперь я хочу отправить 2 биткоина, у этой транзакции №3, будет 2 входящие транзакции №1 и №2

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

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

текущая и шнорр подпись

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

И еще сверх этого, Шнорр позволяет вводить мультиподпись по цене одной. Не важно сколько подписей нужно  — они все объединяются в одну, Шнорр-подпись.

Шнорр-подписи стали возможны только с внедрением СегВита, поскольку данные подписи не могут быть изменены третьими лицами, они могут быть объединены в одну Шорр-подпись.

MimbleWimble

MimbleWimble — это радикальное, но необыкновенно мощное предложение по улучшению биткоина, которое было сделано анонимно еще в июле 2016.

Названное по имени проклятия из Гарри Поттера, которое заставляло проклятого замолчать (silence же!, ака сало, чертовы нубы блин), МW нацелена на то, чтобы полностью удалить транзакции из блоков. Т.е. оставить в транзакции только входящее количество, исходящее количество и подпись, при том что подпись может быть расшифрована только получателем, соответственно верификация транзакции остается на совести получателя  — не подтвердил, не получил, ок… Я один чую здесь запах пе-ге-пе?

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

Удаление полных данных о транзакции ведёт к существенному снижению объема текущего блокчейна и делает невозможным отслеживание транзакций (просто мечта криптопанков, и кошмар властей и хозяев денег). Более того, с блоками содержащими только не истраченные биткоины (т.е. те что поступили на адрес но никуда оттуда еще не ушли), нодам нужно будет отслеживать только неистраченное количество биткоинов, вместо того чтобы хранить всю историю транзакций, что приведет к огромному росту производительности сети (вспомним что только 3% из всех биткоинов в обороте, остальные лежат в холодную где-то).

Математические детали MW явно не попадают в предмет рассмотрения этой статьи. Однако внедрение, пусть и дающее очевидные преимущества, требует отказа от алгоритма SHA-256, на который опирается вся экосистема биткоина, делая внедрение не реализуемым.

Однако, существуют предложения по имплементации MW в виде так называемого sidechain — стороннего блокчейна с взаимооднозначным соответствием с основным блокчейном биткоина. Эта связь чем то похожа на часовой механизм, или цепную передачу. Эта связь позволит переносить ценность из блокчейна биткоина в блокчейн MW, проводить в ней приватные и мгновенные(во всяком случае значительно более шустрые транзакции), и возвращать ценность в биткоинах в основной блокчейн.

связанная цепь

По факту уже есть группа разработчиков в процессе разработки отдельной криптовалюты на основе MimbleWimble — GRIN; недавно запущенной в тестовом режиме и готовящейся к полноценному запуску в скором будущем (интересно каков будет пре-майн и какое будет ICO:).

Rootstock

Rootstock по какой-то непостижимой причине является одним из наименее обсуждаемых улучшений, но тем не менее одним из самых многообещающих. Rootstock описывают как «первая платформа с открытым исходным кодом для умных контрактов с взаимооднозначным соответствием с Биткоином, которая также позволяет майнерам получать дополнительную награду при помощи совмещенного майнига (одновременная добыча двух монет без какого-либо ущерба для добычи основной, не путать с обычным дуал-майнингом, тут второй алгоритм использует данные первого), позволяя им активно участвовать в РЕВОЛЮЦИИ в умных контрактах». Устал я от всевозможных революционеров, правда ж… доколе?)))

Во многом походя на MimbleWimble, Rootstock разрабатывается как сайдчейн. Его фундаментальная ценность заключается в фокусе на умных контрактах. Rootstock нацелен на то чтобы стать платформой для умных контрактов полной по Тьюрингу(т.е. платформой на которой можно запрограммировать любую вычислимую функцию, пример функции не-вычислимой очень прост: функция равная 0, если в записи числа Pi нет подряд 4х нулей, и равной 1 если есть, поскольку число нулей которое мы может попросить произвольно, а Pi иррационально, что означает что она содержит все возможные комбинации цифр подряд. Для нас эта функция всегда равна 1, для машины всегда 0, потому что за конечное время PI  не вычислить). При этом эта платформа сможет исполнять умные контракты на базе эфира, и разработанные на собственной платформе.

Разработчики Rootstock рассчитывают имплементировать  обширный функционал умных контрактов, сохраняя доминирующую пользовательскую базу пользователей биткоина, с помощью сайдчейна с взаимооднозначным соответствием с блокчейном биткоина. Также она создаётся с расчетом на уже существующую вычислительную мощность сети биткоина, тем самым избегая необходимости отдельно защищать свой блокчейн. Также предполагается внедрить собственный механизм многослойности под названием Lumino, с помощью которого они обещают 20000 транзакций в секунду.

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


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

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

Никоим образом эта статья не освещает всё что происходит в области блокчейна сейчас. Если у вас есть что добавить — оставляете в комментариях.

Данная статья является дополненным и расширенным переводом этой.

Если вам интересно углублять своё понимание биткоина дальше, то вот несколько ссылок:

И конечно можно купить мне пиво или кофе:)

BTC: 1JMRpXEB9kCtpegdFpe6YEx4JEafDxZRTq

ETH: 0xbB7a62236948e12097523EA9dAD489B37BCd2A2F

>:^_^:<