Utlämnande: författaren till denna artikel är grundaren och chefsvetenskapsmannen för Ethereum-projekt

Förra veckan kom Adam Back och Austin Hill ut med ett meddelande på Let’s Talk Bitcoin, där de tillkännagav sitt senaste projekt: “sidechains”. Idén, de beskrev, skulle möjliggöra förekomsten av alternativa blockkedjor, kanske med olika regler som möjliggör olika typer av ytterligare funktioner eller transaktionstyper, men med en valutaenhet vars värde är kopplat till bitcoin-värdet. Avsikten är att tillåta experiment med olika tillägg till Bitcoin-protokollet, med hjälp av separata nätverk för att undvika risk för Bitcoin själv, medan du fortfarande använder samma underliggande valutaenhet. Så snart idén tillkännagavs har det funnits ett stort allmänt intresse för konceptet och har gett förnyat hopp om att Bitcoin-protokollet potentiellt kan bli mycket kraftfullare än det är idag.

Under huven

Idén bakom sidokedjor är inte ny; konceptet har funnits sedan åtminstone förra året i december, och en föregångare till idén har funnits i flera år innan dess. Föregångaren, ett protokoll som kallas enkelriktad pegging, var en mekanism som teoretiskt skulle användas för att hantera en övergång från “Bitcoin 1.0” till “Bitcoin 2.0”, och fungerade enligt följande. Antag att i Bitcoin 1.0 har 13 miljoner valutaenheter redan utfärdats genom gruvdrift, med 8 miljoner kvar att ge ut. Distributionsmodellen för BTC2.0 skulle släppa 8 miljoner enheter genom gruvdrift, enligt exakt samma schema som BTC1.0 efter den punkten, men de andra 13 miljoner skulle distribueras genom en mekanism som kallas “proof-of-burn”.

I huvudsak skulle man ta en enhet av BTC1.0, skicka den till en outnyttjad adress (t.ex. 1111111111111111111114oLvT2) och skicka ett kryptografiskt bevis på att denna transaktion ägde rum, undertecknad av samma privata nyckel som skickade transaktionen, som en transaktion till Bitcoin 2.0. Enligt Bitcoin 2.0-protokollet skulle detta berättiga användaren att få en enhet på 2,0. Detta kallas en ”enkelriktad” eftersom värdet på en BTC2.0 högst kan vara lika med en BTC1.0; annars skulle folk arbitrage skillnaden genom att konvertera bitcoins till 1: 1-kursen. Förutom att sälja BTC2.0 för BTC1.0 på marknaden finns det inget sätt att gå tillbaka, så om experimentet misslyckas kan värdet på BTC2.0 sjunka till noll.

Bitcoin sidokedjor använder en förbättrad version av detta system som kallas “tvåvägs pegging”, som fungerar enligt följande. För att få en enhet av BTC2.0, skulle man behöva ta en enhet av BTC1.0 och skicka den till ett “skript” som vi kommer att kalla X och lämna obeskrivat för nu. Ett skript i Bitcoin är en adress som, i stället för att ägas av en privat nyckel, i huvudsak fungerar som en låsbox som endast låser upp bitcoins när den ges en transaktion som uppfyller vissa villkor. Man kan till exempel ha ett manus som låser upp pengarna till den första personen som skickar in ett femtio-siffrigt primtal som helt består av siffrorna 3 och 5. Att göra transaktionen och publicera ett kryptografiskt bevis på att en sådan transaktion gjordes till Bitcoin 2.0-blockkedjan berättigar användaren till en enhet av BTC2.0.

Nu är definitionen av X enkel: X låser upp pengarna (kom ihåg att detta är en enhet av BTC1.0) om den får ett giltigt kryptografiskt bevis på att avsändaren förstörde en enhet av BTC2.0. Det finns alltså en mekanism för att konvertera BTC 1.0 till BTC2.0, och just den mekanismen skapar en annan mekanism, begränsad i värde till det totala antalet skapade BTC2.0, som kan användas för att konvertera BTC2.0 tillbaka till BTC1.0 . Därför tvåvägspinne.

