Блокчейн — это распределенная система, в которой могут находиться тысячи участников. В отличие от обычных распределенных баз данных, в блокчейне почти всегда отсутствует центральный администратор, который конфигурирует узлы сети, поэтому получается, что архитектура блокчейна не просто распределена, но децентрализована. В связи с этим для блокчейна является актуальной задача распределенного консенсуса:

«Как узлам сети достичь одинаковой точки зрения на журнал транзакций блокчейна в распределенной сети при условии, что произвольные узлы могут «падать» или зависать, руководствуясь лишь общими правилами обработки сообщений в сети?»

О том, как достигается консенсус в блокчейнах, мы поговорим в нашем сегодняшнем материале.

/ изображение jgbarah CC

Структура и узлы блокчейн-сетей


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

Зачем нужны эти сложности? Оказывается, без согласования между узлами сети возможна повторная трата средств (double spending). Предположим, у Евы есть 1 биткойн. Она может сформировать две транзакции, согласно которым этот биткойн переходит Алисе и Бобу. Если Алиса и Боб никак не согласовывают свою историю транзакций, они оба примут платеж Евы, поскольку транзакции будут подписаны электронной подписью Евы, а до выполнения транзакции у Евы действительно был этот биткойн! Поэтому участникам сети нужно согласовывать журналы транзакций. Тогда успешно выполнится только одна из транзакций Евы, а вторая станет некорректной — средства Евы будут уже потрачены.

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

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

Второй тип — узлы аудита. Они не участвуют в процессе консенсуса, однако имеют у себя полную копию блокчейна. «Аудиторы» регулярно проверяют работу майнеров и занимаются распределением нагрузки по сети, выполняя функцию своеобразной сети доставки контента (CDN) для данных блокчейна.

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

/ Роли узлов в блокчейн-сети. Узлы консенсуса и конечные клиенты могут быть «отгорожены» друг от друга

Биткойн-блокчейн является одним из крупнейших блокчейнов. По данным сайта bitnodes, 8 апреля 2017 года в биткойн-сети наблюдалось 7025 узлов с полной копией блокчейна. Большая часть из них — это узлы аудита; продуктивных майнеров в сети не так уж много — несколько десятков. Отметим, что количество узлов в несколько раз меньше числа участников сети биткойн (которых более 13 миллионов). Так получается потому, что пользователи не обязаны хранить локальную копию блокчейна для отправки транзакций — достаточно хранить закрытые ключи, при помощи которых транзакции подписываются.



Консенсус


Задача распределенного консенсуса не специфична для блокчейнов и имеет хорошо проверенные решения для многих других распределенных систем (например, баз данных NoSQL). Даже задача консенсуса, в котором узлы могут вести себя «по-плохому», — задача византийского консенсуса — впервые была сформулирована в 80-х годах прошлого века, а методы её решения появились в конце 90-х.

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

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

Из-за этого обычные алгоритмы византийского консенсуса для блокчейна не подходят. Поэтому было предложено множество различных алгоритмов, среди которых выделяются две основные категории: алгоритмы на основе доказательства работы (proof-of-work) и алгоритмы на основе подтверждения доли (proof-of-stake).

Доказательство работы — PoW


Доказательство работы было «изобретено» задолго до биткойна еще в начале 90-х и применялось в ином контексте: для защиты от спама. Например, один вариант доказательства работы (Hashcash) был предложен английским криптографом Адамом Бэком (Adam Back), который сейчас является генеральным директором одного из крупнейших блокчейн-стартапов.

В случае доказательства работы хеш сообщения, объединенного со специальным полем (nonce), должен быть меньше определенного значения (или начинаться с определенного числа нулевых битов). Nonce не несет смысла для самого сообщения — это поле перебирается автором доказательства, пока не будет найдено подходящее значение. Название «доказательство работы» отражает тот факт, что для нахождения nonce надо совершить вычислительную работу, ожидаемое количество которой измеримо. Например, если нужно, чтобы первые 16 бит хеша равнялись нулю, то в среднем нужно перебрать 65536 значений nonce.

Проиллюстрировать это можно с помощью программы на Python:

import itertools
from hashlib import sha256

