Зачем нам нужно доказательство работы в биткойнах?

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

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

I also know that bitcoin mining is adding a transaction into the blockchain and then the miner will need to solve a pow problem.Майнинг — это создание блока транзакций и, если повезет, решение проблемы PoW для этого блока до того, как какой-либо другой майнер добавит блок, а затем добавит блок в цепочку блоков.
тесно связано: bitcoin.stackexchange.com/q/331/5406

Ответы (6)

Представьте, что у меня есть 1 биткойн. И представьте, что я могу сформировать транзакцию, чтобы отправить этот биткойн Алисе, или я могу сформировать транзакцию, чтобы отправить этот биткойн Чарли.

Что мешает мне оформить обе сделки? Ничего такого.

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

Это то, что делает PoW. Майнер не может вносить PoW в обе транзакции одновременно — он должен выбрать одну.

Хорошо, я вижу, как PoW связан с двойными расходами, спасибо.
«Это то, что делает PoW. Майнер не может вносить PoW в обе транзакции одновременно — он должен выбрать одну». Можете ли вы уточнить этот вопрос? Я уверен, что многие пользователи оценят это. в вашем ответе сейчас я не понимаю, как и почему POW все еще используется в биткойнах
@user200300 user200300 Я не совсем понимаю, что вам непонятно. Вы понимаете проблему, которую я описываю? Кто-то может сформировать две действительные транзакции, и нам нужен какой-то способ, чтобы все в конечном итоге согласились, какую из них принять. (Может быть, было бы полезно задать свой вопрос о том, что конкретно вы не понимаете?)
Привет Дэвид. Как майнер решает, какую транзакцию зафиксировать POW? И как этот выбор помогает поддерживать целостность блокчейна? Кроме того, разве POW не выполняется для блока, а не для транзакции как таковой?
PoW выполняется в блоке, но этот блок не может сформировать цепочку, включающую обе транзакции, или эта цепочка недействительна и будет проигнорирована. Майнер хочет, чтобы ему платили, поэтому он использует самую длинную цепочку, которую может найти.
Я думаю, что это объяснение совершенно недостаточно. Все, что он говорит, это то, что PoW захватывает одну из возможных конкурирующих транзакций — все в порядке. Но что это не объясняет, так это то, что вы отправляете 1 биткойн ОБА Алисе и Чарли в виде двух отдельных транзакций, прежде чем любая из них будет принята. Теперь предположим, что транзакция Алисы успешно добавлена ​​в блок после PoW. Теперь транзакция Чарли еще не завершена. Ваше объяснение скрывает, какой будет судьба сделки с Чарли...
@Jazimov С ним ничего не может случиться.
Почему это? PoW успешно вводит первую транзакцию в блок, который проверяется другими узлами и добавляется в блокчейн. Когда встречается вторая транзакция, какой механизм блокчейна заставляет ее игнорироваться?
Это недействительно, потому что он пытается заявить о неизрасходованном выходе, которого больше не существует. Ни один узел не допустит, чтобы что-то случилось с недействительной транзакцией. Блок, который попытается включить его, будет проигнорирован.
«Итак, если я это сделаю, как люди узнают, какая транзакция действительна? Очевидно, что без какого-либо надежного способа определить, какая из этих двух транзакций действительна, система обречена». А как насчет консенсуса по разрешению конфликтов: если один кошелек пытается совершить двойную трату, транзакция с более низким хэшем считается действительной транзакцией?
@Calmarius Это было бы катастрофой. Ни одна транзакция никогда не будет окончательной до тех пор, пока вы не сможете увидеть каждую транзакцию, которая когда-либо должна была произойти, чтобы убедиться, что не существует конфликтующей транзакции с более низким хэшем. Как бы вы вели бизнес, если бы никогда не могли рассчитывать на транзакцию, не теряющую разрешения конфликта?
Узлы могут локально ставить временные метки транзакциям и объявлять их окончательными, если они достаточно старые (скажем, 1 час), в этот момент никакие обновления не принимаются. Более серьезная проблема заключается в том, чтобы убедиться, что узлы находятся в консенсусе, и все они строят одну и ту же цепочку, и я не думаю, что это возможно без искусственного замедления сети с помощью PoW и предоставления блокам возможности передать все узлы до появления следующего.
@Calmarius Нет, они не могут. Что, если один узел считает, что ей уже 1 час, а другой думает, что ей 59,9 минуты, когда обнаруживается конфликтующая транзакция? Как они могли договориться? Злоумышленник может создать тысячу конфликтующих транзакций, отправить одну с наибольшим хэшем, затем подождать 59 минут, а затем отправить остальные 999 (в порядке хеширования, от большего к меньшему) в течение следующих двух минут, и сеть больше никогда не согласится.
Я не понимаю, как удвоить расходы без PoF, я создал новый вопрос, может быть, его легче понять, объясняя пошаговую проблему: bitcoin.stackexchange.com/questions/76294/why-we-need-mining
Ответ @David Schwartz: я не могу полностью понять, как PoW связан с смягчением последствий, например, двойных расходов?! Насколько я понял, алгоритм PoW требует, чтобы хэш строки начинался с нескольких нулей... трудно найти правильное число и т. д. и т. д., но если хэш какой-либо строки (скажем, транзакция, blockchain) начинается с нуля, это не доказывает, что транзакция действительна! Очень признателен, если кто-нибудь разъяснит мне этот вопрос. Спасибо.
@MF Задача не в том, чтобы знать, какие транзакции действительны. Задача состоит в том, чтобы узнать, какую из двух допустимых, но противоречивых транзакций в конечном итоге примут все остальные.
«Очевидно, что без надежного способа определить, какая из этих двух транзакций действительна, система обречена». В вычислительном отношении не требуется создавать PoW, чтобы убедиться, что все транзакции, упакованные в определенный блок, являются взаимно действительными в соответствии с текущей цепочкой блоков. Если вы упакуете обе транзакции в один блок, блок не будет действительным. Если вы упаковываете одну транзакцию в блок и она оказывается в блокчейне, то любой будущий блок, который я добавлю, не может включать в себя другую транзакцию. Нет необходимости в PoW для проверки этих условий.
@rapt Можете ли вы объяснить, как это будет работать? Скажем, у меня есть блокчейн, который заканчивается блоком A, у вас есть блокчейн, который заканчивается блоком B, а в блоке A есть транзакция, конфликтующая с блоком B. Как узнать, на какую из этих двух конфликтующих транзакций я могу полагаться без PoW?
@DavidSchwartz Для вас как для стороннего наблюдателя в первую очередь важно, чтобы все текущие версии блокчейна (BC) были действительными. То есть, что для каждой версии БК транзакции внутри этой БК действительны и не противоречат друг другу. Это «легко» сделать без PoW, независимо от каждого пользователя (взаимное доверие не требуется). Теперь для вас, как для стороннего наблюдателя, процесс PoW просто случайным образом выбирает один из действительных конкурирующих BC. Вам все равно, как кого-то выберут (по работе, по лотерее и т. д.). Все, что вас волнует, это то, что сеть принимает этот процесс выбора победителя.
@rapt Думаю, я понятия не имею, о чем ты. Вы говорите кучу вещей, которые технически правильны, но сформулированы сбивающе с толку. Что вы пытаетесь достичь? Вы пытаетесь что-то прояснить? Если да, то я думаю, что вы терпите неудачу. Вы пытаетесь исправить то, что считаете ошибкой? Если да, можете ли вы уточнить, что вы считаете неправильным?
PoW не используется для защиты от атак двойного расходования. PoW используется исключительно для того, чтобы выбрать, какой случайный майнер из общего числа майнеров сможет выбрать содержимое следующего блока. Майнер-победитель все еще может быть нечестным, если это так, то транзакции этого нового блока могут содержать двойные траты, и если бы это было так, блок считался бы недействительным, отвергнутым всеми другими майнерами и осиротевшим.
@dodgy_coder Вы не правы. Двойные траты не связаны с блоками, которые могут рассматриваться как недействительные. Примером двойной траты может быть случай, когда у Алисы есть 1 биткойн и два блока добываются примерно в одно и то же время, один из которых содержит действительную транзакцию, отправляющую этот биткойн Бобу, а другой содержит действительную транзакцию, отправляющую этот биткойн Чарли. Любой, кто увидит только один из этих двух блоков, добытых примерно в одно и то же время, примет его, потому что он действителен. (Вы читали мой ответ? Он говорит именно об этом.)
@dodgy_coder Решение проблемы двойной траты требует какого-то способа, чтобы сеть в конечном итоге согласилась, какую из двух индивидуально действительных, но конфликтующих транзакций принять. Биткойн использует PoW для этой цели.
@DavidSchwartz Я понимаю, что ты говоришь, но выслушай меня. Таким образом, несмотря на PoW, майнер X получил право сформировать новый блок. Они помещают в этот новый блок транзакцию от Алисы к Бобу. Другой майнер Y через PoW снова (примерно в то же время) нашел новый блок и добавил транзакцию от Алисы к Чарли. Как PoW предотвратил двойную трату? Это не имело к этому никакого отношения. Протокольное правило расширения самой длинной действительной цепочки позаботилось об этом на следующем блоке, который был присужден майнеру Z. Все, что PoW сделал для нас, — это случайный выбор майнера на основе его текущей скорости хэширования.
@DavidSchwartz На самом деле я сказал выше, что это было «правило протокола» ... на самом деле это собственный стимул майнера расширить самую длинную действующую цепочку. Майнер Z должен был выбрать один из допустимых блоков (от майнера X или майнера Y), и это стало цепочкой консенсуса. В тот момент времени, когда произошла двойная трата, вполне возможно (в зависимости от программного обеспечения кошелька Боба и Чарли), что они оба увидели действительную транзакцию с 0 подтверждениями. Таким образом, произошла двойная трата, но затем один tx-блок стал осиротевшим, а другой — нет.
@David Schwartz Разве нет механизма проверки баланса перед транзакцией? Если 1 биткойн будет отправлен 2 людям, только один из них получит, а другой будет отброшен как недействительный. Я не понимаю, как PoW предотвратит это.
@AbhishekChaudhary Как тысячи людей договариваются о том, что принимать, а что отбрасывать как недействительное? Вот что делает PoW для биткойнов.
@DavidSchwartz Вы не можете объяснить, зачем нужен PoW. (1) Узел выбирает 1000 незавершенных транзакций и помещает их в блок (2) Он не оценивает двойные расходы на этот блок. (3) Он хэширует блок вместе с предыдущим хэшем в цепочке блоков. (4) Он передает блок другим узлам. (5) Узлы проверяют блок и добавляют его в блокчейн, если он действителен. Это оно? Какова ценность хеширования блока 10 000 раз, изменяя только одноразовый номер до тех пор, пока хеш не начнется с N нулей, как хешировать его один раз? Это не добавляет корректности. Как форма управления потоком это кажется абсурдно расточительным.
@Lobotomik Что, если кто-то другой сделает то же самое, но его блок включает транзакцию, конфликтующую с транзакцией в этом блоке? Что мешает сети разбиться на две несогласные стороны? Ценность доказательства выполнения работы заключается в том, что оно решает эту проблему — побеждает цепочка с наибольшим объемом работы. И менять это очень дорого.
@DavidSchwartz, это действительно главный смысл PoW? защита от двойных расходов? не могут ли узлы просто проверить, что баланса недостаточно для размещения обеих транзакций, и отклонить такие «плохие» блоки?
@SpaceMonkey Могут, но проблема не в этом. Проблема в том, что один узел принимает блок, содержащий одну транзакцию, а другой узел принимает блок, содержащий конфликтующую транзакцию. С этого момента две половины расходятся во мнениях относительно того, какие транзакции после этого действительны (потому что каждая сторона видит счета с разными балансами). Как вы обеспечиваете возможную согласованность и не даете сети накапливать все больше и больше разногласий? Попробуйте найти способ, и вы быстро обнаружите, что он совсем не прост.
@DavidSchwartz То же самое происходит в биткойнах, и решение состоит в том, чтобы взять самую длинную цепочку, но опять же, зачем нам PoW? Я думаю, это сделано для того, чтобы злоумышленники не рассылали спам недействительными блоками. Таким образом, похоже, что PoW в основном предназначен для контроля участия в сети (вам нужно приложить усилие, которое легко проверить), поэтому злоумышленники не могут построить более длинную цепочку, не имея более 50% мощности хеширования. Имеет ли это смысл?
@SpaceMonkey Если вам полезно подумать об этом, я думаю, это нормально. Я нахожу это слишком сложным. Это очень просто: самая длинная цепочка бесполезна, если каждый, кто хочет, может сделать цепочку такой длины, какой он хочет. Самая длинная цепочка — полезное правило только в том случае, если сложно сделать цепочку длиннее.
@DavidSchwartz, верно, это хороший способ выразить это. Итак, помимо «порядка транзакции» (что означает двойную трату), что еще дает нам PoW? нам не нужен PoW для подтверждения транзакций, поскольку мы можем проверять каждую транзакцию индивидуально, ну и что еще?
@SpaceMonkey Канонический ответ состоит в том, чтобы обеспечить порядок транзакций, который нам нужен для решения проблемы двойной траты. Второстепенный ответ заключается в том, чтобы выполнить первоначальное распределение без центральной стороны.
@DavidSchwartz Я ценю ваши ответы, я думаю, что это лучшие ответы, которые я получил до сих пор. Не могли бы вы присоединиться к моему чату вместо того, чтобы комментировать здесь? chat.stackexchange.com/rooms/122747/…