Mekanismen som dessa “kryptografiska bevis” använder är beroende av en kryptografisk konstruktion som används i Bitcoin kallas ett Merkle-träd. I ett Bitcoin-block, i stället för att helt enkelt ha varje transaktion blocket direkt, ingår bara en enda 32-byte-hash i blockhuvudet. Denna 32-byte-hash beräknas i sig av två andra 32-byte-haschar, var och en kommer från två andra 32-byte-haschar, och så vidare tills slutligen värdena längst ner är själva transaktionerna. Det är just meningen med denna mekanism att möjliggöra förekomsten av kompakta bevis för att en specifik transaktion är i ett specifikt block; allt som man behöver är en gren av hashes som går upp från den transaktionen till rotnoden, eller totalt 10 hashes för 1000 transaktioner eller 20 hashes för en miljon transaktioner. Detta är omöjligt att skapa; om du försöker ändra till och med en enda transaktion i trädet sprids ändringarna uppåt genom hasharna tills slutligen rotnoden hamnar helt annorlunda.

Detta löser dock inte problemet helt; allt det säger dig är att något block, någonstans, innehåller en given transaktion. Det säger inte att transaktionen är i huvudkedjan; i själva verket kan samma bitcoins som används i transaktionen redan ha skickats till en annan källa, vilket gör transaktionen ogiltig. Det finns två sätt att lösa detta. Ett tillvägagångssätt, och överlägset det enklare, är att bevismekanismen i Bitcoin 2.0 inte bara ber om Merkle-trädgrenen, utan också att blockchain går tillbaka sex kvarter, ungefär som en handlare som ber om sex bekräftelser, med hjälp av gruvkraft som fullmakt för giltighet. För högre säkerhet kan ett mycket större antal block som sextio krävas. Detta tillvägagångssätt är enkelt och verkar uppfylla alla nödvändiga parametrar.

Utmaningar

Ovanstående mekanism är emellertid, såsom beskrivet, mycket ofullkomlig. När en vanlig handlare frågar efter sex bekräftelser krävs det att producera sex kvarter snabbare än resten av nätverket i realtid för att dra av en dubbel-spendera attack mot den handlaren, en uppgift som kräver minst 30 av den totala nätverkshashkraften för att arbeta med alla icke försumbar framgångsgrad. Med den ovan beskrivna tvåvägs-pegningsmekanismen kan en skadlig gruvarbetare med till och med 1 hashkraft generera sex block, eller till och med sextio block, så småningom och sedan använda dessa block för att bedrägligt hävda alla BTC1.0 som har satts i BTC2.0-låsboxarna (eller, i den andra riktningen, hävdar bedrägligt ett obegränsat antal BTC2.0). En möjlig patch som kan komma ihåg är att kräva att samma person som skapade lockboxen öppnar den och därigenom begränsar mängden skador som kan göras per person, men detta löser inte problemet eftersom den skadliga gruvarbetaren lätt kan samarbeta med någon annan. Det grundläggande problemet, att det inte finns något sätt att komma fram till en mekanism för att validera blockchain som inte uppdaterar sig själv över tiden, är antingen mycket svår att lösa eller kan sannolikt inte lösas när man förblir rent inom Bitcoins “static lockbox” -skriptparadigm.

Ett annat tillvägagångssätt, som kan lösa detta problem utan alltför stora svårigheter, är mer invecklat och påträngande. Det kräver i huvudsak att inkludera det som kallas en “lätt klient” för Bitcoin 1.0 i Bitcoin 2.0. Den lätta klienten beskrivs lättast som ett långvarigt “kontrakt”, ett program på blockchain med en stor mängd internt tillstånd som körs varje gång en transaktion skickas till den, som skulle acceptera block och verifiera blockrubriker i exakt på samma sätt som en Bitcoin-klient på din mobiltelefon skulle göra. Detta kontrakt skulle då hålla en löpande lista över alla blockrubriker i Bitcoin 1.0, och för att få en BTC2.0 skulle man behöva skicka ett kryptografiskt bevis på att du gjorde den nödvändiga transaktionen i BTC1.0 i kontraktet, tillsammans med en säkerhet insättning på 0,1 BTC2,0.

