Влияет ли доказательство работы непосредственно на предотвращение двойных расходов?

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

Представьте майнера Боба, пытающегося дважды потратить 1 BTC, отправив его как Алисе, так и Джиму. Либо он может включить обе транзакции для Алисы и Джима в один плохой блок, который он майнит — в этом случае блок будет отклонен даже с действительным PoW. Или он может транслировать свою первую (действительную) транзакцию Алисе и позволить кому-то другому добывать ее, а затем добывать свой плохой блок позже с транзакцией Джиму, которая снова будет отклонена, независимо от наличия действительного Proof-of-work. Значит, двойная трата действительно защищена на уровне проверки транзакций, которую выполняет каждый полный узел в сети? Это означает, что PoW на самом деле не останавливает двойные траты напрямую — что останавливает двойные траты, так это то, что узлы знают о ранее подтвержденных транзакциях. И причина, по которой мы можем доверять всем транзакциям в блокчейне «подтверждены», — это PoW?

Если это так, и PoW является более высокоуровневым общесистемным решением, вот последний вопрос, который, я надеюсь, кто-то сможет прояснить: почему мы не можем заменить PoW автоматическим 10-минутным добавлением блоков на основе простой метки времени? ? Это потому, что это такая критически важная задача (подразумевающая доверие всей системы), что, в отличие от расчета сложности (где мы полагаемся на метки времени), мы должны найти альтернативу, в которой нельзя подделать значение времени? (даже если бы это было так, отдельные узлы, по-видимому, смогли бы отклонить фальшивые времена). Неправильно ли думать о Proof-of-work как о замене доверия к (поддающемуся взлому/подделке) серверу временных меток, который может регулировать «блоки каждые 10 минут».

Ответы (1)

Здесь используется несколько определений термина «двойная трата». Во-первых, существует фактическое определение двойной траты: тратить одни и те же деньги несколько раз. Простым примером этого является монета на веревке в торговом автомате. Вы привязываете веревку к монете, когда вы кладете монету в автомат, он думает, что вы заплатили, вы получаете все, что хотите, из автомата, затем вы используете веревку, чтобы вытащить монету обратно, чтобы ее можно было снова потратить. где-нибудь еще.

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

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

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

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

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

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

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

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

почему мы не можем заменить PoW автоматическим 10-минутным добавлением блока на основе простой метки времени?

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

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

Вся цель Proof of Work состоит в том, чтобы обеспечить децентрализованную систему, в которой каждый может согласиться с правдой без какого-либо центрального органа, диктующего, что это за правда. Если все будут следовать одним и тем же правилам, то в конце концов все придут к выводу, что есть истина. Использование затрат энергии в Proof of Work не позволяет кому-то переписывать историю с разными блоками, потому что это дорого. Разрыв связи с использованием цепочки с наибольшей работой позволяет узлам сходиться в одной и той же цепочке блоков. Использование Proof of Work отвечает на вопросы, которые я поставил выше, не полагаясь на центральный орган.

В заключение, Proof of Work позволяет транзакциям стать урегулированными и необратимыми. Это позволяет узлам объединяться в одну и ту же цепочку блоков и делает чрезвычайно дорогим, до невозможности дорогим, переписывание истории, что делает транзакции в цепочке блоков необратимыми. Фактическое обеспечение того, чтобы в блокчейне не существовало конфликтующих транзакций и, таким образом, фактическое предотвращение истинных двойных расходов, возлагается на узлы, которые проверяют блокчейн.

спасибо за такой развернутый ответ!
@Эндрю Чоу, спасибо за отличное объяснение. У меня все еще есть некоторые сомнения относительно полезности PoW. Что, если для каждого конфликта блоков существует очевидная и неоспоримая истина, и поэтому консенсус нам больше не нужен. В этой ситуации нам все еще нужен PoW?
под очевидной и неоспоримой истиной я подразумеваю, когда есть конфликт блоков, каждый узел, несомненно, может сделать вывод об одной и той же истине о том, какой из них является правильным, точно так же, как мы всегда можем сделать вывод, что два больше, чем один, истинны.
@swampcypress Конечно, если бы существовал децентрализованный способ сделать это, нам бы не понадобился PoW.