Доказательство работы (PoW) в основном гарантирует, что майнеры не мошенничают.

Невозможно быть уверенным, что все в сети честны, поэтому должен быть какой-то способ помешать майнерам создавать новые блоки, которые приносят им выгоду. Это работает следующим образом: у вас есть группа людей, пытающихся угадать ответ на математическую задачу, и никто не знает, кто первым даст правильный ответ. Тот, кто первым получит правильный ответ, получит вознаграждение, но только в том случае, если все остальные майнеры согласятся принять эту запись транзакции (если станет очевидным, что определенный майнер создает мошеннические транзакции, тогда другие майнеры могут коллективно отказаться принимать свои взносы). Вот почему процесс создания нового блока спроектирован так, чтобы быть энергоемким, так что создание каждого нового блока связано с затратами. Это не позволяет майнерам просто создавать целую кучу новых мошеннических блоков в надежде, что, возможно, они будут приняты, потому что затраты на это компенсируют потенциальное вознаграждение. Это помогает думать о доказательстве работы как о возможном решении спама в электронной почте. Если бы требовалось, чтобы каждый компьютер потратил минуту на решение проблемы PoW перед отправкой каждого письма, то только люди с подлинными сообщениями согласились бы затратить усилия. Одна минута компьютерного времени стоит очень дешево для человека, но парень, рассылающий 10 миллионов спам-писем, не может позволить себе ждать 10 миллионов минут, чтобы сделать это. Итак, возвращаясь к биткойну, шанс каждого отдельного майнера решить каждый блок довольно мал, и, поскольку для решения блоков требуется много усилий, они не могут просто спамить сеть решениями.

