Проблема двойного расходования описывает сложность контроля или предотвращения создания дубликатов цифрового контента, особенно в отношении цифровых денег. Традиционные финансовые системы решают эту проблему с помощью доверенных третьих сторон, таких как банки и платежные системы, и полагаясь на правительства в контроле деятельности этих третьих сторон.
Подробнее о том, что собой представляет проблема двойного расходования мы писали здесь.
Биткойну предшествовали несколько других попыток создания цифровых валют, но ни одна из них не решала проблему двойной траты без использования доверенных органов власти. Сатоши Накамото назвал наличие этой доверенной третьей стороны критическим недостатком каждого из предшественников Биткойна. В «бездоверительном» решении проблемы двойного расходования и состояла одна из главных инноваций Биткойна.
Bitcoin использует для записи всех транзакций в сети распределенный реестр. Этот реестр имеет форму блокчейна, большой базы данных, состоящей из пакетов транзакций, снабженных метками времени и называемых блоками.
Содержание:
Распределенный реестр
Блокчейн — это распределенный реестр записей, который хранится независимо десятками тысяч компьютеров, разбросанных по всему миру и называемых нодами. Каждая нода хранит всю историю транзакций и все ноды совместно обновляют состояние реестра, добавляя к нему новые блоки транзакций по мере их создания.
«Узлы могут покидать сеть и снова подключаться к ней в любой момент, принимая самую длинную версию цепочки для восстановления пропущенной истории транзакций»,
— Сатоши Накамото, из предисловия к уайтпейпер Биткойна. 31 октября 2008 года.
Поскольку каждая нода независимо хранит свою копию блокчейна, у них должен быть способ согласовывать между собой валидное состояние блокчейна и прав собственности на каждый биткойн. В правилах сети Bitcoin предусмотрен объективный метод определения валидного состояния блокчейна.
Поскольку каждая нода содержит полную историю bitcoin-транзакций, они могут проверить, что ни одна монета не была потрачена дважды и что все они были выпущены в соответствии с графиком эмиссии Биткойна. Пользователь с собственной нодой может самостоятельно подтвердить свое право собственности на биткойны, не полагаясь на какую-либо третью сторону.
Метки времени
Блокчейн состоит из блоков, каждый из которых снабжен меткой времени. Таким образом, блоки организованы строго линейно и в хронологическом порядке. В случае, если две транзакции попытаются потратить один и тот же биткойн, такая конструкция позволяет всем узлам объективно определить, какая из этих транзакций является действительной. В сети Биткойна, в отличие от традиционных платежных систем, не может быть разногласий в отношении того, какие транзакции считать валидными, а какие нет. Соответственно, нет и потребности в органах власти или доверенных арбитрах для разрешения споров.
Если транзакция включена в блок и записана в блокчейне, она объективно является валидной. Любая будущая транзакция, пытающаяся потратить те же биткойны, будет отклонена всеми нодами сети.
Подтверждения
Bitcoin-транзакции не являются неизменными сразу после трансляции их в сеть. Сначала они добавляются в мемпул, список ожидающих обработки транзакций.
Транзакции в мемпуле могут быть подвержены двойной трате или перезаписаны, так что полагаться на них не следует.
После добавления в блок транзакция считается «подтвержденной». Каждый блок, добавляемый в блокчейн после блока, содержащего транзакцию, добавляет этой транзакции еще одно подтверждение. Хотя bitcoin-транзакция считается состоявшейся, как только получает первое подтверждение, как окончательные обычно рассматриваются транзакции, имеющие шесть и более подтверждений.
Реорганизации
Большинство пользователей Биткойна предпочитают дождаться шести подтверждений, потому что самый последний блок может быть удален из блокчейна, если он больше не является частью самой длинной его ветки. Такой блок называется орфанным, и все транзакции из него возвращаются в мемпул и должны снова дождаться подтверждения. Это редкое явление, называемое реорганизацией.
Реорганизации могут в какой-то мере актуализировать проблему двойного расходования. Например, представим, что Элис создает транзакцию, в которой отправляет Бобу 1 BTC. Пока эта транзакция находится в мемпуле, ожидая подтверждения, Элис создает еще одну транзакцию, в которой отправляет тот же 1 BTC Чарли. Затем транзакция Элис —> Боб включается в блок. Однако, случайно или по злому умыслу Элис, другой майнер в короткий промежуток времени добывает два блока, один из которых включает транзакцию Элис —> Чарли. Транзакция Бобу окажется неподтвержденной, а транзакция Чарли — подтверждена.
Чтобы избежать рисков, связанных с реорганизациями, пользователи Биткойна обычно ожидают 2–6 подтверждений, прежде чем считать транзакцию окончательной. Вероятность того, что в блокчейне Биткойна реорганизации подвергнутся шесть блоков, крайне мала. В примере выше, если бы Боб ожидал шести подтверждений, то увидел бы, что его транзакция поступила, но затем быстро вновь оказалась неподтвержденной. И он бы понимал, что оплата от Элис еще не поступила.
Источник: bitnovosti.com