Будет ли Биткойн работать без целевой сложности?

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

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

У меня есть 3 отличных ответа, спасибо! Но, к сожалению, я до сих пор не понимаю, как для консенсуса требуется целевая сложность. Вы почему-то намекаете, что без целевой сложности нам нужен был бы центральный координатор для достижения консенсуса. Но это не похоже на правду: пока узлы собирают блоки и вычисляют цепочку с наибольшей накопленной работой, они достигнут консенсуса относительно канонической цепочки. Да, мы должны исходить из того, что можем получать данные от незлонамеренных пиров, но Биткойн также предполагает это!
Что такое «крупнейший PoW»? Объем работы, выполняемой над блоком для его хеширования, почти такой же, как и у любого другого блока, так как же вы утверждаете, что работа, проделанная для этого, больше, чем для этого?
По значению хэша блока. Вы можете назначить оценку блока как 1 / block_hash, которая является оценкой того, сколько одноразовых номеров было предпринято для создания этого блока. Затем сумма всех хэшей блоков до корня является оценкой этой конкретной цепочки. Узлы просто получают блоки и выбирают цепочку с наибольшим количеством очков.
сколько одноразовых номеров было предпринято для создания этого блока - что?
Это простое предложение. Какую часть у вас возникли проблемы с пониманием?
Часть, в которой вы утверждали, что хеш-значение блока каким-либо образом связано с количеством одноразовых номеров, которые были предприняты для реализации хэша, который меньше, чем сложность. Майнеру может повезти, и он упакует блок с хэшем ниже, чем сложность с первого раза, или ему может не повезти, и он проглотит миллиард вариантов блоков, прежде чем достигнет того же результата.
Хороший вопрос! Оказывается, это связано , статистически. Конечно, вы не можете определить, сколько одноразовых номеров на самом деле было предпринято для создания конкретного блока, поскольку, как вы заметили, удачливый майнер может получить очень низкий хэш с первой попытки. Но можно прикинуть - обратите внимание на ключевое слово. Например, если первые 4 бита хеша равны 0, вы можете предположить, что для его создания потребовалось не менее 16 хэшей. Конечно, это может быть не так для конкретного блока, но в среднем эта статистика верна. Имеет смысл?
Текущий биткойн не добавляет (приблизительно) накопленную работу по выбору цепочки, а просто подсчитывает длину цепочки. Это работает как легкая замена накопленной работе, потому что почти каждый блок близок к целевой сложности. В вашей схеме должна быть реализована фактическая оценка работы, но на первый взгляд она тоже может работать.
О, я этого не знал, но имеет смысл, что BTC не нужно суммировать работу, как я описал.
@MichaelKarcher: Биткойн ищет цепочку с наибольшей работой: github.com/bitcoin/bitcoin/blob/… . В исходном выпуске была ошибка, заключавшаяся в том, что он сравнивал только длину, но это позволяло проводить атаки на большие расстояния с низкой сложностью реорганизации и было исправлено много лет назад.

Ответы (4)

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

Итак, теперь вместо того, чтобы кто-то находил блокировку и объявлял о ней, нам нужно разослать гораздо больше данных, а затем запустить какой-то алгоритм консенсуса, чтобы согласовать, были ли/какие кандидаты представлены вовремя.


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

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

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

