Spacechains: Hvordan dette nye Bitcoin Sidechain-forslag fungerer

Kildeknude: 1544330

Spacechains er en foreslået Bitcoin-sidekæde, der tilbyder en envejs-pin-mekanisme, der bruger blindt fletteminedesign.

Ideen med sidekæder som en skalerings- og funktionsudvidelsesmekanisme for Bitcoin er et meget gammelt koncept. En slags grundlæggende "forfader" idé om sidekæder, fusionere minekæder, går endda tilbage til før Satoshi forsvandt.

Det forslag var simpelthen ideen om, at to helt adskilte og uafhængige kæder blev udvundet af den samme gruppe af minearbejdere, uden mulighed for at flytte noget mellem kæderne. Det originalt sidekædeforslag blev lavet i 2014 af mange af de mennesker, der fortsatte med at grundlage Blockstream, bogstaveligt talt en uge eller deromkring efter avisens udgivelse. Den grundlæggende idé var at kunne få mønter til at bevæge sig frem og tilbage mellem den primære Bitcoin blockchain og andre sidekæder, hvor simple betalingsverifikation (SPV) beviser blev brugt til at bevise, at ting er gyldige, når du sender mønter fra den ene kæde til den anden. Dette blev aldrig til noget på grund af kompleksitet i implementeringen omkring kædereorganiseringer, potentialet for tyveri og risici for centralisering af minedrift (hvilket alt sammen kan læses om i afsnit fire i Bitcoin hvidt papir).

Pindemekanismer til sidekæder kan være af to varianter, én vej og to vej. Betydningerne bør være indlysende - i en to-vejs pind kan mønter bevæge sig frem og tilbage mellem forælderkæden og sidekæden, og i en envejs pind kan de kun bevæge sig fra forælderkæden til sidekæden og aldrig flytte tilbage. I øjeblikket er den eneste form for to-vejs sidekædepinde implementeret på Bitcoin gennem fødereret konsensus, hvilket betyder, at pinden er garanteret af et betroet sæt "depotholdere", som bevarer kontrollen over midler, der er knyttet til sidekæden i en multisig-pung, indtil de trækkes tilbage.

Folk har dog fortsat arbejdet på andre designs til sidekædepløkker, der ikke er forbundne. Her skal jeg gennemgå Ruben Somsens Spacechain-forslag som et eksempel. Det er en envejs-pløkkemekanisme, der bruger et blindt sammensmeltningsminedesign, der ligner Paul Stztorc's. Det betyder, at mønter kun kan gå ind i sidekæden og aldrig forlade, og at minearbejdere ikke behøver at køre ny software for at få kompensation for at mine sidekæden (men, som jeg vil komme ind på senere, kan de få mere gavn af at gøre det).

Spacechain-forslaget

Merge mining kræver, at minearbejdere kører noderne i både Bitcoin-kæden og hvilken som helst anden kæde, de miner, for at kompilere blokkene for begge kæder og forpligte sig til dem i Bitcoin-blok-headeren, de miner. Blind merge mining udnytter det faktum, at Bitcoin-minearbejderne i virkeligheden kun behøver at have den anden kædes blokheader at forpligte sig til i deres Bitcoin-blok, en anden kan faktisk gøre sig den ulejlighed at sammensætte blokken til den anden kæde.

Somsens foreslåede mekanisme hertil kan udnytte NOGEN FORUDSÆT (APO) for at tillade åben konkurrence for alle at være i stand til at konkurrere om at konstruere den næste sidekædeblok, mens man garanterer, at kun én blok kan begås pr. Bitcoin-hovedkædeblokken. En anden fordel ved Rubens forslag er, at det ikke kræver en specifik blød gaffel for at muliggøre muligheden for at implementere rumkæder. Eltoo/ANYPREVOUT foreslås til fordel for Lightning-netværket, hvilket muliggør fleksible statskæder såvel som kanalfabrikker. Rumkæder er simpelthen en anden mulighed for de mange ting, som at aktivere ANYPREVOUT ville bane vejen for.

