Bitcoin-brukere kan, før lenge, kunne dra nytte av et triks som kalles “Taproot.” Først foreslått av Bitcoin Core-bidragsyter og tidligere Blockstream CTO Gregory Maxwell, ville Taproot utvide Bitcoins smarte kontraktsfleksibilitet, samtidig som de tilbyr mer privatliv i å gjøre det. Selv de mest komplekse smarte kontraktene ville på blockchain vanligvis ikke kunne skilles fra vanlige transaksjoner.
Selv om det er et stort foretak, er dette ikke bare teori. Flere av de mest produktive Bitcoin Core-bidragsyterne – inkludert Pieter Wuille, Anthony Towns, Johnson Lau, Jonas Nick, Andrew Poelstra, Tim Ruffing, Rusty Russell og faktisk Gregory Maxwell – jobber med et Schnorr-signaturforslag som inkluderer Taproot, alle i en protokolloppgradering.
Her er hva Taproot er og hvordan det fungerer.
P2SH
Alle bitcoins er i hovedsak “låst” i skript: et par kodelinjer innebygd i en transaksjon inkludert i blockchain, som definerer hvordan myntene kan brukes i neste transaksjon. Utgiftsbetingelser innebærer vanligvis å gi en signatur for å bevise at du eier myntene. Men andre, velkjente forhold inkluderer for eksempel tidlåser (mynter kan bare brukes etter en bestemt blokkhøyde eller -dato) eller multisig (mynter kan bare brukes hvis noe antall private nøkler fra et sett med private nøkler gir signaturer).
Ulike forhold kan blandes og matches, for å skape komplekse typer smarte kontrakter. Et eksempel på en slik kontrakt kan være at mynter kan brukes hvis både Alice og Bob signerer, eller hvis Alice alene signerer etter at en uke har gått, eller hvis Bob alene signerer samtidig som han gir et hemmelig nummer. Uansett hvilken av disse tre betingelsene som er oppfylt først, er hvordan myntene blir brukt.
Siden 2012 er manuskripter (vilkårene) ofte ikke synlige først; bare den nye eieren av myntene vet hvordan de kan brukes. Dette gjøres med et triks som heter P2SH (pay to script hash), der i utgangspunktet bare en hash av skriptet er inkludert i blockchain. Dette tilsynelatende tilfeldig krypterte tallet holder myntene. Når eieren bruker myntene, avslører han hele manuset i tillegg til “løsningen” på skriptet samtidig. Hvem som helst kan deretter bruke den første hashen til å kontrollere at det medfølgende skriptet faktisk var det originale skriptet som låste myntene og kan umiddelbart konkludere med at kravene til skriptet ble oppfylt.
Når myntene er brukt, er det for øyeblikket nødvendig å avsløre alle mulige betingelser som kunne vært oppfylt – inkludert vilkårene som ikke ble oppfylt. Dette har to viktigste ulemper. Det ene er datatungt, spesielt hvis det er mange forhold. Og to, det er dårlig for personvernet. Alle lærer alle de forskjellige måtene som midler kunne ha blitt brukt, som for eksempel kan avsløre hva slags lommebok som ble brukt og kanskje enda mer.
MAST
MAST (Merkelized Abstract Syntax Tree) er en foreslått løsning som bruker Merkle-trær (en tiår gammel, kompakt datastruktur oppfunnet av kryptografen Ralph Merkle) for å jobbe rundt disse to ulempene. Kort sagt er alle de forskjellige forholdene som midlene kan brukes under individuelt hash (i motsetning til kombinert til en enkelt hash) og inkludert i et Merkle-tre, som til slutt produserer en enkelt hash: Merkle-roten. Denne Merkle-roten “låser” myntene.
Den unike fordelen er at hvis noen av dataene i Merkle-treet blir avslørt, kan Merkle-roten og noen tilleggsdata (kalt Merkle-banen) brukes til å verifisere at de spesifikke dataene ble inkludert i Merkle-treet. Resten av Merkle-treet forblir hash og skjult.
Med MAST betyr dette at bare vilkåret som er oppfylt må avsløres. Hvis Alice i det første eksemplet ovenfor bruker pengene alene etter en uke, avslører hun bare den tilstanden (og Merkle-banen). Ingen får vite at pengene og Alice kunne ha brukt pengene sammen, eller av Bob alene hvis han hadde lagt til et hemmelig nummer. Dette gjør MAST mer dataeffektiv enn komplekse P2SH smarte kontrakter og gir privatliv til oppstart.
Likevel, med Schnorr, kan Taproot gjøre det enda bedre: en transaksjon kan skjule at det i det hele tatt eksisterte en MAST-struktur.
Schnorr
Schnorr-signaturordningen har lenge vært på ønskelisten til mange Bitcoin-utviklere og er for tiden under utvikling for å bli distribuert som en soft fork protokolloppgradering. Mange kryptografer anser Schnorr-signaturskjemaet for å være det beste i feltet, ettersom dets matematiske egenskaper gir et sterkt nivå av korrekthet, det lider ikke av formbarhet og er relativt raskt å verifisere.
Som den mest kjente fordelen i sammenheng med Bitcoin tillater Schnorrs “lineære matematikk” signaturaggregering: flere signaturer i samme transaksjon kan kombineres til en. Et lignende triks kan brukes på multisig-transaksjoner. Ved å kombinere både offentlige nøkler og signaturer i “terskel offentlige nøkler” og “terskel signaturer”, kan en multisig-transaksjon gjøres skille fra enhver vanlig transaksjon.
Og signaturordningen kan brukes på enda mer interessante måter. Det er for eksempel mulig å bruke data til å “finjustere” både en privat nøkkel og en offentlig nøkkel. Som et forenklet eksempel kan en privat nøkkel og den tilhørende offentlige nøkkelen finjusteres ved å multiplisere begge med to. Den “private nøkkelen x 2” og den “offentlige nøkkelen x 2” vil fremdeles stemme overens, og den “private nøkkelen x 2” kan fortsatt signere meldinger som kan bekreftes med “den offentlige nøkkelen x 2.” Alle som ikke er klar over at det opprinnelige nøkkelparet ble justert, ville ikke engang se noen forskjell; de tweaked tastene ser ut som alle andre nøkkelpar.
Dette er hva som muliggjør Taproot.
Taproot
Taproot er basert på en interessant forståelse: uansett hvor kompleks, nesten alle MAST-konstruksjoner kan (eller bør) inkludere en tilstand som lar alle deltakere bli enige om resultatet og bare logge på en oppgjørstransaksjon sammen. I det tidligere eksemplet, hvis Bob vet at Alice alene kan kreve alle midlene neste uke, kan han like godt samarbeide med henne nå for å melde seg sammen. (I mange typiske smarte kontraktoppsett ville han til og med bli straffet hvis han ikke gjør det. Kompleksiteten tjener egentlig bare til å holde alle ærlige.)
Taproot ligner MAST og bestandig inkluderer en tilstand der alle deltakere kan samarbeide om å bruke midlene: “kooperativet lukkes.”
Ved å bruke Schnorr-signaturer blir det interessant.
For det første ville kooperativt avslutning bruke Schnorrs terskel for å få det til å se ut som en vanlig transaksjon, fra en person til en annen. Så de offentlige nøklene til alle deltakerne blir lagt sammen, noe som resulterer i “terskelen offentlig nøkkel.” I samsvar med denne offentlige terskelenøkkelen, gir kombinasjonen av alle deltakernes signaturer – deres “terskelsignatur” – dem mulighet til å bruke midlene.
Så langt så bra, men å bruke midlene som om det var en normal transaksjon er det eneste de kan gjøre – ingen MAST-lignende strukturer ennå. Det er der det andre Schnorr-trikset kommer inn.
Alle de alternative måtene midlene kan brukes på – de ikke-samarbeidende resultatene – er denne gangen kombinert i et annet manus. Dette skriptet blir deretter hash og brukt til finjustere terskelen offentlig nøkkel. I stedet for “offentlig nøkkel x 2”, som brukt i eksemplet tidligere, resulterer dette i et “terskel offentlig nøkkel x-skript.” (Vi forenkler fortsatt.) Dette “terskelen offentlig nøkkel x-skript” tilsvarer selvfølgelig et “terskelsignatur x-skript.”
Nå, hvis pengene brukes sammen, kombinerer alle deltakerne signaturene sine i “terskelsignaturen” og finjusterer dem med skriptet. Det resulterende “terskelsignaturen x-skriptet” lar dem bruke pengene. Likevel, og viktigere, for omverdenen, vil alt dette fremdeles bare se ut som en vanlig offentlig nøkkel og en vanlig signatur – en vanlig transaksjon.
Bare hvis et samarbeidsavslutning viser seg umulig, kan terskelen offentlig nøkkel vises for hva den egentlig er: tweaked.
I dette tilfellet, både opprinnelig terskel offentlig nøkkel og skriptet blir avslørt. Dette beviser at “terskelen offentlig nøkkel x-skript” ble justert med dette spesifikke skriptet. Så, som hasjen i P2SH, er også finjustere beviser for verden at midlene skal kunne brukes hvis de alternative vilkårene, som spesifisert i dette skriptet, er oppfylt. (Og som med P2SH, oppfylles disse betingelsene selvfølgelig umiddelbart for å bruke midlene.)
Alternativt, i stedet for å tilpasse terskelen offentlig nøkkel med skript, kan terskelen offentlig nøkkel bli tweaked med en Merkle-rot av et Merkle-tre som inkluderer alle de forskjellige forholdene der midlene kan brukes: en MAST-struktur. For å bruke midlene må bare utgiftsbetingelsen som er oppfylt avsløres.
Som sådan tilbyr Taproot alle fordelene med MAST, mens det under normale omstendigheter aldri vil vite at en vanlig transaksjon gjemte en så kompleks kompleks kontrakt som en tilbakebetaling..
Dette er en generell oversikt over Taproot-konseptet; spesifikasjoner for implementering kan variere. For mer informasjon, les det opprinnelige Taproot-forslaget av Gregory Maxwell eller se denne presentasjonen av Pieter Wuille.