Beim Lesen der folgenden BIPs: 68 , 112 , 125 habe ich ein paar Fragen zur Sematik von Sequenznummern bekommen. Soweit ich verstanden habe, haben Sequenznummern in Transaktionen der Version 1 die folgende Bedeutung:
0xfffffffe
hat, signalisiert die gesamte Transaktion die ErsetzbarkeitAndererseits gilt bei Transaktionen der Version >=2 die obige Regel plus:
1 << 31
) auf gesetzt ist 1
, hat die Sequenz keine zusätzliche Bedeutung (kann aber dennoch verwendet werden, um die Ersetzbarkeit zu signalisieren, richtig?)Alles in allem kann man also, wenn man die Ersetzbarkeit in einer Version >= 2-Transaktion signalisieren möchte, einfach eine Sequenznummer verwenden, die kleiner als 0xfffffffe
ist, aber ein aktives Deaktivierungs-Flag hat (d. h. größer als 0x80000000
), andererseits wie soll man die Sequenznummer einstellen, wenn man sowohl Ersetzbarkeit signalisieren als auch relativ timelocked ausgeben will? Wäre es in Ordnung, eine Sequenznummer gemäß BIP68 zu verwenden und die Bits zu erhöhen, die in diesem Format keine Bedeutung haben, um die Transaktion zu ersetzen? (dh alle Bits außer 1 << 31
, 1 << 22
und ändern 0xffff
)
Wenn Sie eine Transaktion der Version 2 mit nicht gesetztem Disable-Flag erstellen, ist der gesamte nSequence-Wert per Definition kleiner als 0xFFFFFFFE (weil er höchstens 0x7FFFFFFF sein wird).
Dies impliziert, dass eine Transaktion mit einer aktiven relativen Sperrzeit gemäß BIP125 immer ersetzbar sein wird.
Dies ist Absicht. Nicht ersetzbare Transaktionen versuchen, von den bestehenden Netzwerkrichtlinienregeln Gebrauch zu machen, um die erste übertragene Version einer Transaktion zu bevorzugen. Eine Transaktion, die erst zu einem späteren Zeitpunkt gültig wird, kann davon keinen Gebrauch machen, da sie erst dann gesendet werden kann, wenn sie gültig wird.
Chan-Ho Suh