Bitcoin-användare kan, innan lång tid, kunna dra nytta av ett trick som heter “Taproot.” Först föreslagen av Bitcoin Core-bidragsgivare och tidigare Blockstream CTO Gregory Maxwell, skulle Taproot utöka Bitcoins smarta kontraktsflexibilitet, samtidigt som de erbjuder mer integritet i detta. Även de mest komplexa smarta kontrakten skulle på blockchain vanligtvis inte kunna särskiljas från vanliga transaktioner.

Även om det är ett stort företag är detta inte bara teori. Flera av de mest produktiva Bitcoin Core-bidragsgivarna – inklusive Pieter Wuille, Anthony Towns, Johnson Lau, Jonas Nick, Andrew Poelstra, Tim Ruffing, Rusty Russell och faktiskt Gregory Maxwell – arbetar på ett Schnorr-signaturförslag som skulle inkludera Taproot, alla i en protokolluppgradering.

Här är vad Taproot är och hur det fungerar.

P2SH

Alla bitcoins är i huvudsak “låsta” i skript: ett par kodrader inbäddade i en transaktion som ingår i blockchain, som definierar hur mynten kan spenderas i nästa transaktion. Utgiftsvillkor innebär vanligtvis att man tillhandahåller en signatur för att bevisa att man äger mynten. Men andra, välkända förhållanden inkluderar till exempel tidlås (mynt kan bara spenderas efter en specifik blockhöjd eller -datum) eller multisig (mynt kan bara spenderas om ett visst antal privata nycklar från en uppsättning privata nycklar ger signaturer).

Olika förhållanden kan blandas och matchas för att skapa komplexa typer av smarta kontrakt. Ett exempel på ett sådant kontrakt kan vara att mynt kan användas om både Alice och Bob skriver, eller om Alice ensam undertecknar efter att en vecka har gått, eller om Bob ensam undertecknar samtidigt som han tillhandahåller ett hemligt nummer. Vilket av dessa tre villkor som uppfylls först, är hur mynten används.

Sedan 2012 är manus (villkoren) ofta inte offentligt synliga först. bara den nya ägaren av mynten vet hur de kan spenderas. Detta görs med ett trick som heter P2SH (betala till skript hash), där initialt endast en hash av skriptet ingår i blockchain. Detta till synes slumpmässigt krypterade nummer rymmer mynt. När ägaren spenderar mynten avslöjar han hela manuset såväl som ”lösningen” på skriptet samtidigt. Vem som helst kan sedan använda den ursprungliga hashen för att kontrollera att det medföljande skriptet verkligen var det ursprungliga skriptet som låste mynt och kan omedelbart dra slutsatsen att kraven i skriptet var uppfyllda.

När mynten är förbrukade är det fortfarande nödvändigt att avslöja alla möjliga villkor som kunde ha uppfyllts – inklusive de villkor som inte uppfylldes. Detta har två huvudsakliga nackdelar. En, den är tung, speciellt om det finns många förhållanden. Och två, det är dåligt för integriteten. Alla lär sig alla olika sätt på vilka medel kunde ha använts, vilket till exempel kan avslöja vilken typ av plånbok som användes och kanske ännu mer.

MAST

MAST (Merkelized Abstract Syntax Tree) är en föreslagen lösning som använder Merkle-träd (en årtionden gammal, kompakt datastruktur uppfunnen av kryptografen Ralph Merkle) för att arbeta runt dessa två nackdelar. Kort sagt, alla olika villkor under vilka medlen kan användas individuellt hashad (i motsats till att kombineras till en enda hash) och ingår i ett Merkle-träd, som i slutändan producerar en enda hash: Merkle-roten. Denna Merkle-rot “låser upp” mynten.

Den unika fördelen är att om några av uppgifterna i Merkle-trädet avslöjas, kan Merkle-roten och vissa ytterligare data (kallad Merkle-banan) användas för att verifiera att specifika data inkluderades i Merkle-trädet. Resten av Merkle-trädet är kvar och gömt.

Med MAST betyder detta att endast villkoret som är uppfyllt behöver avslöjas. Om Alice i det första exemplet ovan bara spenderar pengarna efter en vecka avslöjar hon bara det tillståndet (och Merkle-vägen). Ingen får veta att pengarna också kunde ha spenderats av Alice och Bob tillsammans, eller av Bob ensam om han hade lagt till ett hemligt nummer. Detta gör MAST mer dataeffektiv än komplexa P2SH-smarta kontrakt och lägger till integritet för att starta.

Men med Schnorr kan Taproot göra ännu bättre: en transaktion kan dölja att en MAST-struktur existerade alls.

Schnorr

Schnorrs signaturschema har länge varit på önskelistan för många Bitcoin-utvecklare och är för närvarande under utveckling för att distribueras som en mjuk gaffelprotokolluppgradering. Många kryptografer anser att Schnorr-signaturschemat är det bästa i fältet, eftersom dess matematiska egenskaper erbjuder en hög grad av korrekthet, det lider inte av smidighet och är relativt snabbt att verifiera.