Den generelle idé med hans blinde fusionsmineforslag er, at du ved at gøre brug af APO kan foruddefinere et langt sæt transaktioner, der tager den samme initiale UTXO ind i dem og forpligter dig til altid at genskabe den. Så forestil dig en enkelt satoshi UTXO, hvor hver forudoprettet transaktion garanterer, at den samme UTXO genskabes som et output, når det bekræftes. Tænk på det som en slags markør, denne specielle UTXO er identifikatoren, der gør det muligt for enhver, der ser på den primære Bitcoin-blockchain, at vide, "Det er her, jeg finder en forpligtelse til sidekæde X's blokke." Dette efterlader dog et problem åbent: minearbejdergebyrer. Hvis den UTXO skal genskabes med det samme beløb, er der ingen midler til at betale gebyrer med.

Dette kan løses ved at bruge SIGHASH_SINGLE (signaturen fra et input tegner kun det enkelte input, og det tilsvarende output) og SIGHASH_ANYONECANPAY (folk er frit i stand til at tilføje yderligere input og output uden at ugyldiggøre signaturen, så længe input/output ved hjælp af SIGHASH_SINGLE efterlades som det er, for ikke at ugyldiggøre signaturen). Så kan enhver tilføje et input og ændre output for at betale minearbejdergebyrer for transaktionen.

Dette er også den mekanisme, der bruges til at forpligte sig til blokhovedet på sidekædeblokken. På samme måde som Taproot forpligter sig til træet af forskellige forbrugsbetingelser ved at justere den normale offentlige nøgle med Merkle-roden af ​​træet, kan enhver justere den normale offentlige nøgle med blokoverskriftens hash for sidekædeblokken. Sidechain noder kan derefter afsløre og videresende den blokoverskrift med en pegepind til transaktionen i hovedkæden for at bevise, at den faktisk blev udvundet. Derfra ville sidekædenoder udføre al den normale validering for at sikre, at sidekædeblokken følger de rigtige konsensusregler og videresende de faktiske blokke på tværs af sidekædenetværket ligesom på hovedkæden.

Hvis en af ​​de transaktioner, der blev brugt til at forpligte sig til sidekædeblokkene på hovedkæden, blev brugt til at forpligte sig til en ugyldig blok, eller endda fuldstændig kasserede data, så når sidekædenoder ser forpligtelsestransaktionen brugt på kæden, kan der ske to ting: Én, en ugyldig blok vil blive udbredt på tværs af sidekædenetværket, og når den ikke består valideringstjek, vil den blive forældreløs; eller to, dataene afsløres aldrig, i hvilket tilfælde den næste sidekædeblok vil bygge oven på og forpligte sig til den sidste blok, der faktisk afsløres, og den uafslørede forpligtelse vil blive ignoreret. Denne anden mulighed følger samme slags logik med den længste kæde som hovedkæden, så selvom noget blev afsløret senere, vil det stadig være forældreløst på grund af fremtidige blokke, der ikke byggede på det.

Men der er stadig problemet med dobbeltforbrug. Enhver med den private nøgle, der blev brugt til at generere markøren UTXO, kunne potentielt fordoble en hvilken som helst af de foruddefinerede transaktioner, der bruges til at forpligte sig til sidekædeblokke og ugyldiggøre hele sættet fra det tidspunkt og frem.

Dette løses ved faktisk at indsætte signaturen i selve UTXO'ens låsescript. Dette låser signaturen på input og output, hvilket garanterer genskabelsen af ​​markøren UTXO i den næste transaktion, der bruger den. Fordi den signatur automatisk vil blive videregivet og kontrolleret, når UTXO er brugt, er det ikke muligt blot at erstatte den med en anden og bruge den til en anden destination.

Dette efterlader et sidste udestående problem. Det ville i teorien være muligt at indsende flere transaktioner alle i en række i en enkelt Bitcoin-blok, så et stort antal sidekædeblokke bekræftes af minearbejdere alle i en enkelt hovedkædeblok. Dette kan misbruges til at angribe sidekædenetværket.

For at løse dette problem kan en CHECKSEQUENCEVERIFY (CSV) relativ tidslås indsættes i markør UTXO scriptet for at garantere, at kun én transaktion ved hjælp af markør UTXO kan bekræftes inde i en enkelt given hovedkædeblok.