# Интерпретирует последовательность символов как little-endian число
to_long = lambda x: sum(ord(b) << (8*i) for i, b in enumerate(x))
# Комбинирует nonce и сообщение для вычисления хэша.
combine = lambda nonce, msg: str(nonce) + ":" + msg

# Проверяет доказательство работы    
def verify_pow(msg, nonce, difficulty):
    h = sha256(combine(nonce, msg)).digest()
    # Равны ли первые difficulty битов хеша нулю?
    return to_long(h) % (1 << difficulty) == 0

# Создает доказательство работы для сообщения
def create_pow(msg, difficulty):
    for nonce in itertools.count(0):
        if verify_pow(msg, nonce, difficulty): return nonce
	
msg = "blockchain"
nonce = create_pow(msg, 16)
combine(nonce, msg), sha256(combine(nonce, msg)).hexdigest()
#43952:blockchain 000027b5022f88d2da21bd2802268966050f5a0b031058ce4562939c13727303

Уточнение насчет ожидаемого количества работы является важным. Теоретически, при сильном везении, подходящий nonce можно найти очень быстро. Если программу выше запустить с сообщением «Bl0Ckchain», то получится, что значение nonce равняется 6571, а это в десять раз меньше ожидаемого. Поэтому, глядя на доказательство работы, можно лишь оценить затраченные на него ресурсы, однако для высокой сложности доказательства (то есть ожидаемого количества выполненной работы) эта оценка будет достаточно точна.

Доказательство работы похоже на цифровые подписи — оно обеспечивает целостность сообщения, так как вероятность того, что один и тот же nonce подойдет для различных сообщений, очень мала. Доказательства также легко проверяются — достаточно провести лишь одну операцию хеширования. В отличие от подписей, создание доказательства работы не требует знания секретов, но «потребляет» больше вычислительных ресурсов. Например, в приведенной выше программе на создание доказательства работы для сообщения «blockchain» сложностью 32 бита требуется несколько часов вычислений на обычном персональном компьютере, однако проверяется это доказательство практически мгновенно.

sha256("5263268363:blockchain") = 000000007cf39dfc8fccae534b39b5f362c16891abca02d0e7b1dbd5a129ee17

PoW и консенсус


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

  • Консенсус Накамото решает главный бич анонимных сетей — атаки Сибиллы, в которых злоумышленник создает кучу фейковых узлов, чтобы «задавить» получившимся большинством мнение честных пользователей. Чтобы обладать мнением в консенсусе Накамото, нужно обладать реальной вычислительной мощностью, которую нельзя подделать, и которая не требует никакой дополнительной аутентификации — она сама по себе привязывает узлы к реальному миру.
  • Доказательство нельзя подделать и «перенести» на другие блоки. Таким образом, майнеры не могут воровать доказательства друг у друга.
  • Более того, доказательства нельзя заготовить впрок — в каждый блок входит ссылка на предыдущий, поэтому начать работать над доказательством можно только после появления предыдущего блока в сети.
  • Доказательства работы обеспечивают честность — награда каждого майнера пропорциональна его вычислительной мощности (хешрейту). Если у майнера есть 10% хешрейта от всей сети, то он будет в среднем создавать 10% блоков и получать 10% награды.
  • Поскольку на создание доказательства тратятся реальные ресурсы (которые в случае биткойна измеряются тысячами долларов в минуту), у майнеров возникает совершенно новый стимул действовать в рамках протокола — нечестное поведение немедленно лишает их реальных денег.

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

Консенсус Накамото обеспечивает два ключевых требования к блокчейну, которые мы выделили ранее. Из-за того, что доказательство работы не привязывается к личностям майнеров (в отличие от цифровых подписей/сертификатов), обеспечивается устойчивость к цензуре. А за счет того, что доказательства работы быстро проверяются и не требуют для проверки ничего, кроме блокчейна, достигается объективность протокола.

Консенсус Накамото устойчив к атакам на сеть блокчейна, причем его безопасность достаточно хорошо исследована теоретически (в отличие от более новых предложений для блокчейнов). В оригинальной статье отмечено, что сеть биткойна продолжит адекватно функционировать, даже если половина майнеров начнет злонамеренную активность. Если же среди майнеров появится злонамеренное большинство (так называемая атака 51%), они смогут игнорировать блоки от всех остальных майнеров, чтобы забрать себе всю награду в сети, или, например, мошенничать, производя повторную трату средств за счет намеренных форков блокчейна. Однако при этом отметим, даже если все майнеры в сети сговорятся, они не смогут обойти базовые механизмы безопасности биткойна — например, не смогут похитить биткойны пользователей.

