В разделе «Отсечение ветвей в дереве Меркла» Ник Оделл пишет: «Лист (транзакция) может быть удален, когда все его выходные данные были потрачены». Поэтому я подумал, что если транзакция является одной из последних в блоке, майнер может скопировать транзакцию в новый добываемый блок. Таким образом, майнеру (и остальной части сети) больше не нужен этот блок для проверки, и он может быть выпущен в эфир.
Ник также написал, что ядро Биткойн в любом случае не будет сокращаться таким образом, потому что оно работает «исходя из того, что вы загружаете и проверяете все блоки». Я изучаю причины этого , чтобы увидеть, можно ли их устранить, не сохраняя все.
Идея загрузки всего блокчейна перед запуском режима обрезки заключается в том, что вы хотите убедиться, что то, с чего вы начинаете, действительно. Единственный известный способ сделать это - получить все это. Или это? Кажется, что вездесущность самого блокчейна соответствует вездесущности действительного набора UTXO, поэтому, если вы получаете действительный набор UTXO и он соответствует тому, что говорит любой другой узел, все готово. За исключением атак Сивиллы, верно? Позволит ли такая успешная атака Сивиллы подделать сам блокчейн?
Одна из трудностей с моим подходом к перемещению транзакции заключается в том, что когда новый узел загружает блокчейн (независимо от того, сколько его еще нужно), он захочет проверить каждый блок, и если блок X отсутствует, то все блоки, которые содержат входные данные, которые были созданы в блоке X, не могут быть проверены, если это означает проверку правильности транзакций в нем. Однако сам блокхедер все еще может быть проверен. Заголовок блока X не может быть проверен, поскольку его содержимое отсутствует. Но разве тот факт, что хэш из блока X требуется в блоке X+1, не достаточен, чтобы верить, что блок X был действительным, и, следовательно, блоки X+1, X+2, X+3 и т. д. , вплоть до любого проверяемого блока включительно, содержащего транзакцию, которая использует вывод (предположительно), созданный в блоке X?
Когда, наконец, появится транзакция, которая тратит неизрасходованные выходные данные перемещенной транзакции, ее невозможно будет проверить, поскольку блок X отсутствует. Однако, если индекс, который определяет, какой блок содержит транзакцию, был обновлен майнером, который перемещает транзакцию, то это легко решить.
Должно ли это обновление индекса также учитывать все непосредственные дочерние транзакции перемещенных транзакций, чтобы существующие, ранее действительные транзакции все еще можно было проверить, найдя исходную транзакцию во вновь добытом блоке? Я не думаю, что необходимо повторно проверять транзакции, которые находятся в блоках с проверенными заголовками, не так ли?
Это кажется большим усилием для абсолютно никакой выгоды.
В модели обрезки биткойнов вы в любом случае отбрасываете ВСЕ эти старые блоки и ПРОСТО сохраняете набор utxo. Неважно, находится ли utxo в старом или новом блоке, вы все равно сохраняете его в utxoset. Любые блоки, которые вы храните, предназначены только для удобства и для помощи другим узлам, которые запрашивают эти блоки.
Простой ответ — ДА, но есть и лучшие решения. Хотя он позволяет представить все транзакции в более поздних блоках, наличие транзакции в очень старом блоке НЕ предотвращает сокращение, которое я предполагал. Чтобы сделать самые ранние блоки ненужными для проверки истории Биткойна, требуется только доказательство того, что какие-либо UTXO в них действительно существуют и что они еще не были потрачены. Текущий набор UTXO позволит это сделать, но это должно быть доказано. Йонас Шнелли предложил нечто очень похожее в феврале.
Марч
Марч