В последние месяцы в криптовалютном сообществе и не только развернулась дискуссия о том, есть ли какая-либо ценность в блокчейне самом по себе, без криптовалюты. Можно ли вообще называть такие “общедоступные журналы транзакций без токенов” блокчейнами?
Чтобы лучше разобраться в теме, я прочитал статью Бэйли, просмотрел видео с Тимом, ознакомился со статьей от Nasdaq, изучил работы Ричарда (одну и вторую) и даже поучаствовал в дебатах (см. комментарии) с Крисом Дероузом (Chris DeRose) из фонда Counterparty. Уф…
Как хорошо заметил Крис, суть разногласий можно свести к вопросу, является ли блокчейн экономической или технологической инновацией. Если блокчейн — исключительно экономическая инновация, то блокчейны без криптовалют не имеют смысла. Поэтому позвольте мне с самого начала объявить о своей позиции:
Блокчейн Биткойна — это и экономическая, и технологическая инновация.
Под “инновациями” я понимаю не только то, чего никогда не существовало, но и новые сочетания имеющихся технологий. Например, такое определение позволяет считать инновацией WWW, хотя, по большому счету, это всего лишь сочетание гипертекста с немного измененными интернет-протоколами. Если такое определение кажется вам недостаточно жестким, можете предложить свое, более строгое, но вы будете удивлены, насколько мало тогда останется “настоящих инноваций”. Как гласит древняя мудрость, “ничто не ново под луной”.
В общем, я утверждаю, что блокчейны без токенов ценности полезны, но в ином отношении, чем блокчейн Биткойна. Многие энтузиасты криптовалют смеются над блокчейнами без токенов — мол, они не обеспечивают защиту от цензуры и децентрализованную безопасность, основанную на подтверждении работы. С другой стороны, профессионалы из мира финансов смеются над общедоступными блокчейнами, потому что они медленны, дороги и плохо подходят для решения традиционынх финансовых задач. Что касается меня, то я считаю, что правы обе стороны.
Я собираюсь продемонстрировать, что блокчейны без токенов полезны для синхронизации децентрализованных БД, причем полезны даже в организациях с идеальным доверием. А затем мы увидим, какие другие возможности предлагают блокчейны для обеспечения консенсуса при специфичных транзакциях между сторонами с ограниченным доверием друг к другу.
Чтобы адекватно разобрать эту тему, мы должны обсудить модель транзакций в Биткойне, управление конкурентным доступом к БД с помощью многоверсионности (MVCC) и проблему разрешения конфликтов при репликации БД с несколькими главными репликами (multi-master replication). Я постараюсь объяснить все доступным языком, но без технических деталей не обойтись.
Модель транзакций Биткойна
Модель транзакций Биткойна совсем проста, но при этом очень эффективна. Каждая биткойн-транзакция может иметь несколько входов и несколько выходов, при этом каждый вход “тратит” выход предыдущей транзакции. Все биткойны, поступившие на входы транзакции, распределяются между выходами согласно заданным параметрам. Так транзакции формируют распределенные цепочки, которые уходят в прошлое и завершаются coinbase-транзакциями, которые когда-то сгенерировали соответствующие биткойны.
В Биткойне также есть несколько дополнительных правил, за соблюдением которых следят узлы сети.
- К каждому входу транзакции должно прилагаться подтверждение права потратить соответствующий выход предыдущей транзакции. Это право ограничено условиями, закодированными в выходе предыдущей транзакции.
- Количество биткойнов на входах транзакции должно превышать ее суммарный выход. Единственное исключение из этого правила — coinbase-транзакции, которые генерируют новые биткойны.
- Каждый выход можно потратить только один раз — иначе говоря, он может быть связан с единственным входом единственной последующей транзакции.
Для соблюдения последнего правила необходим механизм достижения консенсуса по поводу того, какие транзакции действительны, и как раз для этого используется блокчейн. Точнее говоря:
Если предпринимаются попытки потратить один выход в двух транзакциях, в итоге будет принята только одна из них. Блокчейн работает как унифицированный механизм выявления и предотвращения таких конфликтов в сети.
Блокчейн структурирован как цепь связанных блоков, каждый из которых содержит набор транзакций, не конфликтующих ни между собой, ни с предыдуими блоками, начиная с самого первого блока, созданного в 2009 году. Теоретически блокчейн мог бы содержать отдельные транзакции, но группировка транзакций в блоки делает его более эффективным и практичным.
Какова же роль криптовалюты в этой схеме? Она сводится к вопросу о том, кто решает, какие блоки будут добавлены в блокчейн. Биткойн децентрализован, и никто не обладает полномочиями принимать это решение единолично, так что нам нужен какой-то другой способ достижения консенсуса.
Мы могли бы попробовать демократический подход, чтобы решение о добавлении блока в блокчейн принималось большинством голосов. К сожалению, как видно по интернет-опросам, представительная демократия в Интернете невозможна из-за проблемы имперсонации (или так называемой атаки Сибиллы). Иначе говоря, один человек может голосовать со многих компьютеров, манипулируя консенсусом в своих интересах.
Для устранения этой проблемы добавление блока в блокчейн в Биткойне целенаправленно затруднено с помощью так называемого “майнинга”. Чтобы создать блок, вы должны решить сложную, но бессмысленную математическую проблему, требующую затратить много вычислительных ресурсов (а, следовательно, электричества и денег). Не помешает и немного удачи, потому что вам придется конкурировать со многими другими майнерами по всему миру.
Если создать блок трудно и дорого, почему этим кто-то занимается? Все просто: удачливый майнер блока получает право выполнить coinbase-транзакцию и выписать себе 25 биткойнов (эта сумма уменьшается вдвое каждые 4 года). Далее он может продать эти биткойны на бирже, оплатить счета за электричество и получить некоторую прибыль. Кроме того, майнеры получают небольшой доход в виде комиссий за транзакции, но они пока совсем малы.
Итак, консенсус в Биткойне достигается благодаря подтверждению работы. Биткойн-энтузиасты утверждают, что без криптовалюты невозможно мотивировать децентрализованный майнинг блоков и, соответственно, защитить блокчейн от атак Сибиллы. Без криптовалюты кто угодно сможет монополизировать контроль над консенсусом, что сделает блокчейн бесполезным. С этим трудно спорить.
Управление конкурентным доступом к БД с помощью многоверсионности
А теперь давайте отвлечемся на минутку и поговорим о БД.
Грубо говоря, БД — это хранилище структурированной информации, сгруппированной в таблицы. Примером таблицы может служить список банковских счетов, каждая строка которого содержит номер счета и его баланс. Пусть в начале дня баланс вашего счета составляет 900 долларов. Если бы вы захотели заплатить 750 долларов по ипотеке и снять 400 долларов в банкомате, то без овердрафта вам пришлось бы отказаться от одной из операций.
Платежи по ипотеке и снятие денег в банкомате обрабатываются разными системами, но обе они обращаются к единой БД банковских счетов. Немного упрощая, можно сказать, что каждая из этих систем считывает баланс счета, проверяет, достаточно ли на нем средств, в случае успеха инициирует операцию, проверяет ее результат, вычисляет новый баланс и, наконец, сохраняет его в БД. Пока ипотечный платеж и снятие денег в банкомате не перекрываются по времени, эта логика работает отлично. Одна из операций будет выполнена успешно, а во второй будет отказано, потому что для двух операций средств на счете недостаточно. В зависимости от порядка операций вы или получите сердитый звонок из отдела кредитования, или увидите безрадостное сообщение на экране банкомата.
Но что произойдет, если оба процесса начнутся примерно одновременно? В этом случае каждая из систем прочитает баланс вашего счета и сочтет его достаточным. Когда платеж по ипотеке завершится, в БД будет записан новый баланс, 150 долларов США. Когда завершится снятие денег в банкомате, в БД будет записан баланс 500 долларов. Одна из этих операций перезапишет другую, и, в зависимости от того, насколько вы удачливы, вы получите в подарок от банка 750 или 400 долларов.
Конечно, в реальности это не случится — благодаря технологии, которая называется управлением конкурентным доступом к БД. Она обеспечивает целостность и безопасность наших данных (особенно финансовых) и имеет целый ряд разновидностей. Все они, однако, разделяют тот принцип, что операции над БД группируются в “транзакции”, которые обрабатываются атомарно, т. е. завершаются успехом или неудачей как одно целое. Управление конкурентным доступом поддерживает согласованность данных, блокируя части БД на срок транзакции, чтобы другие транзакции не могли в это время получить доступ к тем же данным.
Если бы нам не нужно было выполнять транзакции параллельно, мы могли бы заблокировать всю БД на срок выполнения всех транзакций, но в реальном мире это непрактично. Эффективная схема управления конкурентным доступом допускает параллельные операции, блокируя как можно меньше данных на как можно меньшее время. В приведенном примере можно было бы заблокировать в БД только строку вашего счета и только на долю секунды, нужную для окончательной проверки и вычитания суммы из баланса. Параллельной транзакции пришлось бы дожидаться освобождения блокировки совсем недолго.
Один из популярных способов параллельной обработки транзакций называется управлением конкурентным доступом с помощью многоверсионности, или MVCC. В MVCC каждой транзакции доступен согласованный снимок данных в определенный момент времени, даже если часть этих данных параллельно обрабатывается другой транзакцией. Это свойство изоляции снимков гарантирует, например, что выписка, показывающая общий баланс по нескольким счетам, всегда будет правильной, даже если некоторые суммы в данный момент перемещаются с одного счета на другой. Одна транзакция повлияет на данные, доступные другой транзакции, только если вторая транзакция начинается после успешного применения всех изменений в рамках первой транзакции.
За кулисами MVCC поддерживает несколько версий строки вместе с данными о времени последнего изменения каждой версии. Когда строка БД изменяется, текущая версия строки помечается как подлежащая удалению, при этом изменение применяется к копии строки, для которой также обновляется метка времени. С точки зрения хранилища изменений строки “на месте” просто не существует. Каждой транзакции точно известно, когда она началась, и доступны только те версии строк, временные метки которых предшествуют этому моменту. Как только текущих транзакций, которым могут потребоваться старые версии строк, не остается, эти версии можно удалить из хранили
Источник: http://bitnovosti.com/2015/12/14/bitcoin-vs-blockchain-debate/
Подпишитесь на телеграм-канал @FeedBitcoin и будьте в курсе всех событий в мире биткоин и криптовалют!
Биткоин бесплатно получить
Купить, продать, обменять Биткоин