Что такое процедура проверки блока, и станет ли она когда-нибудь слишком дорогостоящей?
Я пытаюсь понять, по каким элементам сеть отвечает за проверку /принуждение. Если я правильно понял, когда новый блок получен, получателю необходимо проверить следующее:
- хеш блока - т. е. хэш заголовка, включая пред. блочный хеш, хеш Merchle Root, время, цель и nonce правильны, а его значение меньше целевого.
- цель - должна быть равна текущей (трудности) цели.
- хэш предыдущего. блок - должен быть правильным и должен «указывать» на конец текущей «самой длинной» (самой сложной) цепочки.
- все транзакции в блоке. Похоже, что это будет включать в себя: поиск входных txn текущих txn по их хэшам и запуск соответствующих пар sigScript + pubKeyScript. Также проверяем для каждого txn сумму (входы)> = sum (выходы).
- транзакция coinbase. sum (выходы)> = «изменение», оставленное всеми остальными текущими txn.
- хэш корня Меркле.
Вопросы:
- Я что-то пропустил? (Метка времени?)
- Это похоже на большую работу! В частности, сканирование всей цепочки для поиска входных транзакций. (Хотя я полагаю, что клиент мог бы создать индекс один раз при запуске.) Я понимаю, что по крайней мере # 4 является необязательным - узел может предпочесть, что это было сделано кем-то другим. По мере того, как блок-цепочка растет больше & чем больше, не станет ли менее целесообразным, чтобы отдельные узлы выполняли всю эту работу каждые 10 минут, что привело к меньшему количеству проверок?
- Нужно ли узлу проверять каждый блок (и, следовательно, каждый txn), когда он сначала загружает цепочку? Одно дело проверять все хэши блоков, но новый узел без какой-либо истории не знал бы, было ли содержимое действительным - только то, что X объем работы пошел на решение блоков.
1 ответ
I) См. https://en.bitcoin.it/wiki/Protocol_rules# .22block.22_messages для полного списка проверок, которые должны выполняться в новом блоке.
II) Для проверки новых транзакций /блоков необходимо сохранить только индекс «неизрасходованных выходов транзакций», и этот индекс составляет несколько сотен мегабайт в настоящее время и очень удобно вписывается в память. Он будет увеличиваться по мере того, как все больше людей будут держать биткойны, но оно не будет расти без ограничений, и мы внедрили стимулы для поощрения программного обеспечения, чтобы сделать UTXO меньше, чем больше.
III) Проверка каждой транзакции в каждом старом блоке не требуется, а эталонная реализация пропускает транзакцию с дорогостоящей (ECDSA-подпись) до контрольной точки с компиляцией.