В чем разница между транзакционной и блочной версиями? (v1, v2, v3 и т.д..)

Если я запускаю команду для извлечения блока, я вижу, что возвращается версия 2:

getblock 0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff

Выход

{
"hash" : "0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff",
"confirmations" : 5885,
"size" : 249065,
"height" : 280557,
"version" : 2,
"merkleroot" : "5b4c401a2ad5a82ef26efb1d7ad82a0b6abea18118b50a12b555ea9e8663042b",
"tx" : [    .... snip ...

и когда я запускаю команду для получения транзакции, я вижу, что возвращается версия 1

 getrawtransaction 260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1 1

выход

{
"hex" : "01000000027f4e827503d7d52617.. snip ..9763caaf4b6216343fa460b88ac00000000",
"txid" : "260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1",
"version" : 1,
"locktime" : 0,
"vin" : [

Вопрос

Я где-то читал, что BIP32 заставит их обоих быть version 3. Кто-нибудь может объяснить:

  • Где я могу найти краткий список правил того, что ожидается от каждой версии (его нет на вики)

  • Когда эта версия изменилась (год и/или номер блока)

  • Запрещены ли старые версии или они все еще поддерживаются?

Ответы (2)

В BIP0034 добавлены блоки версии 2. Он применяет правило, согласно которому версия транзакции равна 1 (ранее это не применялось, и в цепочке блоков есть несколько странных версий транзакций). Также требуется, чтобы сценарий ввода транзакции coinbase содержал высоту блока в качестве первого элемента данных.

Было обсуждение нового блока Версии 3 и транзакции Версии 3, которые будут обеспечивать каноническое кодирование. Это было бы решением проблемы пластичности транзакций. Если пропустить транзакцию версии 2, версии снова станут одинаковыми как для блоков, так и для транзакций.

Вы можете прочитать предложения по улучшению Биткойн здесь .

Соответствие BIP-0066 требует, чтобы для nVersion блока было установлено значение 3, предлагая «ограничить действительные подписи именно тем, что предписано DER, чтобы правила консенсуса не зависели от анализа подписи OpenSSL. Подобное изменение требуется, если реализации захотят удалить весь OpenSSL из кода консенсуса».