Биткойн — самая мощная сеть, использующая доказательство работы. За одну секунду майнеры биткойна вычисляют более трех квинтиллионов (3•1018) хешей. 32-битное доказательство (которое вычисляется на компьютере несколько часов) — это минимальная сложность в биткойне, которую можно было наблюдать лишь в самом начале работы сети. Это связано с тем, что сложность доказательства автоматически регулируется так, чтобы биткойн-сеть находила в среднем один блок в 10 минут. При увеличении хешрейта сети растет и сложность — сейчас сложность одного доказательства составляет около 70 бит. Соответственно, hex-запись хеша блока должна начинаться с 17 нулей.

/ Мощность биткойн-сети растет по экспоненте. Это обеспечивает высокую стоимость атаки на сеть

Альтернативы для PoW


У консенсуса Накамото есть свойство, которое многими воспринимается как большой недостаток, — для обеспечения безопасности нужно «работать», то есть производить доказательства работы. Вычисления, которые выполняются в рамках PoW, не служат никакой полезной цели, и это архитектурная особенность. Оказывается, очень сложно придумать доказательство работы, которое бы выполняло общественно полезную роль. Поэтому может показаться, что ресурсы (прежде всего, электричество) на майнинг тратятся впустую (если не считать, что они тратятся на обеспечение безопасности).

Помимо этого, майнинг все же подвержен проблеме централизации. Более 70% хешрейта биткойна на данный момент находится в одной стране — Китае. Многие криптовалюты пытаются децентрализовать майнинг за счет использования доказательств работы, которые экономически невыгодно вычислять на специализированном оборудовании, однако с таким подходом возникает другая проблема — если сделать выгодным майнинг биткойнов с помощью домашних компьютеров, то арендовать оборудование для атаки (или создать для нее ботнет) станет существенно дешевле и проще.

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

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

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

У криптографического сообщества все еще остаются сомнения насчет возможности надежных алгоритмов с доказательством доли. Возможно, планируемый переход на доказательство доли блокчейна Ethereum — второго по объему рынка публичного блокчейна — расставит все точки над i.

Кроме доказательства доли, блокчейн-энтузиасты экспериментируют и с другими алгоритмами «proof-of-*». Например, Брэм Коэн (Bram Cohen), создатель протокола BitTorrent, недавно предложил использовать для консенсуса в блокчейнах доказательство локального хранения файлов (proof-of-space), то есть заменить вычислительную мощность в PoW на дисковое пространство. Однако по степени зрелости подобные инициативы еще сильнее отстают от алгоритмов доказательства работы, чем proof-of-stake.



P.S. А вот еще небольшая подборка наших материалов:

Поделиться с друзьями
-->

