Дорожная карта масштабирования Биткойна

24
ПОДЕЛИТЬСЯ

graf-754x472Мало кто любит вспоминать о базовых технических проблемах Биткойна, тем не менее, они есть. Проблемы эти, если их не решать, способны разрушить основную идею децентрализованных цифровых наличных без единого центра управления. Одной из таких проблем является лимит на размер блока, именно он в последнее время стал предметом жарких споров.

Некоторые наблюдатели и биткойн-разработчики считают (в их числе и главный исследователь Bitcoin Foundation Гэвин Андерсен), что существующий лимит в 1MB на блок является недопустимым ограничением, которое надо устранить. Их логика в том, что при увеличении числа транзакций этот лимит потенциально может сдерживать рост использования и/или содействовать росту стоимости транзакций.

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

bit-network

Гэвин Андресен отвергает эти опасения и считает необходимым “жесткий форк” Биткойна, который бы устранил ограничения на размер блока. Вашему вниманию предлагаются его размышления на эту тему, опубликованные на днях в блоге Bitcoin Foundation.

Дорожная карта масштабирования

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

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

Первоначальная загрузка

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

Джефф Гарзик раздает BitTorrent файл, содержащий Blockchain в его текущем состоянии, чем можно ускорить начальную загрузку данных. Так как блоки данных друг друга подтверждают, вы не должны беспокоиться о безопасности загрузки; в худшем случае вы потратите время и трафик на загрузку поврежденного файла. Тем не менее, повторная индексация всех 20-с-чем-то гигабайт данных все еще может занять много часов на некоторых машинах.

Питер Вилль проделал большую работу над подходом «сначала заголовки», когда скачивается только цепочка заголовков, каждый из которых длиной 80 байт, что в сумме дает всего лишь 25 мегабайт данных. Заголовков вполне достаточно для проверки цепочки, а наполнение самих блоков можно позднее запросить у остальных пиров в произвольном порядке подобно тому, как это делает BitTorrent.

Питер также работает над «libsecp256k1″ — высоко оптимизированной библиотекой для работы с криптографией эллиптических кривых, используемых в протоколе Биткойн. Библиотека находится в стадии тестирования и будет использована как только мы будем убеждены, что она не содержит ошибок и полностью совместима с существующей основой кода OpenSSL.

На Гитхабе, юзер rdponticelli предложил pull request для Bitcoin Core, обеспечивающий его работу на основе «обрезанной» (prunned) базы данных блоков. После того как вы скачали и проиндексировали полную цепочку блоков, единственная причина хранить все данные о старых транзакциях — это для того, чтобы помогать новым пирам при первоначальной загрузке Blockchain.

Вы можете удивиться, что старые блоки не нужны для проверки новых транзакций. Несколько релизов назад Питер Вилль переделал архитектуру Bitcoin Core так, чтобы все данные, необходимые для проверки транзакций, остались в базе данных «UTXO» (выходы неизрасходованных транзакций). Количество исторических данных, которое обязательно необходимо, зависит от степени правдоподобности (вероятности) глубины реорганизации Blockchain. Самая большая реорганизация, когда-либо произошедшая в основной сети, потребовала перестройки 24 блоков во время печально известного разделения цепочки 11 марта 2013.

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

После этого первоначальная загрузка Blockchain может быть дополнительно оптимизирована так, что пиры будут спрашивать у других непосредственно данные из UTXO, а не реконструировать их из полной истории транзакций. Но тогда появится риск, что пиры смогут лгать о том, какие транзакции были потрачены или неизрасходованны, чтобы попытаться заставить вас принять недействительные транзакции или создать недействительные блоки, если вы майнер. Лучшим решением для этой проблемы будет встраивание «подтверждения UTXO» (хэша всех данных в наборе UTXO) в блоки и добавление нового правила консенсуса, что каждое подобное подтверждение станет необходимым для того, чтобы блок был признан валидным.

Но консенсус требует времени; предложение Марка Фреденбаза о том, как именно встроить это подтверждение в блок, пока не достигло консенсуса, и не происходит никакого обсуждения о том, как именно набор UTXO должен быть представлен и захэширован.

Увеличение объема транзакций

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

Любое изменение в коде ядра консенсуса означает риск, так зачем рисковать? Почему бы просто не оставить Bitcoin Core таким, какой он есть, и жить с семью транзакциями в секунду? «Если ничего не сломалось, не надо исправлять».

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

