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

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

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

Ответы (1)

Я могу предоставить краткое изложение, которое поможет вам понять все, пока вы будете искать подробности в Google.

Это отдельные заботы.

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

Другие причины признания сделки недействительной. У отправителя недостаточно средств, контракт решил, что ввод неприемлем, контракт решил, что запрос неприемлем.

Майнинг блока — отдельная тема.

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

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

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

Подтверждение транзакции

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

Все вместе сейчас:

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

Надеюсь, поможет.

Это было очень полезно, Роб, спасибо! Итак, теперь я понимаю, что проверка транзакции — это в основном процесс, основанный на доказательствах (т. е. установление наличия достаточных средств, подписания транзакции и т. д.). И, так что это не зависит от того, будет ли это подтверждено. Итак, подтверждение транзакции происходит только тогда, когда блок подтверждается достаточное количество раз? Просто хочу убедиться, что я правильно понял.
Я хочу проверить еще одну вещь... Я также точен, что подтверждение блока включает в себя (1) решение математической головоломки + (2) распространение решения в сети быстрее, чем другие, которые могут решать его примерно в то же время. время? Мне до сих пор не очень понятна связь между (а) упорядочением транзакций в определенном порядке и (б) решением математической головоломки. Как они связаны с процессом подтверждения?
Из-за задержки в сети узлы узнают об ожидающих транзакциях в разном порядке. Из-за физики мы не можем ожидать, что все будет быстрее, чем все остальное. Из-за децентрализации ничьи часы не лучше, чем чьи-либо еще, поэтому мы не можем их использовать. Головоломка — это способ устранить неоднозначность правильного порядка событий внутри блока. Майнер, решивший головоломку первым, получает привилегию объявить, какие транзакции должны быть обработаны. Дополнительные детали относятся к сценарию, когда два или более майнера объявляют о решении более или менее одновременно => возможный консенсус
@RobHitchens: спасибо за удивительно простой язык, на котором это объясняется. Любые источники, где я могу узнать больше о возможном консенсусе в случае, если 2 или более майнеров одновременно решают/объявляют о новом блоке? Я узнал, что создает разветвление в цепочке, которое можно разрешить, дождавшись установленного количества подтверждений (6 в случае Ethereum из того, что я читал — но я могу ошибаться) — но что, если разветвление выйдет за пределы этого набора число?
Proof-of-Work — это одна из тех вещей, на которые нужно потратить немного времени, чтобы увидеть объяснения с разных точек зрения, пока они не щелкнут. Описанная вами «вилка» верна. Это решается правилом самой длинной цепочки. По мере того, как блоки складываются, узел наблюдает, какая цепочка имеет наибольшее количество доказательств наибольшей работы и считает ее канонической цепочкой.
Неочевидное свойство, которое, я думаю, важно понять, заключается в том, что ни одна транзакция не обязательно теряется, когда блок отклоняется, потому что «эй… мы сейчас следуем другому форку». В обеих действительных цепочках есть действительные транзакции из одного и того же ожидающего мемпула. В большинстве случаев цепочки имеют одни и те же транзакции в разном порядке.