Bitcoin Script og opcodes

Det lille stakk-språket som låser hver mynt.

Mynter lagres ikke i kontoer. Hver UTXO bærer et lite program, låsescriptet (scriptPubKey), som sier hva som trengs for å bruke den. Den som bruker leverer et låseopp-script (scriptSig, eller witness for SegWit). En node kjører dem, og hvis resultatet er «true», er bruken gyldig.

En stakk-maskin

Script leses fra venstre til høyre. Data pushes på en stakk, og hver opcode popper elementer, arbeider på dem og pusher resultater. Det finnes ingen løkker, som betyr at hvert script fullføres, og kostnaden er forutsigbar. Dette er bevisst: Script er ikke Turing-komplett.

Gjennomgang av P2PKH

Det klassiske «pay to public key hash»-låsescriptet er:

OP_DUP OP_HASH160 <20-byte pubkey hash> OP_EQUALVERIFY OP_CHECKSIG

Den som bruker leverer <signature> <public key>. Tolkningen:

  1. pusher signaturen og offentlig nøkkel,
  2. dupliserer den offentlige nøkkelen (OP_DUP),
  3. hasher kopien med SHA-256 deretter RIPEMD-160 (OP_HASH160),
  4. sjekker at den er lik hashet i låsescriptet (OP_EQUALVERIFY),
  5. verifiserer den digitale signaturen mot nøkkelen og transaksjonen (OP_CHECKSIG).

Hvis alle steg passerer, står et «true» igjen på stakken og mynten kan brukes.

Hva signaturen dekker

OP_CHECKSIG signerer ikke vilkårlige byte. Den sjekker et hash av utvalgte deler av transaksjonen, valgt av sighash-flagget. Vanligvis er det alt, så ingen kan endre utdataene etter at du har signert.

Grenser for sikkerhet

Legacy-scripter har harde grenser: høyst 10 000 byte, høyst 201 non-push opcodes, og høyst 1 000 elementer på stakken. Opcodes som OP_CAT ble deaktivert i 2010 etter at feil ble funnet. Tapscript (BIP342) droppet 10 000-byte- og 201-opcode-grensene og støtter seg i stedet på et signatur-budsjett knyttet til witness-størrelse.

Utover enkelt-signaturer

Samme verktøy uttrykker multisig (OP_CHECKMULTISIG, eller OP_CHECKSIGADD i Tapscript), hash-låser (OP_SHA256 <hash> OP_EQUAL) og tidslåser (OP_CHECKLOCKTIMEVERIFY, OP_CHECKSEQUENCEVERIFY). Å kombinere dem gir deg hvelv, arveplaner og Lightning-kanaler. Å skrive slike scripter for hånd er feilutsatt, derfor finnes Miniscript.