«Аргумент от Авторитета» является логической ошибкой, так «Потому что Сатоши Так Решил» не является уважительной причиной. Однако оставаться верным изначальному видению Биткойн очень важно. Это видение является тем, что вдохновляет людей вкладывать свои время, энергию и средства в эту новую, рискованную технологию.

Я думаю, что максимальная длина блока должна быть увеличена по той же причине, по которой предел в 21000000 монет никогда не должен быть повышен: потому что людям сказали, что система будет масштабироваться до обработки большого количества транзакций, так же, как им сказали, что всегда будет только 21 млн. биткойнов.

Пока нет никакого кризиса; количество сделок в день примерно одинаково весь последний год (скачок во время ценового пузыря в начале года является исключением). Возможно, причиной этому рост количества транзакций «за пределами Blockchain» («off-blockchain»), но я не думаю, что это так уж сильно заметно влияет, потому что объемы обменов USD на BTC показывают ту же картину объема транзакций за последний год. Общая картина для цены и объема транзакций состоит из периодов относительной стабильности, за которыми следуют пузыри интереса, временно увеличивающие оба показателя. Затем падение вниз на новый уровень, ниже пика, но выше, чем при предыдущем стабильном уровне.

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

Возможные способы увеличения размера блока

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

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

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

Выбрать начальный максимальный размер, так чтобы «среднестатистический любитель Биткойн» мог бы без проблем участвовать в качестве полного узла сети. Под «среднестатистическим любителем Биткойн» я имею в виду кого-то с современным, достаточно быстрым компьютером и Интернет-подключением, запустившего последнюю версию Bitcoin Core и готового посвятить половину мощности своего процессора и пропускной способности сети Биткойн.

И выбрать алгоритм увеличения, такой, чтобы соответствовать скорости роста пропускной способности в течение последующего времени: 50% в год за последние двадцать лет. Заметим, что это меньше, чем примерно 60% в год роста мощности процессоров; пропускная способность будет ограничивающим фактором для объемов транзакций в обозримом будущем.

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

Как только сеть позволит размер блока больше, чем 1 мегабайт, потребуются дальнейшие оптимизации сети. Вот тут-то и понадобятся Обратимые Таблицы Поиска Блума или (возможно) другие алгоритмы синхронизации данных.

Будущее выглядит светлым

Таким образом, в будущем какой-нибудь Биткойн-энтузиаст или профессиональный сисадмин сможет скачать ПО, которое будет делать следующее:

  1. Отыщет и подключится к другим пирам так же, как оно делает это сейчас
  2. Запросит у пиров заголовки лучшей цепочки (десятки мегабайт; займет не более нескольких минут)
  3. Скачает достаточно полных блоков для того, чтобы стала возможной обработка и реорганизация Blockchain в случае такой надобности (несколько сотен мегабайт, на которые, возможно, потребуются около часа)
  4. Запросит у какого-нибудь пира базу UTXO, и сравнит его с подтверждением, взятым из blockchain

Теперь это «полный узел», способный подтверждать транзакции. Если место на диске — это проблема, он может свободно удалить старые блоки.

Что дальше?

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

Путь видится не таким четким, если задуматься о том, как масштабироваться быстрее, чем на 50% (увеличение средней пропускной способности в год, согласно закону Нильсена). Возможны некоторые сложные и достаточно безопасные схемы для избежания широковещания каждой транзакции каждым узлом.

Но 50% в год уже вполне достаточно. По моим грубым прикидкам, мои «выше среднего» домашние Интернет-подключение и компьютер могут легко справиться с 5000 транзакций в секунду уже сегодня.

Все это позволяет обрабатывать до 400 млн транзакций в день. Достаточно хорошо; каждый житель США мог бы создать одну Биткойн-транзакцию, и мой домашний узел это бы выдержал.

Через 12 лет постоянного увеличения средней полосы пропускания расчеты дают нам 56 миллиардов транзакций в день — достаточно для того, чтобы каждый человек в мире мог бы осуществлять пять или шесть Биткойн-транзакций каждый день. Трудно себе представить, что этого не будет достаточно; согласно данным банка Boston Federal Reserve, средний американский потребитель делает чуть более двух платежей в день.

Так что, даже если в течение последующих 20-ти лет все в мире перейдут полностью от наличных к Биткойну, широковещание каждой сделки каждому подтверждающему узлу не будет проблемой.

Источник: Bitcoin FoundationCoinside