Почему для этого консенсуса недостаточно просто PoW? Пока узлы имеют примерно синхронизированные часы, время добычи блока можно вычислить с помощью genesis_time + 10 mins * block_count. Узлы просто транслируют блоки, как обычно, и выбирают цепочку с наибольшей работой.
Давайте предположим, что я майнер и вижу, что PoW за последние десять минут был довольно низким, поэтому я немного продолжаю майнить и фальсифицирую метку времени на своих кандидатах в блоки. Когда я нахожу блок с более высоким PoW, я объявляю об этом в сети. Как вы определяете, был ли найден мой кандидат в блок вовремя или нет?
Если каждый узел решает сам за себя, теперь у вас есть отличный способ разделить сеть. Если узлы принимают решение вместе, вам нужен алгоритм консенсуса.
и если вы устроите это так, что каждый узел решает сам, но все они решают одинаково, это алгоритм консенсуса.
Как вы предлагаете обеспечить «лучший блок в течение десяти минут» без временных меток?
@Murch нет временной метки. Но да, вы можете «перемайнить» старые блоки, если захотите. Но вам все равно нужно предоставить все новые блоки с большим количеством накопленной работы, чтобы они были приняты. Повторный майнинг достаточно старых блоков был бы невозможен, поэтому, в конечном счете, узлы достигают консенсуса относительно канонической цепочки, точно так же, как в биткойнах, не так ли? Я хочу сказать следующее: я до сих пор не понимаю, почему для этого требуется целевая сложность, а не просто сбор блоков и вычисление самой большой цепочки.
@MaiaVictor: Если бы у меня была серьезная атака на SHA-256, я бы предпочел объявить об этом, откатив таким образом транзакции программ-вымогателей.
Если у вас нет трудностей, как вы определяете выполненный PoW? Просто по самому низкому хешу?
Если да, то нет, это не поиск лучшей сети, такой как Биткойн. Например, злонамеренный майнер может попытаться отправить деньги себе в каждом блоке, который они добывают. Когда они находят чрезвычайно низкий хэш, они сохраняют этот блок в секрете и совершают конфликтную транзакцию, отправляя те же деньги на биржу. Они позволяют своему депозиту получить пару подтверждений, а затем обменивают его на альтернативную валюту. Затем злоумышленник публикует свой блок с чрезвычайно низким хэшем, чтобы заменить предыдущую лучшую цепочку.
В то время как закопанные блоки по-прежнему трудно заменить, кончик цепи становится совершенно ненадежным.
@Murch да, самый низкий хэш. Это именно то, что я имею в виду. Кончик цепи Биткойн также не надежен на 100%, вам нужно ~ 6 конф для максимальной безопасности. В таком предложении время окончательности следует считать довольно большим (скажем, 24 часа). Моя точка зрения такова: он будет работать как алгоритм консенсуса, просто он будет менее эффективен с точки зрения окончательности, чем биткойн, но, возможно, его будет проще реализовать и он будет более защищен от этих нескольких атак, связанных со сложностью цели . Имеет ли это смысл?
Я не понимаю, как вы пришли к такой оценке. Я думаю, что это было бы гораздо менее безопасно, поскольку большая часть хешрейта теперь тратится на ненужную конкуренцию, а не на прогресс, для безопасной транзакции потребуется гораздо больше подтверждений, и станет искусством оценивать, следует ли конкурировать с текущим лучшим блоком. или выбран в качестве предыдущего лучшего блока, это было бы намного более неэффективно с точки зрения пропускной способности и вычислительной мощности для участвующих узлов. Мне непонятно, чем вообще предложенный подход лучше.
Я вижу, теперь это интересные моменты, которые нужно иметь в виду. Я не уверен, что то, что вы говорите, действительно верно, т. е. большая часть вычислительной мощности будет потрачена впустую, и действительно ли сложно определить, на каком блоке майнить. Но это разумные моменты, которые следует учитывать. Спасибо за информацию.
@MaiaVictor: Загадайте мне вот что: если бы вы были мелким майнером в сети и нашли блок со сложностью в 1/100 от текущего хешрейта. Вы бы а) транслировали его и попытались добывать поверх него или б) попытались добыть лучший блок на той же высоте? Как другой майнер, когда вы получаете блок со скоростью 1/100 от текущего хэшрейта, вы бы а) переключились на использование этого блока в качестве предыдущего, б) попытались бы добывать более качественные блоки?
Что, если вы получите пять блоков с 1/100 сложности, строящихся друг над другом в течение одной минуты? Будете ли вы строить поверх этого или продолжите пробовать один блок с 1/10 сложности, чтобы заменить их все?
Я думаю, вы всегда будете майнить поверх лучшего блока за последние 10 минут, пытаясь получить все меньше и меньше хэшей и транслировать лучший блок, который у вас есть (даже если он не ваш). Пока майнеры продолжают это делать, блоки с низкой сложностью просто не будут распространяться, а хорошие блоки дойдут до всех. После 10-минутной отметки майнеры начнут майнить поверх лучшего блока, который у них есть за последние 10 минут, который почти всегда будет правильным. Если это не так, достаточно скоро появится нужный, и они не будут тратить столько усилий впустую.
Конечно, вы можете попробовать повторно майнить старые блоки, но это значительно снижает вероятность того, что ваши блоки будут распространяться, поэтому у вас есть стимул всегда добывать поверх вашего лучшего блока, то есть вашего наконечника с наибольшим накопленным PoW.
«Я думаю, что вы всегда будете майнить поверх лучшего блока за последние 10 минут» ⇒ Непонятно, почему вы считаете, что майнеры сойдутся в этом конкретном поведении. Тривиальный контрпример: майнер находит чрезвычайно низкий хэш. Наиболее рациональным было бы сразу же начать майнить поверх него, возможно, даже некоторое время держать его в секрете, чтобы другие майнеры тратили впустую свои майнинговые мощности.

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

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

