Ein BIP-Entwurf aus dem Jahr 2015 schlug die Verwendung eines „Hard-Fork-Bits“ vor:
Das höchstwertige Bit in nVersion wird als Hardfork-Bit definiert. Derzeit sind Blöcke mit dieser Header-Bit-Einstellung auf 1 ungültig, da BIP34 nVersion als vorzeichenbehaftete Zahl interpretiert und verlangt, dass sie >=2 ist (bei BIP66, >=3). Unter den 640 Bits im Block-Header ist dies das einzige, das fest ist und keinen Zweck erfüllt, und daher der beste Weg, um den Einsatz eines Hardforks anzuzeigen.
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-July/009576.html
Wenn die Bit-Indizes von links nach rechts zunehmen, stelle ich mir vor, dass das Hard-Fork-Bit den Index 31 belegt, der wie *
unten gekennzeichnet ist ( nVersion
ist ein 32-Bit-Wert).
0 1 2 3
0|1|2|3|4|5|6|7|8|9|0|1|2|3|4|5|6|7|8|9|0|1|2|3|4|5|6|7|8|9|0|1
*
Das Setzen von Bit 31 von soll laut Vorschlag nVersion
dazu führen, dass ein Block als ungültig zurückgewiesen wird.
BIP-9 erlegt den verfügbaren Bits weitere Einschränkungen auf, insbesondere müssen die Bits 0-2 als [0, 0, 1] gesetzt werden:
Blöcke im STARTED-Zustand erhalten eine nVersion, deren Bitpositionsbit auf 1 gesetzt ist. Die obersten 3 Bits solcher Blöcke müssen 001 sein, sodass der Bereich der tatsächlich möglichen nVersion-Werte [0x20000000...0x3FFFFFFF] einschließlich ist.
https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki
Außerdem ordnet BIP-9 Versionsbits in aufsteigender Reihenfolge von rechts nach links an. Das heißt, Versionsbit 0 ist nVersion
Bit 31, Versionsbit 1 ist nVersion
Bit 30 und so weiter.
Aber wenn dies der Fall wäre, dann wäre das Versionsbit 0 tabu. BIP-9 sagt nichts darüber aus, und tatsächlich wurde BIP-68 mit Versionsbit 0 signalisiert:
Dieses BIP soll von "versionbits" BIP9 mit Bit 0 bereitgestellt werden.
https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
Meine Fragen sind einfach:
nVersion
das "Hard-Fork-Bit"?Update: Die Quelle meiner Verwirrung war der Gedanke, dass nVersion
die Bit-Indizierung und die Versions-Bit-Indizierung in entgegengesetzte Richtungen liefen. Das nicht. Um beispielsweise die Angebotsbereitschaft über Versionsbit 1 zu signalisieren, nVersion
wird Bit 1 gesetzt. Die Regeln von BIP-9 werden aktiviert, wenn eine nVersion
Signatur erkannt wird. Diese Signatur besteht aus den Bits 29-31, die als 1
, 0
, bzw. gesetzt sind 0
. Dadurch bleibt Bit 31 ungesetzt.
Peters Antwort spricht die obige Frage (1) an.
Was Frage (2) betrifft, so hat die BIP-68-Signalisierung keine Blockablehnung verursacht, da Bit 0 gesetzt wurde, nicht Bit 31.
Bit 31 wird manchmal als Hard-Fork-Bit bezeichnet.
BIP34 hat Versionsnummern auf 2 oder höher beschränkt. Da die Blockversion eine vorzeichenbehaftete 32-Bit-Ganzzahl ist, führt das Setzen des höchsten Bits zu einer negativen Zahl, die BIP34 verletzen würde.
Infolgedessen führt jede Verwendung dieses Bits zu einer rückwärts inkompatiblen Änderung der Regeln – einem Hard Fork –, der für alle Teilnehmer des Systems offensichtlich ist.
Reiches Apodaca
Pieter Wuille
Pieter Wuille
(nVersion >> X) & 1
.Reiches Apodaca
nVersion
Bit 31) als Signal zu setzen. Ich verstehe, dass die Funktionalität von BIP-68 darin bestand, dem Feld eine Bedeutung zuzuweisennSequence
. Meine Frage kommt vom Bereitstellungsmechanismus für BIP-68, der erfordert, dass Signalisierungsknoten Bit 31 setzen.nVersion
Zumindest sieht es so aus.Pieter Wuille
Reiches Apodaca
Pieter Wuille
Pieter Wuille