24 КОММЕНТАРИИ

  1. Хочу поделиться очень странным наблюдением, вот ссылка на этот же сайт со статистикой из статье выше http://www.bitcoinpulse.com/#/chart/google/approx_num_results
    насколько я понял она отражает количество страниц в индексе гугла и посмотрите, как сильно оно уменьшилось. Было около 40 миллионов, а осталось только 5. Соответственно и трафик очень просел. Вообще в далеком ноябре 2013 я выбирал в какую криптовалюту вложить деньги и выписывал в табличку дату создания, количество запросов в гугле, цену и на чем майнить. Вот кусок для лайта и битка:
    Bitcoin | 4 февраль 2009 | 33,700,000 | 420.000 | GPU 10 min
    Litecoin | 12 октября 2011 | 5,130,000 | 4.140 | CPU 2.5 min 4x amount
    Как видите даже на моих данных 33 миллиона, а сейчас осталось только 5, по лайту вообще все печально из 5 миллионов осталось 500 тыс. И еще посмотрите по той же ссылке огромный пик страниц в индексе и потом спад. Возможно кто то пытался запампить биток и попал под санкции гугла.

    • Спасибо, интересная вещь. Надо бы разобраться. Можно подробнее?
      Если я правильно понял, то количество проиндексированных страниц о биткоине,лайткоине сильно уменьшилось?
      https://www.google.ru/trends/explore#q=bitcoin
      По этому графику можно видеть(на пики не смотрим),что интерес со стороны пользователей поисковика растет постепенно,особенно этому способствуют сми,новые специализированные сайты о биткоине.
      Майнинг можно сказать умер,поэтому множество форумов,сайтов потеряли аудиторию, но какой их процент от общего числа?

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

  2. Если цель хардфорка такова, чтобы каждый мог увековечить в терабайтном блочейне покупку коробка спичек, уплатив комиссию не более 1 цента (микротранзакция), ничего хорошего имхо не выйдет. В конце-концов для чего тогда придуманы сайдчейны, легкие форки? Предполагаю что в конечном итоге минимальная цена транзакции в центах должна будет подрасти, не до беспредельного конечно значения. И ежемесячные миллиарды микротранзакций в самой сети биткойн станут не совсем обоснованны, особенно когда расчеты осуществляются в локальном экономическом пространстве, например покупка хлеба в магазине рядом с домом. Как раз для микротранзакций уместнее будет использовать кэширующие схемы платежей, предоплатные или постооплатные – не суть важно. В этом направлении и надо развивать криптовалютные механизмы. Возможно даже придется подключиться платежным системам с пластиковыми картами, чтобы 30 походов в магазин за продуктами в конце-концов фиксировались одной транзакцией в сети биткойн.

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

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

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

        • Кстати да, хеш физического существования ноды на диске и пихнуть его как мастеркоин прямо в блокчейн биткоина

      • Сдается мне, что тут не PoW нужен для ноды, а некоторый вариант PoS. Хотя, если это сделать получится Novacoin ))))

        • Будущее за гибридными системами типа POW + POS И кстати, грамотная реализация такого подхода, уже реализована в монете Diamond.

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

  3. Я не понял — этот хардфорк не следует воспринимать как откат хотфикса, устраняющего атаку на отказ в обслуживании?

    • Да, Сатоши зафиксировал лимит в 1 МБ в том числе и для того, чтобы предотвратить DoS атаки на сеть. Гэвин предлагает лимит поднимать, что является шагом назад. Позицию Сатоши он пытается обойти – мол, не авторитет. Однако, если начать менять одни элементы дизайна сети, что поменяется на следующем шаге? Лиха беда начало, как говорится. Именно поэтому, мне кажется, что предложение Гэвина не получит всеобщего одобрения.

      • А есть где почитать на русском языке про такую атаку и как ограничение на размер блока может её предотвратить?

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

        • Мне кажется, что размер, блока, как и сложность цели, нужно делать динамической с привязкой к количеству транзакций с комиссией. Например, чтобы максимальный размер следующего блока был рассчитан как объем транзакций с комиссией в предыдущем блоке, плюс, например, 5%.

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

          Потому что как раз для противодействия DoS-атакам ввели “обязательную” комиссию в 0.0001 ВТС? Получается, сутки такой атаки обойдутся атакующему в 0.000173600*24 = 60 BTC; но эта сумма не кажется особенно большой, учитывая возможность получить выгоду от паники на рынках.

        • так ведь комиссия за транзакции решает эту проблему? Вроде бы раньше блок был меньше мегабайта. Неужели опасно поднять размер скажем до 3 мб?

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here