Надеюсь, это имеет смысл.

Это лучшая разбивка, которую я смог найти ( http://nakamotoinstitute.org/mempool/the-proof-of-work-concept/ )

«Это не позволяет майнерам просто создавать целую кучу новых мошеннических блоков в надежде, что, возможно, они будут приняты» . Я не понимаю, почему это не сработает и для блоков.
@Calmarius, действительно существует два уровня консенсуса: уровень транзакции и уровень блока. Таким образом, мошеннические транзакции, рассылаемые спамом, быстро обнаруживаются с помощью консенсусного голосования, которое устраняет византийские ошибки.
Я не уверен, правильно ли я понимаю, потому что, на мой взгляд, и как я пытаюсь это понять, PoW — это файл delaying mechanism. Таким образом, это заставляет всех медлить и делать паузы. И раз эта обязательная задержка есть, каблам, то получается последовательное упорядочение. Я не уверен, что в этом весь смысл. Я только начал читать на Mastering Bitcoinпрошлой неделе. Пожалуйста, поправьте меня, если я ошибаюсь.

То, как я понимаю, как работает доказательство работы ( PoW ), таково: его основная цель — предотвратить мошенничество или создание противоречивого представления о распределенном реестре.

Представьте себе сценарий двойной траты , когда участник А может потратить только 1 БК. Но, он создает две независимые транзакции или «тратит» на каждую по 1 БК. Затем он представляет каждую расходную транзакцию двум разным сторонам B и C как действительные платежи. Поскольку нет понятия сериализации транзакций (как это было бы в централизованной базе данных с атомарными фиксациями), возможно, что некоторые участники сети сначала записали платеж A в адрес B , в то время как другие записали платеж A. сначала на С. В то же время некоторые в конечном итоге откажутся от последнего платежа (поскольку А может потратить только 1 БК).

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

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

  1. Либо обе транзакции группируются вместе в одном блоке,
  2. Или они сгруппированы в разные блоки.

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

Вопрос, который мне не был ясен, заключается в следующем: Биткойн использует определенный вариант вычисления прообраза хеш-значения SHA-256. Поскольку цель PoW состоит только в том, чтобы отсрочить создание новых блоков на достаточное время, эта головоломка для решения может быть любой — как, например, решение проблемы размещения 16 ферзей на шахматной доске или что-то в этом роде. Неясно, действительно ли головоломка должна иметь корреляцию с фактическими данными в фиксируемом блоке.

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

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

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

короткий ответ :

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

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

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

Таким образом, при заданном блоке А, чтобы иметь 6 блоков, добытых выше блока А в самой длинной цепочке, большой процент майнеров в сообществе майнеров биткойнов должен работать над цепочкой, включающей блок А.

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

Таким образом, Доказательство консенсуса было достигнуто.

Зачем нужно это Доказательство консенсуса? Он защищает цепочку блоков от разветвления (преднамеренного или непреднамеренного). Другие ответы описывают, почему кто-то может попытаться намеренно разветвить блокчейн (см. сценарий «Двойная трата»).