Как блокчейн предотвращает двойное расходование биткойнов?

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

Проблема двойных расходов — это проблема, которой нет у наличных денег; Если вы платите за сэндвич 10-долларовой купюрой, передавая ее производителю сэндвича, вы не можете развернуться и потратить те же 10 долларов в другом месте. Однако транзакция с использованием цифровой валюты, такой как биткойн, происходит полностью в цифровом виде. Это означает, что можно копировать детали транзакции и ретранслировать их так, чтобы один и тот же BTC мог несколько раз тратиться одним владельцем. Ниже мы рассмотрим, как разработчики криптовалюты застраховали себя от двойных расходов.

Ключевые выводы

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

Понимание блокчейна

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

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

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

Как справиться с двойными расходами

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

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

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

Подтверждение работы и объяснение «майнинга»

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

Генерация любого хэша для набора биткойн-транзакций была бы тривиальной задачей для современного компьютера, поэтому, чтобы превратить процесс в «работу», биткойн-сеть устанавливает определенный уровень «сложности». Этот параметр настроен таким образом, что новый блок « добывается » — добавляется в цепочку блоков путем генерации действительного хэша — примерно каждые 10 минут. Установка сложности достигается путем установления  «цели» для хэша : чем ниже цель, тем меньше набор действительных хэшей и тем сложнее его сгенерировать. На практике это означает хэш, который начинается с длинной строки нулей: например, хеш для блока № 429818 равен 000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d. Этот блок содержит 2012 транзакций с участием чуть более 1000 биткойнов, а также заголовок предыдущего блока. Если пользователь изменит сумму одной транзакции на 0,0001 биткойн, полученный хэш будет нераспознаваемым, и сеть отклонит мошенничество.

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

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

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