Som sin mest kända fördel i Bitcoin-sammanhanget tillåter Schnorrs “linjära matematik” signaturaggregering: flera signaturer i samma transaktion kan kombineras till en. Ett liknande trick kan tillämpas på multisig-transaktioner. Kombinera både offentliga nycklar och signaturer till “tröskel offentliga nycklar” och “tröskelunderskrifter”, kan en multisig-transaktion göras oskiljbar från alla vanliga transaktioner.

Och signaturschemat kan användas på ännu mer intressanta sätt. Det är till exempel möjligt att använda data för att “finjustera” både en privat nyckel och en offentlig nyckel. Som ett förenklat exempel kan en privat nyckel och dess motsvarande offentliga nyckel justeras genom att multiplicera båda med två. Den “privata nyckeln x 2” och den “offentliga nyckeln x 2” skulle fortfarande motsvara, och den “privata nyckeln x 2” kunde fortfarande signera meddelanden som kunde verifieras med “offentliga nyckeln x 2.” Den som inte är medveten om att det ursprungliga nyckelparet var justerat skulle inte ens se någon skillnad; de justerade tangenterna ser ut som alla andra tangentpar.

Detta är vad som möjliggör Taproot.

Pålrot

Taproot bygger på en intressant insikt: oavsett hur komplex, nästan alla MAST-konstruktioner kan (eller borde) innehålla ett villkor som gör att alla deltagare kan komma överens om resultatet och helt enkelt logga in på en avvecklingstransaktion tillsammans. I det tidigare exemplet, om Bob vet att Alice själv kan göra anspråk på alla medel nästa vecka, kan han lika gärna samarbeta med henne nu för att underteckna tillsammans. (I många typiska smarta kontraktuppställningar skulle han till och med bestraffas om han inte gör det. Komplexiteten tjänar egentligen bara till att hålla alla ärliga.)

Taproot liknar MAST och alltid innehåller ett villkor där alla deltagare kan samarbeta för att spendera medlen: “kooperativet nära.”

Genom att använda Schnorr-signaturer blir det här intressant.

Först och främst skulle kooperativstängningen använda Schnorrs tröskeltrick för att få det att se ut som en vanlig transaktion, från en person till en annan. Så de offentliga nycklarna för alla deltagare läggs samman, vilket resulterar i “allmän tröskel”. Motsvarar den här offentliga nyckeln till tröskel, tillåter kombinationen av alla deltagares underskrifter – deras “tröskelsignatur” – dem att spendera medlen.

Hittills så bra, men att spendera pengarna som om det vore en normal transaktion är det enda de kan göra – inga MAST-liknande strukturer ännu. Det är där det andra Schnorr-tricket kommer in.

Alla alternativa sätt på vilka medlen kan användas – de icke-samarbetsvilliga resultaten – kombineras den här gången till ett annat manus. Det här skriptet hashas sedan och används till Modifiera tröskelns offentliga nyckel. I stället för “offentlig nyckel x 2”, som använts i exemplet tidigare, resulterar detta i ett “tröskel för offentlig nyckel x-skript.” (Vi förenklar fortfarande.) Det här “tröskeln för offentlig nyckel x-skript” motsvarar naturligtvis ett “tröskelunderskrift x-skript.”

Nu, om pengarna spenderas tillsammans, kombinerar alla deltagare sina signaturer till “tröskelunderskriften” och justerar dem med skriptet. Det resulterande “tröskelsignaturen x-skriptet” tillåter dem att spendera pengarna. Ändå, och viktigare, för omvärlden skulle allt detta fortfarande bara se ut som en vanlig offentlig nyckel och en vanlig signatur – en vanlig transaktion.

Endast om en kooperativ stängning visar sig omöjlig kan tröskeln offentlig nyckel visas för vad den egentligen är: tweaked.

I det här fallet är både original- tröskel offentlig nyckel och manuset avslöjas. Detta bevisar att “tröskeln för offentlig nyckel x-skript” justerades med detta specifika skript. Så, som haschen i P2SH, är Modifiera bevisar för världen att medlen ska kunna användas om de alternativa villkoren, som anges i detta skript, är uppfyllda. (Och som med P2SH uppfylls dessa villkor naturligtvis omedelbart för att spendera medlen.)

Alternativt, istället för att justera den offentliga nyckeln med skript, kan den offentliga nyckeln justeras med en Merkle-rot av ett Merkle-träd som innehåller alla de olika förhållanden under vilka medlen kan spenderas: en MAST-struktur. För att spendera pengarna behöver endast det utgiftsvillkor som har uppfyllts avslöjas.

Som sådan erbjuder Taproot alla fördelarna med MAST, medan det under normala omständigheter aldrig kommer att veta att en vanlig transaktion gömde ett så komplext smart kontrakt som en reserv.

Detta är en allmän beskrivning av Taproot-konceptet; specifikationer för implementering kan variera. För mer information, läs det ursprungliga Taproot-förslaget av Gregory Maxwell eller klocka denna presentation av Pieter Wuille.