В системе, которую вы предлагаете, вы не можете решить, видели ли вы «лучший блок 10-минутного промежутка времени», просто взглянув на блок. Это означает, что вы не знаете, является ли этот блок действительным блоком, не зная всех других кандидатов. Следствием этого является то, что блок, который вы считали действительным, может стать недействительным, когда появится блок с более низким хэшем. Это то, что не может произойти по действующей схеме, и имеет драматические последствия. Сегодня блок, который считается действительным, можно безопасно майнить, поскольку ожидается, что работа, необходимая для опережения действительного блока, будет примерно такой же, как и для продолжения этого блока. В вашей схеме нужно просто найти лучший блок, чтобы сделать ранее принятое решение недействительным , и вы уничтожаете работу, основанную на этом теперь недействительном блоке».

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

В системе, которую вы предлагаете, вы не можете решить, видели ли вы «лучший блок 10-минутного промежутка времени», просто взглянув на блок. -- Как же так? Лучший блок — тот, у которого самый высокий PoW. В Биткойне вы тоже не можете сказать, видели ли вы правильный блок за 10-минутный промежуток времени, не зная всех блоков: два блока могли быть добыты одновременно. Спор разрешается после нескольких блоков. Точно такой же процесс происходит в моей системе, я просто выбираю цепочку с самым большим PoW для начала. Центральный координатор не задействован.
Моя цель состояла в том, чтобы ответить на вопрос: «Можете ли вы решить, может ли блок быть действительным решением». В предлагаемой системе каждый блок может быть допустимым решением. В текущей системе допустимым решением могут быть только блоки, поражающие цель. Поскольку нахождение блоков, которые попадают в цель, крайне редко, обычно вычисляется только один блок, который решает заданную глубину и может быть легко идентифицирован (по попаданию в цель). В предлагаемой системе вы не можете легко определить, является ли блок, который вам показывают, наиболее вероятным общепринятым блоком на этой глубине.
Ах, справедливо, но почему это важно или желательно? Вы имеете в виду как способ предотвращения флуда/спама? Справедливо, что вы не можете знать, действителен ли блок, но для всех практических целей вы можете делать очень хорошие предположения. Например, если вы получили блок с большим показателем PoW, вы, вероятно, могли бы игнорировать любой блок с показателем PoW <50%.
Я отредактировал свой ответ, чтобы сосредоточиться на проблеме «победа над одним старым блоком делает недействительной всю цепочку блоков», которая на самом деле является ядром вопроса «действителен ли этот блок».
Я ценю ваш ответ, он становится отличным, но у меня все еще есть несколько опасений. 1. «Сегодня блок, который считается действительным, можно безопасно майнить» — в каком смысле безопасно? В Биткойне также может случиться так, что вы майните блок, который становится недействительным, если этот блок становится дядей. 2. «Обычный подход к вызову — это центральный арбитр, который собирает кандидатов и решает, какой блок выбрать, и закрепляет это решение навсегда». Это не имеет смысла для меня. Вместо этого вы просто добываете самый верхний блок и надеетесь, что он, по вашим словам, не станет недействительным. Имеет смысл?
Основное отличие состоит в том, что в настоящее время цепочка становится потерянной, если кто-то представляет более длинную цепочку, которая требует большой работы как цепочка-сирота. Ваша схема позволяет атаковать только один блок, самое слабое звено, чтобы разрушить всю зависящую от него цепочку, потому что ранее действующий блок («самый низкий хэш») теперь, очевидно, уже недействителен («это просто второй младший хэш, извините"), и вам не нужно обходить цепочку, следующую за этим блоком.
Итак, мой ключевой момент: «осиротевшие действительные вилки цепочки в порядке, блоки, которые внезапно оказываются недействительными, нарушают схему». - поэтому валидность блока должна быть свойством, которое не может динамически изменяться.
Да, это правильно, но обратите внимание, что вы выбираете самую длинную цепочку по сумме работы каждого блока, поэтому просто выбрать блок с небольшим счетом для замены не получится, так как вам также нужно заменить каждый блок сверху. этого. То есть действительный блок не становится недействительным, если появляется блок такой же высоты, но с более высоким баллом. Каждый блок действителен, вы просто выбираете самую длинную цепочку в качестве канонической временной шкалы, суммируя отдельные баллы.
Это не то, о чем говорит ваш вопрос. В нем говорится, что каждые десять минут принимается блок с наименьшим хэшем (и все остальные блоки, очевидно, должны быть отклонены). Таким образом, выигрывает не «самая дорогая цепочка», а цепочка с более дорогим блоком в точке разделения.
А, вот как ты это истолковал? Я не это имел в виду. Теперь я вижу проблему, и действительно, мой вопрос плохо сформулирован. Я имел в виду, что каждый блок принимается, но цепочка с наибольшей накопленной работой является канонической.
Для справки, я предполагал наибольшую сумму работы, но та же проблема по-прежнему относится к последним нескольким блокам в конце цепи: один блок с очень низким хэшем может реорганизовать один или несколько блоков из конца цепочки, случайно или намеренно.
@Murch Однако я не вижу в этом серьезной проблемы. Если блок с очень низким хэшем способен заменить вершину цепочки, ожидается, что этот блок и его потомки по-прежнему требуют больше работы, чем текущая вершина цепи, поэтому это соответствует идее биткойна: большая часть мощности хэширования верно. Мягкая проблема с предлагаемой схемой заключается в том, что реорганизации будут происходить чаще, пока не будет найден консенсус для конкретного блока, поэтому меньше работы уходит на окончательную цепочку, поскольку больше работы тратится на потерю цепочек.
(и, кажется, мой последний комментарий соответствует вашему ответу. Это зависит от того, как вы на это посмотрите, будет ли «без затруднений» просто худшей, но работоспособной схемой со многими реорганизациями и более высокими рисками закулисных атак, или эти риски делают эту схему неприемлемо.Я согласен с вами, что реорганизация почти после каждого блока и увеличение пропускной способности не являются желательными свойствами)
Да, это не полный запрет, но это сделало бы Биткойн менее безопасным, потому что атака большинства (которая всегда строится на своей собственной цепочке) потребует гораздо меньшую часть общего хэшрейта, чтобы продвигаться вперед, потому что так много хеширования тратится впустую. по содействию устаревшим советам. Это также было бы ужасным опытом с точки зрения пользователей, ожидающих подтверждения своих транзакций.

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

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

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

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

Хорошие моменты. Также оцените этот ответ, поскольку он понимает, что я предложил.

Резюме

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

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

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

Отвечаю (или пытаюсь ответить)

Учтите, что Биткойн полностью децентрализован, а распределенные системы страдают от концепции времени, которая не является абсолютной. Если у вас есть вопросы по этому поводу, вы должны опубликовать их в SW Engineering. Я просто скажу: «без центра сертификации вы можете хранить сообщение вечно». А Биткойн отказывается от центров сертификации, которые могут быть взломаны/подкуплены/вынуждены правительством и т. д.

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

Предположим, что узлы Биткойн только что приняли блок с наибольшим PoW каждые 10 минут.

Сама проблема: смотреть на это не с точки зрения всей системы. Посмотрите на это с точки зрения моего клиента Bitcoin-qt, загружающегося прямо сейчас из пустоты.

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

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

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

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

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

(1) Биткойн был разработан как для покупки продуктов, так и для покупки недвижимости. Конечно, это не такая потеря, как двойная трата в бакалейной лавке.

(2) Перезапись транзакции в рамках блокчейна означает, что если транзакция произошла в блоке 100, замена каждого блока с на 100на 1 на 1current100current

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