Комментарии (23)


  1. DmitryKoterov
    27.04.2017 10:30
    +1

    > Это связано с тем, что сложность доказательства автоматически регулируется так, чтобы биткойн-сеть находила в среднем один блок в 10 минут.

    Может ли кто-нибудь на пальцах объяснить, как это достигается? Сколько я ни спрашивал, никто толком так и не смог ответить.

    А именно, идет ли здесь завязка за какой-то таймер и астрономическое время, или же просто говорится «мощность компьютера растет в среднем как X из года в год, поэтому и объем работы тоже будем увеличивать как X в зависимости от размера блокчейна».

    В первом случае непонятно, что мешает перевести часы. Во втором случае непонятно, что произойдет, если все компьютеры в мире внезапно ускорятся в 10 раз (или внезапно появится в 10 раз больше компьютеров), упадет ли среднее время генерации одного блока с 10 до 1 минуты?


    1. mayorovp
      27.04.2017 10:49
      +2

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


      Завязок на таймеры или предполагаемый рост мощности — нет, есть только завязка на фактическую суммарную вычислительную мощность.


    1. mayorovp
      27.04.2017 10:56
      -2

      Вот, вторая ссылка в моем гугле по запросу "биткоин сложность":


      Сложность меняется каждые 2016 блоков, основываясь на времени, которое потребовалось для нахождения предыдущих 2016 блоков. Если блок будет находиться каждые 10 минут (как это задумывалось изначально для равномерной эмиссии), нахождение 2016 блоков займет ровно 2 недели. Если предыдущие 2016 блоков были найдены за срок более 2х недель – сложность будет уменьшена, если меньше – сложность будет увеличена. Чем больше (или меньше) времени было затрачено на нахождение предыдущих 2016 блоков, тем больше уменьшится (или увеличится) сложность.
      ru.bitcoinwiki.org/Сложность#Изменение сложности

      Не понимаю почему у вас возникли затруднения с поиском этой информации...


    1. Halt
      27.04.2017 11:59
      +1

      Насколько я понимаю, вопрос тут не в часах, а в самом факте появления очередного блока.

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

      Короче говоря, получается та же самая схема с «честным большинством». Если бо?льшая часть узлов считает, что PoW должен быть X, то злонамеренному меньшинству нет смысла пытаться генерировать фальшивую PoW Y < X, поскольку:

      1. Все равно нужно тратить энергию на вычисление даже PoW меньшего размера
      2. Рано или поздно эта ветвь будет проигнорирована как фальшивая и по определению более короткая (ведь честных майнеров больше)

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


      1. DmitryKoterov
        27.04.2017 18:08

        Значит, в схеме таки участвует таймер.

        1. Зашит ли внутри каждого блока timestamp его генерации? Если да, то что происходит, если время на ноде шло неправильно? Другие же ноды не могу никак проверить корректность хода времени на этой ноде.
        2. Если завязка идет реально за частоту прихода блока на каждую отдельную ноду, а не за время, вшитое в каждый блок, то ведь время может идти немного по-разному на разных нодах. Предположим, все ноды знают, что сложность равна 1 при скорости генерации 0-1000 блоков за 10 минут, и равна 2 при 1001-2000 блоков за 10 минут. Соответственно, при реальной скорости близкой к 1000 может так выйти, что часть нод решат, что скорость была 999, а часть — что 1001, и это совершенно случайный фактор. Как с этим обходятся?


        1. Halt
          27.04.2017 18:35
          +1

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

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

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

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


          1. DmitryKoterov
            28.04.2017 04:31

            Вот, это типичный ответ на данную тему. Только, к сожалению, он не отвечает на конкретный вопрос про таймер и про то, есть завязка за таймстемпы или нет (выше пункты 1 и 2). Попробую еще раз: если в условии задачи сказано, что «2016 блоков каждые 2 недели», то нужно понять, как эти «2 недели» отмеряются. И вот это-то и является сутью вопроса. («Расчет сложности опирается не на время» — это не ответ, потому что вот же они, 2 недели в условии — время не пожет просто так ниоткуда возникнуть и вникуда исчезнуть, где-то все равно должен стоять первоисточник.)


            1. QDeathNick
              29.04.2017 01:15

              Первоисточник — таймстемп в блоке, который на 2016 назад.
              А при валидация блока проверяется его таймстамп и если он сильно не корректен (кажется 2 часа, лень лезть проверять), то сеть его не принимает.


            1. rPman
              29.04.2017 02:12
              +1

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

              Так как расчет идет не на каждый блок а на каждые 2000 блоков, любая ошибка во времени становится не критичной.


              1. QDeathNick
                04.05.2017 17:48

                Не потомка, а предка вы хотели сказать.


                Кстати похоже всё таки не каждые 2016, а каждые 2015.


                Не несколько секунд, а до 2 часов вперёд. Специально полез код проверить:


                 // Check timestamp
                    if (nTime > GetAdjustedTime() + 2 * 60 * 60)
                        return error("CheckBlock() : block timestamp too far in the future");


        1. mayorovp
          28.04.2017 08:55

          Вы зря взяли для примера цифры 1 и 2, потому что текущая сложность сети — 521,974,519,554


    1. adtim
      27.04.2017 12:07

      Второй вариант: начнут генерить в 10 раз быстрее до следующего пересчета сложности.

      Сложность пересчитывается каждые 2016 блоков (из расчета 10 минут на блок это 2016*10/60/24 = 14 дней)
      Если предыдущие 2016 блоков найдены менее чем за 2 недели, сложность вырастает. Более 2 недель — падает.

      В вашем примере, генерация увеличилась в 10 раз, 2016 блоков будут найдены за 1.4 дня вместо 14, после чего сложность вырастет в 10 раз.

      Историю сложности биткоина можно посмотреть например здесь: https://bitcoinwisdom.com/bitcoin/difficulty


  1. Halt
    27.04.2017 13:02

    Спасибо за статью! Довольно интересно описано.

    Консенсус Накамото решает главный бич анонимных сетей — атаки Сибиллы, в которых злоумышленник создает кучу фейковых узлов, чтобы «задавить» получившимся большинством мнение честных пользователей.

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

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

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

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

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

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

    Не будь этого механизма, всю сеть можно было бы положить одним узлом, постоянно меняющим свои адреса.


  1. rPman
    27.04.2017 13:08
    +2

    Еще одна опасность централизации криптовалюты, а точнее bitcoin — разработчики.
    Владельцы ключа github, владельцы домена и доступа к репозитарию, с которого пользователи загружают новые версии, владельцы PR-аккаунта на форумах типа bitcointalk.org — все они имеют абсолютную власть, с оглядкой на пулы майнинга (и, косвенно, майнеров).

    Это было с Ethereum из-за краха DAO (ошибка в контракте, позволила хакеру юридически легально забрать монеты почти всех пользователей DAO себе, и основатели хардфорком буквально отобрали эти монеты и вернули владельцам — несогласное сообщество создало ethereum classic), это происходит с bitcoin сейчас (bitcoin core нарушая все договоренности удерживает лимит размера блока и отказывается его менять в принципе, а ведь его уже не хватает, комиссии за транзакцию растут, 30-40р уже сейчас).

    И пока сообщество не выработает механизмы по ограничению разработчиков — криптовалюта не будет действительно децентрализованной.


  1. Loki3000
    27.04.2017 16:59

    8 апреля 2017 года в биткойн-сети наблюдалось 7025 узлов с полной копией блокчейна

    А не получится так, что со временем их количество начнет сокращаться? Сколько сейчас уже весит база? За сотню гигабайт, наверное? Причем, чтобы хранить копию базы — недостаточно ее просто скачать, надо еще ее всю перепроверить. Так что мне кажется что со временем будет все меньше желающих тратить на нее вычислительные мощности (ну кроме непосредственно майнеров). В итоге получим несколько (десятков/сотен) крупных узлов с полной копией базы.


    1. rPman
      27.04.2017 18:35

      Во первых существуют механизмы по уменьшению размера сохраняемой базы (пока первичная их загрузка все равно исполняется, но я думаю в будущем это не понадобится), ключ -prune позволяет выбрать режим удаляемых данных из локальной базы (например чтобы она занимала не больше 512мб), так же можно использовать внешний скрипт, который проанализирует базу и RPC запросами удалит с диска ненужные блоки

      Во вторых такие технологии как Lighting Network позволят полным нодам зарабатывать на комиссиях моментальных переводов в открытых каналах с той нодой, т.е. у владельца тяжелой ноды появится финансовая заинтересованность ее держать (правда это будет сопряжено с большими вложениями, и тем более, если разработчики bitcoin core будут продолжать играть дурочку и не расширять лимит размера блока).


  1. yurkaa
    27.04.2017 17:59

    Кто-нибудь в курсе, как быстро подтверждается транзакция?
    Блок генерируется 10 минут. Транзакция вроде как считается подтвержденной, если за ее блоком появилось еще пять. Получается час. То есть быстро оплачивать биткоином не получится?


    1. rPman
      27.04.2017 18:38

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


    1. Halt
      27.04.2017 18:38

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

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


      1. QDeathNick
        29.04.2017 01:25
        +1

        Что за подписи на уже существующем блоке? Где то видно сколько подписей на блоках?


      1. rPman
        29.04.2017 02:14
        +1

        путаете — количество подтверждений в транзакции, это какраз количество блоков, найденных после того блока, куда добавлена транзакция.

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


  1. Greendq
    27.04.2017 19:49
    +2

    А можно подробнее описать обоснование вот этого утверждения: «оказывается, что со слишком частыми блоками работа блокчейна становится нестабильной» — слишком часто — это раз в секунду? Раз в 10 секунд? Есть же такие криптовалюты. Т.е. с чем связана нестабильность?


    1. rPman
      29.04.2017 02:21

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

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