Проблема двойных расходов – это проблема, которой нет у наличных денег; если вы платите за сэндвич с 10-долларовой купюрой, передавая эту купюру производителю сэндвича, вы не можете развернуться и потратить те же самые 10 долларов в другом месте. Транзакция с использованием цифровой валюты, такой как биткоин, однако, происходит полностью в цифровом виде. Это означает, что можно скопировать детали транзакции и ретранслировать ее так, чтобы один и тот же BTC мог быть потрачен несколько раз одним владельцем. Ниже мы рассмотрим, как разработчики криптовалюты застраховали, что двойные расходы не могут произойти.
Понимание блокчейна
Блокчейн, который поддерживает цифровую валюту, такую как биткоин, не в состоянии предотвратить двойные расходы самостоятельно. Скорее всего, все различные транзакции, связанные с соответствующей криптовалютой, размещаются в блокчейне, где они отдельно проверяются и защищаются процессом подтверждения. В случае биткоина и многих других криптовалют, транзакции, которые были подтверждены таким образом, становятся необратимыми; они публикуются публично и поддерживаются в бессрочном режиме.
Биткоин был первой крупной цифровой валютой, которая решила проблему двойных расходов. Это было сделано путем внедрения этого механизма подтверждения и поддержания общей, универсальной системы учета. Таким образом, блокчейн биткоин сохраняет записи временных транзакций, возвращающихся к основанию криптовалюты в 2009 году.
В терминах биткоина, "блок" – это файл постоянно записываемых данных. Все последние операции записываются в блоки, подобно книге биржевых операций на бирже. Информация из блоков добавляется в книгу каждые несколько минут; все узлы в сети поддерживают копию книги blockchain. Пользователи могут перемещаться по блокчейну для биткоинов и просматривать транзакции только с точки зрения количества. Сведения о личности покупателя и продавца в любой транзакции защищены высокоуровневым шифрованием, которое также защищает книгу от подделки внешними источниками. Когда блокчейн-книга обновляется, так же, как и все биткоин-кошельки.
Борьба с двойными расходами
Представьте, что у вас есть 1 BTC, и вы пытаетесь потратить его дважды в двух отдельных транзакциях. Вы можете попытаться сделать это, отправив один и тот же BTC на два разных адреса кошельков биткоинов. Затем обе эти транзакции будут включены в пул неподтвержденных транзакций. Первая транзакция будет одобрена через механизм подтверждения, а затем проверена в последующем блоке. Однако вторая транзакция будет признана недействительной в процессе подтверждения и не будет проверена. Если обе транзакции одновременно извлекаются из пула для подтверждения, то транзакция с наибольшим количеством подтверждений будет включена в блокчейн, а другая будет отброшена.
Хотя это эффективно решает проблему двойных расходов, она не обходится без своих проблем. Например, предполагаемый получатель второй (неудачной) транзакции не будет иметь участия в самой неудачной транзакции, и все же этот человек не получит биткоин, который он или она ожидали. Многие торговцы ждут по меньшей мере 6 подтверждений транзакции (это означает, что 6 последующих блоков транзакций были добавлены в блокчейн после рассматриваемой транзакции). В этот момент продавец может с уверенностью предположить, что сделка действительна.
Есть и другие уязвимости в этой системе, которые могут позволить дважды тратить атаки, чтобы иметь место. Например, если злоумышленник каким-то образом может контролировать не менее 51% мощности сети, он может совершить двойные расходы. Если бы злоумышленник каким-то образом смог получить контроль над этим большим количеством вычислительных мощностей, он или она могли бы отменить транзакции и создать отдельный, частный блокчейн. Однако бурный рост биткоина практически гарантировал, что такой тип атаки невозможен. (Для получения дополнительной информации см. раздел остерегайтесь этих пяти Биткоин-мошенников)
Proof-Of-Work и майнинг
А теперь давайте перейдем к более техническим вопросам. Способ, которым пользователи обнаруживают фальсификации, такие как попытка удвоить расходы на практике, заключается в использовании хэшей, длинные строки чисел, которые служат доказательством работы (PoW). Поместите заданный набор данных через хэш-функцию (биткоин использует SHA-256), и он будет генерировать только один хэш. Однако из-за "эффекта лавины" даже незначительное изменение любой части исходных данных приведет к совершенно неузнаваемому хэшу. Независимо от размера исходного набора данных, хэш, созданный данной функцией, будет иметь одинаковую длину. Хэш является односторонней функцией: его нельзя использовать для получения исходных данных, только чтобы проверить, что данные, которые создали хэш, соответствуют исходным данным.
Генерирование просто любого хэша для набора транзакций биткоинов было бы тривиальным для современного компьютера, поэтому для того, чтобы превратить процесс в "работу", сеть биткоинов устанавливает определенный уровень "сложности".Эта настройка настраивается таким образом, что новый блок "майнится" – добавляется в блокчейн путем генерации допустимого хэша – примерно каждые 10 минут. Сложность установки достигается путем установления "цели" для хэша: чем ниже цель, тем меньше набор допустимых хэшей, и тем труднее создать один.
Поскольку заданный набор данных может генерировать только один хэш, как майнеры удостоверяются, что они генерируют хэш ниже целевого объекта? Они изменяют входные данные, добавляя целое число, называемое nonce ("число, используемое один раз"). После того, как действительный хэш найден, он транслируется в сеть, и блок добавляется в блокчейн.
Добыча полезных ископаемых-это соревновательный процесс, но это скорее лотерея, чем гонка. В среднем, кто-то будет генерировать приемлемое доказательство работы каждые десять минут, но кто это будет, можно только догадываться. Майнеры объединяются вместе, чтобы увеличить свои шансы на майнинг блоков, который генерирует транзакционные сборы и, в течение ограниченного времени, вознаграждение вновь созданных биткоинов.
Proof-Of-Work делает чрезвычайно трудным изменение любого аспекта блокчейна, поскольку такое изменение потребует повторного майнинга всех последующих блоков. Это также затрудняет монополизацию вычислительной мощности сети пользователем или пулом пользователей, поскольку оборудование и мощность, необходимые для выполнения хэш-функций, являются дорогостоящими.
Сообщения из Facebook