SegWit (BIP141)

Malleability-fiks, witness-data og blokkvekt.

Segregated Witness, spesifisert i BIP141, ble aktivert ved blokk 481 824 24. august 2017. Det var den største oppgraderingen i Bitcoins historie på den tiden, og det var en soft fork.

Problem 1: malleability

Før SegWit kunne en tredjepart litt endre en signaturs koding uten å ugyldiggjøre den. Transaksjonen forble gyldig, men dens txid endret seg. Enhver ubekreftet transaksjon som brukte den, ved å referere til den gamle txid-en, ville bryte. Det blokkerte trygge off-chain-protokoller.

SegWit flytter signaturer og scripter inn i en separat witness-struktur som ikke er del av txid. En andre ID, wtxid, inkluderer den.

Problem 2: blokkplass

SegWit erstattet 1 MB-størrelsesgrensen med en grense på 4 000 000 vektenheter. Non-witness-byte koster 4 WU, witness-byte koster 1. Gamle noder ser bare den strippete blokken, som holder seg under 1 MB, så de fortsetter å godta den. Oppgraderte noder ser hele blokken, som kan være større.

Hvordan gamle noder forblir kompatible

En SegWit-utdata ser ut som OP_0 <20 or 32 bytes>. Gamle noder ser et script hvem som helst kan bruke med en tom scriptSig, så de godtar enhver bruk. Nye noder håndhever witness-programreglene. Blokker forplikter seg til witness-data via en OP_RETURN-utdata i coinbase som inneholder et hash av witness-Merkle-roten.

Andre fikser

  • BIP143 endret hvordan signaturer hashes. Signeringstid vokser lineært i stedet for kvadratisk, og signere forplikter seg til inndata-beløpet, noe som hjelper maskinvarelommebøker.
  • Script-versjonering: den ledende opcode (OP_0 til OP_16) er et versjonsnummer, som gjorde Taproot (versjon 1) til en ren oppgradering.

Hvorfor det betydde noe

Uten en malleability-fiks ville Lightning Network ha vært upraktisk. SegWit ble aktivert etter en lang strid om blokkstørrelse, som involverte BIP148 (en brukeraktivert soft fork) og Bitcoin Cash-splittet 1. august 2017.