Kontraktet skulle kontrollera att beviset är giltigt, hamnar vid ett block som ligger i kontraktets egen interna mini-blockchain och vänta sedan på en av två saker som hände. Först, när sextio fler Bitcoin 1.0-block läggs till i kontraktet, skulle det släppa en enhet av BTC2.0 till avsändaren plus depositionen. Alternativt, om någon annan lämnar in ett kryptografiskt bevis på att transaktionen är ogiltig av vilken anledning som helst (t.ex. spenderar bitcoins som inte finns) inom den tiden, skulle de få en deposition.

Detta skulle lösa säkerhetsproblemet, men har en viktig brist: det kan inte göras inom Bitcoin-protokollet som det är. Det är ganska enkelt att implementera i ett protokoll som Ethereum, eftersom det är specifikt utformat för kontrakt, men Bitcoins skriptfunktion tillåter inte att det finns kontrakt som har internt tillstånd, så att göra detta inuti Bitcoin skulle kräva en väsentlig ändring av Bitcoin 1.0-protokollet. I slutändan kanske det synsätt som Austin Hill och Adam Back tar inte ser ut som någon av dessa strategier; emellertid visar den stora komplexiteten i problemet att det fortfarande finns många utmaningar som väntar.

Brytning

En annan viktig fråga är: hur kommer dessa sidokedjor att säkras? Standardmekanismen för att säkra en blockchain är gruvdrift, men gruvdrift kräver en mekanism för att belöna gruvarbetare i den kedjan. I en sidokedja måste varje enhet i sidokedjevalutan backas upp av en manuslåsbox som innehåller en enhet BTC på Bitcoin-blockkedjan, så det finns ingen enkel möjlighet att utfärda valutaenheter från sidan ingenstans. Det finns två möjligheter för detta: demurrage (dvs. en procentuell skatt per år på alla BTC i sidokedjan) och transaktionsavgifter. Båda dessa ger dock en ganska låg inkomst, och det är därför inte alls säkert att vanlig gammal oberoende gruvdrift kommer att lösa problemet.

Det finns två sätt att komma runt den här frågan. Ett tillvägagångssätt är att få sidokedjan att säkerställas genom bevis på andel, genom att använda de små intäkterna från transaktionsavgifter för att kompensera deltagande intressenter med en ränta. Detta tillvägagångssätt skulle emellertid vara mycket svårt att implementera i en sidokedja, eftersom beräkningarna som är inblandade i valideringen av bevis på insats sannolikt är för komplexa för att effektivt kunna implementeras direkt i en blockchain. Den andra metoden, och den som befordras av Adam Back och Austin Hill, kallas ”merge-mining”; i huvudsak inkluderar gruvarbetare i Bitcoin blockerar data från både Bitcoin-blocket och Namecoin-blocket, vilket gör att gruvarbetare kan tillhandahålla säkerhet för båda kedjorna samtidigt med samma beräkningsinsats.

Som argumenterad av Bitcoin-utvecklaren Peter Todd har begreppet sammanslagning av gruvdrift dock en mycket viktig säkerhetsfel: om inte majoriteten av Bitcoin-gruvarbetare går med på att slå samman en viss kedja, är den kedjan förmodligen inte säker alls. För att förstå varför, överväga först fallet med ett mer traditionellt altcoin, i vårt exempel som kör SHA256 för enkelhetens skull (om altcoin använder en anpassad algoritm, kan Litecoin-gruvarbetare dra av attacken istället). Om altcoin har 5 av Bitcoin-hashkrafterna, för att kunna attackera kedjan via en dubbel spendering måste minst 5 av Bitcoin-nätverkets kraft tillfälligt omdirigera sig till gruvdrift på altcoin. Detta är potentiellt möjligt, men det är ett kostsamt drag: medan attacken är på plats skulle Bitcoin-gruvarbetarna förlora intäkterna från gruvdrift på Bitcoin. I fallet med en sammanslagna sidokedja är det dock kostnadsfritt att bryta i en sidokedjes huvudlinje eller att attackera den, så det skulle inte finnas någon ekonomisk avskräckande effekt på att attackera den alternativa kedjan. Detta är inte bara en gissning; det har funnits faktiska exempel på att gruvbassänger attackerar sammanslagna kedjor i verkligheten.

