Как BitCoin предотвращает мошенничество в период подтверждения?

Я изо всех сил пытаюсь понять, как работает биткойн, и хотя я усвоил основы, у меня остался нерешенный вопрос:

Что мешает мне тратить биткойны несколько раз в течение периода подтверждения?

Допустим, у меня есть один адрес, которому принадлежит 1 BTC. Я иду в кафе и использую монету (предположим всю монету для простоты), чтобы купить чашку кофе. Транзакция транслируется по сети. Затем майнеры соревнуются друг с другом, чтобы включить мою транзакцию в проверенный блок с несколькими транзакциями, который будет отправлен в цепочку блоков. Этот процесс занимает около десяти минут. В течение этого десятиминутного периода я иду на заправку и повторно использую свой 1 BTC, чтобы купить немного бензина. Как заправочная станция могла знать, что я уже использовал свой 1 BTC для покупки кофе несколькими минутами ранее, и мой фактический баланс равен нулю, поскольку транзакция с кофе еще не является частью официальной цепочки блоков?

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

Что мне не хватает?

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

Ответы (1)

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

Хотя это не так просто, как вы предлагаете. Когда вы совершали транзакцию в кафе, она, как вы говорите, транслировалась по сети. За исключением проблем с подключением, каждый узел в сети получает копию почти сразу. (Им не нужно ждать, пока он будет включен в блок.) В частности, заправочная станция получает копию. Поэтому, когда вы пытаетесь потратить с ними ту же монету, они узнают, что она уже потрачена, и отклонят вашу транзакцию.

Чтобы это работало, вы должны убедиться, что жертва не знает о другой транзакции. Один из подходов заключается в том, что первая транзакция вместо покупки каких-то других товаров просто отправляет монету обратно на другой адрес, который вы контролируете. Вы не транслируете это по сети; скорее, вы отдаете ее непосредственно майнеру, понимая, что он должен включить ее в свой следующий блок, а не конфликтующую транзакцию, которая отправляет монету на заправочную станцию. В варианте, называемом атакой Финни , майнер (возможно, вы сами) уже добыл блок с транзакцией, которая отправляет вам монету, но он ждет, чтобы отправить ее в сеть, пока вы не купите свой газ.