Проблема заключается в том, чтобы проверить их без отключения проверки POW, блоки должны иметь действительные хэш. Я делаю эту тему, чтобы спросить, если кто хотел бы помочь создать некоторые из этих блоков. После того, как создаются эти блоки должны надеяться, будет полезным для многих реализаций Bitcoin.
Мэтт Corallo имеет программу под названием pulltester, которая может помочь с этим, хотя я оставлю ему возможность объяснить, что более подробно, если он пожелает.
Я перечислю здесь блоки я знаю, что нужно проверить, хотя там может быть больше блоков, которые будут полезны (вкл. Для других реализаций). Много испытаний может быть сделано на функции проверки без необходимости отдельных блоков для каждого случая, это может показаться много вещей не хватает.
Все эти блоки должны быть действительны для вещей, упомянутых исключением. Это включает в себя правильный хэш.
Блоки после генеза блока со следующими проблемами (то есть на высоту 1.):
* Блок с нулевыми сделками.
* Блок с неправильным корнем Merkle.
* Блок с первой транзакции не в coinbase.
* Блок с неконечной сделкой coinbase
* Блок с нулевыми выходами
* Блок с размером 1000001 байт.
* Блок с плохой монеты базового размера сценария (< 2 или > 100).
Блоки после испытательных блоков 100 шахтера, которые сделаны с этим кодом: https://github.com/bitcoin/bitcoin/blob/master/src/test/miner_tests.cpp
* Блок со смесью sigops (вкл. P2SH) с 20000 sigops (Это является допустимым).
* То же самое, но с 20001 sigops.
* Блок расходы coinbase с высоты 2.
* Блок с не-coinbase операции, которая не является окончательным.
* Блок с расходами транзакций выходом транзакции ранее внутри этого блока (Valid).
* Блок с расходами транзакций выходом транзакции позднее внутри этого блока.
* Два входа ссылающегося же выход в двух различных операциях в блоке.
* Блок с транзакцией с недостоверным вводом сценарием.
* Блок ввода с ссылками вывод, что не существует.
* Блок с coinbase значением, равным вознаграждением блокировать плюс несколько операционных издержек (действительных).
* Блок с монетой базового значением, равным вознаграждением блокировать плюс несколько операционных издержек плюс один.
* Блок с временной меткой 1231006525.
Также нужно проверить некоторые неясные части блок-цепи реорганизации.
Это может быть сделано с ветвью, которая идет от филиала, созданного с 100 испытательных блоков и становится главной цепи. Затем несколько блоков могут быть добавлены к этой ветви, так что ветвь с 100 блоков может быть расширена, не став основной цепью. Потом еще ветвление этой отрасли (не расширение), которая становится основной отраслью.
Таким образом, чтобы начать с будут эти блоки
Код:
A: 0 -> 1
B: `-> 1 ... 99 -> 100
B: `-> 1 ... 99 -> 100
Затем новая основная цепь необходима, что ветви предыдущей главной цепи:
Код:
A: 0 -> 1
B: `-> 1 ... 99 -> 100
C: `-> 100 -> 101
B: `-> 1 ... 99 -> 100
C: `-> 100 -> 101
Тогда эта новая отрасль расширяется, чтобы освободить место для расширения другой отрасли.
Код:
A: 0 -> 1
B: `-> 1 ... 99 -> 100
C: `-> 100 -> 101 -> 102
B: `-> 1 ... 99 -> 100
C: `-> 100 -> 101 -> 102
Теперь другая ветвь распространяется:
Код:
A: 0 -> 1
B: `-> 1 ... 99 -> 100 -> 101 -> 102
C: `-> 100 -> 101 -> 102
B: `-> 1 ... 99 -> 100 -> 101 -> 102
C: `-> 100 -> 101 -> 102
Тогда новая основная цепь состоит из:
Код:
A: 0 -> 1
B: `-> 1 ... 99 -> 100 -> 101 -> 102
D: \ `-> 102 -> 103
C: `-> 100 -> 101 -> 102
B: `-> 1 ... 99 -> 100 -> 101 -> 102
D: \ `-> 102 -> 103
C: `-> 100 -> 101 -> 102
Что, что тесты, является реорганизацией в том случае, когда новая основная цепь делает использование родительской ветви с предыдущими данными проверки и которая требует дальнейшей проверки. В этом случае блок B101 не был полностью подтвержден до реорганизации, так как полная проверка выполняется только на блоках, которые входят в основной цепи или при реорганизации. Это только одна часть кода, который нуждается в тестировании.
Также было бы хорошо иметь больше блоков с недействительным блоком для B101, как бы обеспечить недопустимый блок в родительской ветви в то время делать полную проверку поймают. B101 необходимо будет недействительным определенным образом. Дайте B101 недопустимое значение выходного coinbase. Это будет работать.
Так что необходимо C100, C101, C102, B101, B102, D102, D103, где B является филиалом с использованием тестовых шахтер блоков.
А также еще один набор B101, B102, D102, D103 с некорректным B101.
К сожалению, что это сбивает с толку.
Также нужно проверить филиал подрезки код, но я не понять это, пока я на самом деле закодировал.
Спасибо за тех, кто готов помочь. Если кому-то нужен какой-либо дополнительной информации, пожалуйста, спросите.