Bortsett från säkerhet exponerar detta beroende av sammanslagning även en annan oroande begränsning av sidokedjans idé: medan kryptovalutans anda är utan tvekan den av tillståndlös innovation, för att skapa en sidokedja krävs tillstånd och aktiv hjälp av 50 av alla Bitcoin gruvpooloperatörer. Dessa begränsningar tillsammans antyder att sidokedjeprotokollet, även om det är bra för många användningsfall, verkligen inte kommer att vara idealiskt för alla.

Löftet

Om de tekniska frågorna kring sidokedjor kan hanteras, vilket är löftet de ger? Just nu kan utvecklingen av kryptovaluta i huvudsak klassificeras i fyra kvadranter. Den första kvadranten består av projekt som använder Bitcoin-valutan och Bitcoin-blockchain – i huvudsak Bitcoin själv. Den andra kvadranten är protokoll som använder Bitcoin blockchain men inte Bitcoin-valutan; Mastercoin, färgade mynt och motpart är utmärkta exempel på detta. Den tredje kvadranten använder både en oberoende valuta och en oberoende blockchain; detta innehåller applikationer som (för att ta mycket olika exempel) Ripple, Litecoin och NXT. Nu, med sidokedjor, har också den sista kvadranten fyllts: att använda ett oberoende nätverk men använda Bitcoin som underliggande valuta.

Det blir intressant att se vilka applikationer som nischen fungerar bäst för. För helt nya ekosystem är det troligen inte rätt metod; det är lite meningsfullt för ett helt oberoende nätverk som Ripple eller Ethereum att knyta sin huvudsakliga interna symbol till Bitcoin ekonomiskt och få de två att utsättas för varandras prisrörelser. När det gäller sådana stora ansträngningar är det också vettigt att experimentera med olika penningpolitiska åtgärder; Ethereums eter har en linjär utgivningsmodell som ständigt släpper ett visst fast antal valutaenheter varje år, medan Ripple släppte alla 100 miljarder enheter XRP till Ripple-organisationen på en gång, och organisationen släpper dem över tiden till utvecklare, investerare och personer som deltar i distribuerade datorprojekt. För en gaffel som är avsedd att fungera som en större protokollförändring, som att uppgradera från SHA256 till SHA3 eller när det gäller kvantdatorer från ECDSA till Lamport-signaturer eller NTRU, är det definitivt helt meningsfullt. För allt i mitten är det upp till fall från fall att räkna ut.

När det gäller Ethereum är det särskilt viktigt att komma ihåg: Ethereum är en kryptografisk konsensusplattform för allmänt ändamål, inte ett specifikt “altcoin”. Därför kan man ha många olika valutor som finns på Ethereum-plattformen som kontrakt; man kan ha tråkiga gamla fasta leveransvalutor, valutor med en penningpolitik som hanteras av en decentraliserad autonom organisation, valutor som finns för att subventionera vetenskaplig forskning eller ge en grundinkomst, och till och med valutor med en inbyggd tvåvägsutbytesmekanism för att fungera som sidokedjor. Således kan Ethereum inte exakt fångas in i varken sidokedjekvadranten eller Ripple / Litecoin / NXT-kvadranten; det finns i båda.

Det är faktiskt mycket troligt att så snart Ethereum-genesblocket startar kommer det att finnas sidokedjor för Bitcoin, Litecoin och Dogecoin som genomförs inom tre månader. Om sidokedjor kan genomföras framgångsrikt och säkert betyder detta att Ethereum till och med kan bli det föredragna sättet att lagra BTC, LTC eller DOGE med kraftfulla lagringsavtal med flera signaturer som inkluderar funktioner som uttagsgränser. Mellan kontrakt på en allmänt kedja, högpresterande specialkomponenter, kvasi-centraliserade OpenTransactions-servrar, sidokedjor och Bitcoin i sig, blir en sak tydlig: kryptovalutor kommer att kunna interagera som aldrig förr.