Alt i alt ser det sådan ud: 

Kilde

Det er også værd at bemærke, at to varianter af dette design kan implementeres med CHECKTEMPLATEVERIFY (CTV) eller uden nogen ændringer overhovedet. Disse to designvarianter har simpelthen suboptimale afvejninger.

CTV-varianten ville bruge denne funktionalitet til at forpligte sig til kæden af ​​transaktioner ved hjælp af CTV i stedet for APO med hacket inklusive signaturen inde i UTXO-låsescriptet. CTV forpligter sig til alle output fra en transaktion, der bruger CTV UTXO, men den forpligter sig ikke til noget input udover sig selv.

Det betyder, at du kan tilføje input, men ikke output, til en CTV-transaktion. Så du kan medbringe dit eget gebyr ligesom i APO-designet, men du kan ikke tilføje en forpligtelse til sidekædeblokkens header.

Så det, vi skal gøre her, er at oprette en transaktion helt uden for kæden af ​​CTV-transaktioner for sidekæde-forpligtelsen til at skabe en UTXO, der er lige nok til at betale gebyret for CTV-transaktionen (fordi du ikke kan oprette et nyt ændringsoutput i denne transaktion går 100 % af det input, du tilføjer, til gebyrer), og inde i transaktionen forbereder gebyret UTXO, hvor vi forpligter os til en sidekædeblokoverskrift. Så det første trin: en transaktion, der skaber et gebyr, der betaler output og en forpligtelse til en sidekædeblokoverskrift. Andet trin: vi tager gebyroutputtet og tilføjer det som input til CTV-transaktionen, som, når den er bekræftet, "miner" vores specifikke sidekædeblok. Denne variant ser sådan ud:

Kilde

Den næste variant bruger blot forudsignede transaktioner. Det kunne implementeres i dag, men på grund af begrænsningerne af, hvad script kan gøre, kræver det, at alle gebyrer for transaktionerne skal betales på forhånd af den, der skaber rumkæden.

Kæden af ​​transaktioner starter med en enkelt UTXO og skaber i en kæde to output. Det første output er markøren UTXO, som signalerer, at kæden af ​​transaktioner er relateret til en specifik rumkæde, den anden er en UTXO med lille værdi, som kan bruges åbent af enhver, der giver mulighed for at knytte et andet input/output til det. Denne anden transaktion er, hvor enhver åbent kan forpligte sig til at være den første til at bruge det andet output fra spacechain-transaktionskæden og bruge det til at forpligte sig til deres sidekæde-blokoverskrift.

I CTV-varianten skulle sidekædeblokken forpligtes til i en sekundær transaktion, fordi CTV ikke tillader tilføjelse af nye output i en transaktion, der bruger et input, der er låst af CTV. Denne variant kræver brug af en sekundær transaktion, fordi hvis du tilføjer nye input eller output til den forudsignerede kæde, vil du ændre transaktionens TXID og ugyldiggøre alle de forudsignerede transaktioner, der kommer efter den. Denne variant ser sådan ud: 

Kilde

Den ene ulempe ved denne sidste variant er, at hvis den, der på forhånd har underskrevet alle de transaktioner, der skal bruges til sidekædeblokforpligtelser, ikke sletter de private nøgler, der er brugt til at gøre det, kan de effektivt stoppe kæden ved at fordoble den aktuelle markør UTXO på et hvilket som helst tidspunkt. tid.

Og der har du det. Dette er det seneste forslag til et sidekæde-design på Bitcoin, og det kan implementeres på tre forskellige måder, med det åbenlyse forbehold, at den implementeringssti, der kan gøres nu, har spørgsmålet om, at nogen skal slette en privat nøgle.

Denne artikel er simpelthen den første i en serie, der vedrører de store sidechain-designforslag, der er blevet offentliggjort for Bitcoin siden det oprindelige 2014-design. Hold øje med resten.

Dette er et gæsteindlæg af Shinobi. Udtalte meninger er helt deres egne og afspejler ikke nødvendigvis dem fra BTC Inc eller Bitcoin Magazine.

Tidsstempel:

Mere fra Bitcoin Magazine