Miniscript og output-deskriptorer

Å skrive komplekse brukspolicyer trygt.

Rå Script er kraftig, men lett å gjøre feil. En liten feil kan gjøre mynter ubrukelige, eller brukbare for feil person. To verktøy gjør avanserte lommebøker tryggere.

Output-deskriptorer

En deskriptor er en streng som beskriver nøyaktig hvilke scripter en lommebok eier:

  • wpkh(xpub…/0/*): native SegWit enkeltnøkkel.
  • wsh(multi(2,xpubA…,xpubB…,xpubC…)): 2-av-3 P2WSH multisig.
  • tr(KEY,{pk(A),pk(B)}): Taproot med en nøkkelsti og to script-blader.

Nøkkelopphav som [fingerprint/84h/0h/0h] forteller signere hvilken nøkkel som skal brukes, og en sjekksum etter # fanger skrivefeil. Deskriptorer er standardisert i BIP 380–386. Bitcoin Core-lommebøker har vært deskriptor-baserte som standard siden versjon 23.

Miniscript

Miniscript, designet av Pieter Wuille, Andrew Poelstra og Sanket Kanjalkar og spesifisert i BIP379, er et strukturert subsett av Script. Du skriver en policy:

or(pk(A), and(pk(B), older(12960)))

«A kan bruke når som helst, eller B kan bruke etter 12 960 blokker (omkring 90 dager).» En kompilator gjør dette om til miniscript, som mapper direkte til Script. Resultatet ser omtrent slik ut:

or_d(pk(A),and_v(v:pk(B),older(12960)))

Hvorfor det hjelper

  • Analyserbart: programvare kan beregne hver måte å bruke på, maksimal witness-størrelse (så gebyrer kan estimeres), og hvilke nøkler som trengs.
  • Sammensettbart: brikker som pk(), multi(), thresh(), older(), after() og sha256() passer sammen på en type-sjekket måte.
  • Signer-vennlig: enhver kompatibel lommebok kan signere for ethvert miniscript uten tilpasset kode, sammen med PSBT-er.

Bruk i praksis

Miniscript muliggjør arv og avtakende multisig-lommebøker, som «2-av-3 nå, 1-av-3 etter et år», som tidligere krevde tilpassede scripter. Bitcoin Core støtter miniscript i deskriptorer for P2WSH og Tapscript.

Grenser

Miniscript dekker det meste av nyttig Script, men ikke hvert mulige script. Det kan heller ikke forhindre en dårlig policy, som å gi gjenopprettingsnøkkelen til feil person.