Как Bitcoin решает проблему двойных расходов

Как Bitcoin решает проблему двойных расходов

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

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

До Биткойна было опробовано несколько цифровых валют, но согласно Coinmarketrate.com, ни одна из них не смогла решить эту конкретную проблему без потери децентрализации (без опоры на третью сторону).

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

Как Bitcoin решает эту проблему

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

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

BLOCKCHAIN

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

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

Если обратиться к документу Сатоши Накамото, написанному 31 октября 2008 года, то сеть может функционировать без центральной структуры, на которую можно опереться:

  • Узлы имеют возможность уходить и возвращаться в сеть по своему усмотрению, приняв самую длинную цепочку proof-of-work в качестве доказательства того, что произошло, пока их не было.
  • Каждый узел сети является хранителем копии блокчейна, поскольку все узлы работают по одному протоколу и принимают одни и те же блоки и транзакции в соответствии с заранее установленными правилами.
  • В случае если они заявили, что принимают блоки, не соответствующие этому протоколу, или не принимают действительные блоки, то они образуют новую цепочку и не являются частью сети.

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

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

TIMESTAMP

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

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

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

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

ПОДТВЕРЖДЕНИЯ НА БЛОКЧЕЙНЕ

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

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

Можно считать, что он уже подтвержден и не может быть отменен, но всегда есть вероятность, что 2 или более блоков найдены в другой цепочке сети и что последний считается правильным, отбрасывая только что добытый блок.

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

Проблема реорганизации

Необходимое количество подтверждений для ожидания зависит от суммы передаваемых нами средств. Если для нескольких долларов или евро может быть достаточно 2-3 подтверждений, то для более крупных сделок потребуется больше. В целом, однако, среднее число — 6.

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

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

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

Предположим, мы отправляем 0,5 BTC другу. Эта транзакция должна оставаться в mempool до тех пор, пока майнер не возьмет ее для подтверждения. Проблема в том, что мы можем создать второй переход с точно такими же ВТС, но отправить их другому другу.

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

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

В этой ситуации обе транзакции подтверждаются, при этом подтверждается только 1 транзакция.

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

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

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

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

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

Заключение

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

Блокчейны, использующие Proof of Work, имеют надежный способ определения достоверности и порядка транзакций. Если транзакция не была добавлена в блокчейн, то мы не можем быть уверены, что она не будет проведена дважды.