Какова последовательность TxIn?

В настоящее время я пытаюсь сгенерировать блок генезиса с помощью своего кода и наткнулся на поле последовательности TxIn , которое не объяснено на вики-странице спецификации протокола и не отображается в обозревателе блоков . Как рассчитывается значение этого поля, и каково было его значение для блока генезиса?

Ответы (2)

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

Порядковые номера предназначены для замены. Замена в настоящее время отключена, но как она будет работать:

  • Вы отправляете транзакцию с LockTime в будущем и порядковым номером 0. Затем транзакция не считается сетью «окончательной» и не может быть включена в блок, пока не будет достигнуто указанное LockTime.
  • До истечения срока действия LockTime вы можете заменить транзакцию любым количеством новых версий. Более новые версии имеют более высокие порядковые номера.
  • Если вы когда-нибудь захотите навсегда заблокировать транзакцию, вы можете установить порядковый номер UINT_MAX. Тогда транзакция считается окончательной, даже если LockTime не был достигнут.

Это полезно в нескольких случаях. Например, две стороны могут использовать его для создания «подготовленной транзакции». После создания подготовленной транзакции стороны могут мгновенно, безопасно и без комиссий переводить деньги друг другу. Таким образом, вы можете установить один из них с обменом и снимать и вносить депозит, не дожидаясь подтверждения.

Поскольку замена в настоящее время не используется, все транзакции, которые создает Биткойн, имеют LockTime = 0 и Sequence = UINT_MAX. Так обстоит дело с транзакцией генерации генезис-блока.

Как сеть определяет, принимать ли новую версию в качестве замены транзакции? Может ли злоумышленник злонамеренно подменить транзакции?
Произошли нестандартные порядковые номера. Один раз в январе 2011 г. и 6 раз в феврале 2011 г. В каждом случае порядковый номер был равен нулю. Пример см. в транзакции c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73. blockexplorer.com/rawtx/…
Для справки UINT_MAX = 4294967295U
В вашем ответе предполагается, что транзакция имеет один порядковый номер , но в соответствии со спецификацией протокола транзакция будет иметь порядковый номер для каждого входа . В этом случае я не уверен, как сработает замена. Рассмотрим транзакцию с двумя входами: вход #0 имеет последовательность 1, а вход #1 имеет последовательность 2. Как можно сравнить эту транзакцию с транзакцией, где вход #0 имеет последовательность 2, а вход #1 имеет последовательность 1?
UINT_MAX — это 32-битное значение. В шестнадцатеричном виде это "FFFFFFFF".
Этот ответ кажется устаревшим. См. ответ bitcoin.stackexchange.com/a/55113/47528

Обратите внимание, что принятый ответ устарел.

В настоящее время порядковые номера в основном используются для сигнализации RBF — replace-by-fee — что позволяет повторно отправить транзакцию с более высокой комиссией.

См. https://bitcoincore.org/en/faq/optin_rbf/ , https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki .