Что такое процедура проверки блока, и станет ли она когда-нибудь слишком дорогостоящей?

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

  • хеш блока - т. е. хэш заголовка, включая пред. блочный хеш, хеш Merchle Root, время, цель и nonce правильны, а его значение меньше целевого.
  • цель - должна быть равна текущей (трудности) цели.
  • хэш предыдущего. блок - должен быть правильным и должен «указывать» на конец текущей «самой длинной» (самой сложной) цепочки.
  • все транзакции в блоке. Похоже, что это будет включать в себя: поиск входных txn текущих txn по их хэшам и запуск соответствующих пар sigScript + pubKeyScript. Также проверяем для каждого txn сумму (входы)> = sum (выходы).
  • транзакция coinbase. sum (выходы)> = «изменение», оставленное всеми остальными текущими txn.
  • хэш корня Меркле.

Вопросы:

  1. Я что-то пропустил? (Метка времени?)
  2. Это похоже на большую работу! В частности, сканирование всей цепочки для поиска входных транзакций. (Хотя я полагаю, что клиент мог бы создать индекс один раз при запуске.) Я понимаю, что по крайней мере # 4 является необязательным - узел может предпочесть, что это было сделано кем-то другим. По мере того, как блок-цепочка растет больше & чем больше, не станет ли менее целесообразным, чтобы отдельные узлы выполняли всю эту работу каждые 10 минут, что привело к меньшему количеству проверок?
  3. Нужно ли узлу проверять каждый блок (и, следовательно, каждый txn), когда он сначала загружает цепочку? Одно дело проверять все хэши блоков, но новый узел без какой-либо истории не знал бы, было ли содержимое действительным - только то, что X объем работы пошел на решение блоков.
6 голосов | спросил meeotch 25 J000000Thursday13 2013, 09:00:59

1 ответ


2

I) См. https://en.bitcoin.it/wiki/Protocol_rules# .22block.22_messages для полного списка проверок, которые должны выполняться в новом блоке.

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

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

ответил gavinandresen 28 Jam1000000amTue, 28 Jan 2014 00:46:03 +040014 2014, 00:46:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132