Taproot i Schnorr:Potpis koji se sabira i skripte koje se ne vide

Šta je Schnorr potpis i zašto ga Bitcoin nije imao od početka, kako Taproot izlaz može da se potroši ključem ili skrivenom skriptom, kako je aktiviran 2021, kada je uplata sa bc1p jeftinija, koliko se danas koristi i šta je sa inskripcijama.

Sadržaj

Najvažnije u nekoliko reči:

  • Taproot je izmena pravila Bitcoina koja važi od 14.11.2021. Donela je Schnorr potpise, adrese koje počinju sa bc1p i nov način da se zaključa novac.
  • Schnorr potpis ima tačno 64 bajta i može da se sabira. Više ljudi može da napravi jedan zajednički ključ i jedan zajednički potpis (MuSig2).
  • Taproot izlaz može da se potroši na dva načina. Key path je jedan potpis, a script path je jedna od skripti sakrivenih u izlazu. Pri trošenju se otkriva samo upotrebljeni put.
  • Ulaz sa bc1p je manji od ulaza sa bc1q, ali je izlaz veći. Obična uplata zato košta skoro isto, a ušteda raste sa brojem ulaza.
  • U četiri bloka od 5. i 6.11.2026. Taproot ulaza je bilo 12,5% od svih ulaza. Taproot je otvorio put i inskripcijama, oko kojih se programeri i korisnici spore od 2023.
  • Ako tvoj novčanik daje adrese sa bc1q, ne moraš ništa da menjaš. Taproot najviše donosi novčanicima sa više ključeva i planovima za naslednike.

Taproot je izmena pravila Bitcoina iz 2021. godine. Iz teksta SegWit nadogradnja znaš da je SegWit ostavio brojeve verzija za buduće izmene. Taproot je prva od njih, SegWit verzija 1, i od nje dolaze adrese koje počinju sa bc1p (BIP 341).

Taproot čine dve stvari koje idu zajedno. Prva je nov potpis, Schnorr potpis (po matematičaru Klausu Šnoru). Druga je nov način da se zaključa novac, tako da uslovi za trošenje ostanu skriveni dok ne zatrebaju.

Potpis dokazuje da novac troši vlasnik ključa

Kad šalješ bitcoine, novčanik privatnim ključem pravi potpis. Svaki čvor proverava potpis tvojim javnim ključem, a da tvoj privatni ključ nikad ne vidi. Kako ključevi rade, objašnjava tekst Privatni i javni ključevi, a kako radi par ključeva u kriptografiji, Kriptografija i Bitcoin.

Od 2009. Bitcoin koristi potpis ECDSA. Zapis tog potpisa nema stalnu dužinu i ima do 72 bajta (BIP 340). Isti potpis je mogao da se zapiše na više načina, pa je pre SegWita neko treći mogao da promeni oznaku tuđe transakcije.

Schnorr potpis je bio pod patentom kad je Bitcoin nastao

Klaus Šnor (Claus Schnorr) je svoj potpis patentirao. Američki patent je podnet 23.2.1990. i odobren 19.2.1991, a Google Patents kao predviđen kraj zaštite navodi 23.2.2010 (US 4.995.082). Bitcoin je počeo da radi u januaru 2009, dok je patent još važio.

ECDSA je u to vreme bio standardizovan (SEC 1) i gotov u bibliotekama za kriptografiju. Koliko znamo, Satoshi nije napisao zašto ga je izabrao. Autori predloga BIP 340 pišu da Schnorr skoro nema mana, osim što nije bio standardizovan, i da to žele da promene (BIP 340).

Schnorr potpisi se sabiraju

BIP 340, koji su napisali Pieter Wuille, Jonas Nick i Tim Ruffing, navodi tri prednosti (BIP 340):

  • Dokaziva sigurnost. Za Schnorr postoji matematički dokaz da se potpis ne može lažirati, uz pretpostavke slabije nego kod ECDSA.
  • Jedan zapis. Niko treći ne može da napravi drugi ispravan zapis istog potpisa. Potpis uvek ima tačno 64 bajta.
  • Sabiranje (engl. linearity). Više ljudi može da napravi potpis koji važi za zbir njihovih javnih ključeva.

Treća osobina je najvažnija. Iz nje dolazi MuSig2, postupak u kome više ključeva pravi jedan zajednički javni ključ i jedan zajednički potpis (BIP 327). U lancu se takav potpis ne razlikuje od potpisa jedne osobe. Uslov je da potpišu svi. MuSig2 je n od n, pa za novčanik 2 od 3 sam nije dovoljan, kako objašnjava tekst Multisig i najslabija karika.

Čvor uz to može da proveri mnogo Schnorr potpisa odjednom, brže nego jedan po jedan (BIP 340).

Jedan izlaz, dva puta do novca

Taproot izlaz u lancu izgleda kao jedan javni ključ. Iza tog ključa mogu da stoje i skripte, a izlaz se troši na jedan od dva načina (BIP 341):

  • Key path (put ključem). Vlasnik daje jedan potpis za taj ključ i to je sve. Ključ može da bude tvoj ili spojeni ključ više ljudi.
  • Script path (put skriptom). Vlasnik otkrije jednu od skripti, ispuni njene uslove i pokaže dokaz da je baš ta skripta bila u izlazu od početka.

Skripte su složene u stablo skripti, kao Merklovo stablo u bloku. Ta ideja je ranije nosila ime MAST (engl. Merkelized Abstract Syntax Tree). Pri trošenju se otkriva samo upotrebljena grana, a sve ostale ostaju skrivene. Za čvor je dovoljan dokaz da je grana deo stabla (BIP 341).

Dva puta do istog novca

Zamišljen primer novčanika sa jednim glavnim ključem i dve rezervne skripte.

Izlaz sa adresom bc1p:u lancu se vidi jedan javni ključKey path (put ključem)tvoj potpis,jedan ključU lancu: samo potpis.Da skripte postoje, ne vidi se.Script path (put skriptom)stablo skriptiskripta A: naslednik,posle godinu danaskripta B: dva od trirezervna ključaU lancu: upotrebljena skripta A i dokazda je u stablu. Skripta B ostaje skrivena.

Sliku možeš da pomeraš levo-desno.

Izvor: BIP 341, „Motivation“ i „Script validation rules“ (otvara se u novom prozoru), 2020, put ključem, put skriptom, stablo skripti.

Uzmi novčanik za ušteđevinu. Glavni ključ je tvoj i njime trošiš kao i do sada. Skripta A kaže da novac, ako se godinu dana ne pomeri, može da uzme naslednik svojim ključem. Skripta B kaže da novac mogu da pomere dva od tri rezervna ključa. Dok trošiš svojim ključem, niko ne zna da skripte postoje. Kako se plan za naslednike pravi bez ovakvih skripti, piše u tekstu Bitcoin i naslednici.

Novčanik sa više ključeva izgleda kao običan

Multisig sa adresom bc1q pri trošenju otkriva skriptu sa svim ključevima i sve potpise. Kod Taproota trošenje ključem ne otkriva da je postojao i drugi put. Uplata iz novčanika jednog čoveka, iz spojenog ključa više ljudi i iz izlaza sa skrivenim skriptama izgleda isto (BIP 341).

Trošenje skriptom ipak nešto otkriva. Vidi se da put ključem nije upotrebljen i koliko je duboka grana, a to može da ukaže na program koji je izlaz napravio (BIP 341). Šta još odaje tvoje transakcije, objašnjava tekst Bitcoin privatno i bezbedno.

Ideja je stigla 2018, a pravila važe od novembra 2021.

Gregory Maxwell je 23.1.2018. na mejling listi programera Bitcoina opisao ideju. Po njemu skoro svaki ugovor ima granu u kojoj se svi učesnici slažu, a ostale grane trebaju samo kad neko odbije da sarađuje. Zato je predložio da glavna grana bude ključ, a ostale skrivene skripte (bitcoin-dev, 23.1.2018).

Predlozi su brojeve dobili 19.1.2020. Taproot, BIP 341, i pravila skripti, BIP 342, napisali su Pieter Wuille, Jonas Nick i Anthony Towns (BIP 341, BIP 342).

Aktivacija je išla postupkom Speedy Trial (brza proba). Rudari su spremnost pokazivali signalom u blokovima, a prag je bio 1.815 od 2.016 blokova, kako objašnjava tekst Soft fork i hard fork. Prebrojali smo verzije blokova na mempool.space. U periodu od bloka 685.440 do bloka 687.455, iskopanog 13.6.2021, signal je nosilo 1.983 bloka. U periodu pre toga 1.690, ispod praga. Prag je tako pređen, a nova pravila važe od bloka 709.632, iskopanog 14.11.2021 (Bitcoin Core 0.21.1).

Taproot kroz vreme

Stvarni događaji, od najstarijeg. Datum je po svetskom vremenu (UTC).

  1. Ideja na mejling listi

    Gregory Maxwell predlaže da svaki izlaz može da se potroši ili ključem ili skrivenom skriptom.

  2. Predlozi dobijaju brojeve

    Schnorr potpisi postaju BIP 340, Taproot BIP 341, a pravila skripti BIP 342.

  3. Bitcoin Core 0.21.1

    Prva verzija programa koja zna nova pravila i broji signal rudara po postupku Speedy Trial.

  4. Prag dostignut

    U periodu od 2.016 blokova koji se završio blokom 687.455 signal je nosilo 1.983 bloka, više od praga od 1.815.

  5. Taproot važi

    Od bloka 709.632 svaki čvor sa novom verzijom proverava nova pravila.

  6. MuSig2 dobija broj

    Način da više ključeva napravi jedan zajednički ključ i jedan potpis postaje BIP 327.

  7. Bitcoin Core 23.0

    Nov novčanik u ovom programu može da daje i adrese sa bc1p.

Izvori: bitcoin-dev, „Taproot: Privacy preserving switchable scripting“ (otvara se u novom prozoru), 23.1.2018, prva poruka o Taprootu; BIP 340, 341 i 342, zaglavlje (otvara se u novom prozoru), 19.1.2020, datum dodele broja; Bitcoin Core 0.21.1, napomene uz izdanje (otvara se u novom prozoru), 3.5.2021, datum izdanja i pravila aktivacije; mempool.space, blok 687.455 i verzije blokova od 685.440 (otvara se u novom prozoru), 13.6.2021, brojano 6.11.2026, blokovi sa signalom Taproota; mempool.space, blok 709.632 (otvara se u novom prozoru), 14.11.2021, blok od koga Taproot važi; BIP 327, zaglavlje (otvara se u novom prozoru), 22.3.2022, datum dodele broja; Bitcoin Core 23.0, napomene uz izdanje (otvara se u novom prozoru), 25.4.2022, tr() opis u novom novčaniku.

Ulaz je manji, a izlaz veći

Naknada se plaća po virtuelnom bajtu, a kako se on računa, objašnjava tekst Šta je UTXO? Taproot menja dva dela transakcije, i to u suprotnim smerovima.

Ulaz je manji, izlaz veći

Jedan ulaz i jedan izlaz sa jednim ključem, u virtuelnim bajtovima, na istoj razmeri.

Ulaz, kad novac trošiš

  • Adresa sa 1147 vB
  • Adresa sa bc1q67,75 vB
  • Adresa sa bc1p (key path)57,5 vB

Izlaz, kad novac primaš

  • Adresa sa 134 vB
  • Adresa sa bc1q31 vB
  • Adresa sa bc1p (key path)43 vB

Izvori: BIP 141 i BIP 341 (otvara se u novom prozoru), 2015, 2020, težina, izlaz sa 32 bajta ključa, potpis od 64 bajta; mempool.space, transakcije iz blokova 974.000, 974.100 i 974.700 (otvara se u novom prozoru), otvoreno 1. i 6.11.2026, stvarne uplate težine 900, 568, 616 i 798. Ulazi sa 1 i bc1q računati su sa potpisom od 71 bajta, kakav pravi Bitcoin Core.

Ulaz je manji. Kod adrese bc1q ulaz nosi potpis od 71 bajta i javni ključ od 33 bajta. Kod adrese bc1p nosi samo potpis od 64 bajta, jer je ključ već u izlazu. Ulaz sa bc1q ima 67,75 virtuelnih bajtova, a sa bc1p 57,5.

Izlaz je veći. Adresa bc1q nosi heš ključa od 20 bajtova, a adresa bc1p sam ključ od 32 bajta. Izlaz sa bc1q ima 31 virtuelni bajt, a sa bc1p 43.

Ista uplata sa jednim ulazom, uplatom i kusurom, kad oba izlaza idu na adrese iste vrste, ima 225 virtuelnih bajtova sa adrese koja počinje sa 1, 141 sa bc1q i 154 sa bc1p. Taproot tu ispada skuplji, jer plaća dva veća izlaza. Proverili smo na stvarnoj uplati iz bloka 974.700, težine 616 jedinica.

Pravednije je poređenje kad uplata ide istom primaocu, na adresu bc1q, a samo kusur se vraća u novčanik.

Ista uplata iz novčanika bc1q i bc1p

Uplata na adresu bc1q, kusur se vraća u isti novčanik. Taproot novčanik troši ključem.

Ulazabc1qbc1pbc1p plaća
1141 vB142 vB0,00000006 BTC · 6 sat višemanje od jednog dinara
2208 vB200 vB0,00000048 BTC · 48 sat manjeoko 4 din.
10750 vB660 vB0,0000054 BTC · 540 sat manjeoko 43 din.

Tabelu možeš da pomeraš levo-desno.

Izvori: BIP 141 i BIP 341 (otvara se u novom prozoru), 2015, 2020, težina, izlaz sa 32 bajta ključa, potpis od 64 bajta; mempool.space, transakcije iz blokova 974.000, 974.100 i 974.700 (otvara se u novom prozoru), otvoreno 1. i 6.11.2026, stvarne uplate težine 900, 568, 616 i 798; mempool.space, preporučene naknade (otvara se u novom prozoru), 5.11.2026. u 19:04 po UTC, naknada po virtuelnom bajtu za sledeći blok i bez žurbe; mempool.space, cena bitcoina (otvara se u novom prozoru), 5.11.2026. u 19:00 po UTC, cena jednog bitcoina u evrima; NBS, srednji kurs evra (preko kurs.resenje.org) (otvara se u novom prozoru), 5.11.2026, dinara za jedan evro. Naknada 6 sat/vB, koliko je mempool.space predlagao za sledeći blok. Dinari po ceni i kursu od 5.11.2026.

Sa jednim ulazom razlika je jedan virtuelni bajt, 141 naspram 142. Pri naknadi od 6 satošija po virtuelnom bajtu, koliko je mempool.space 5.11.2026. predlagao za sledeći blok, novčanik sa bc1p plaća 0,00000006 bitcoina (6 satošija) više. Sa deset ulaza ista uplata ima 750 naspram 660 virtuelnih bajtova, pa novčanik sa bc1p plaća 0,0000054 bitcoina (540 satošija) manje, oko 43 dinara po ceni i kursu od 5.11.2026.

Kod novčanika sa više ključeva razlika je veća. Ista uplata iz novčanika 2 od 3 sa adresom bc1q ima 189 virtuelnih bajtova, a iz spojenog ključa MuSig2 142, kao iz novčanika sa jednim ključem. Taj račun je u tekstu Multisig i najslabija karika.

Koliko se Taproot danas koristi

Prebrojali smo sve ulaze u četiri bloka od 5. i 6.11.2026. (974.700, 974.736, 974.772 i 974.808). Taproot ulaza je bilo 2.963 od 23.626, odnosno 12,5%, a po bloku od 7% do 22%. Od tih Taproot ulaza 92% je potrošeno ključem. Od 23.627 izlaza na bc1p je išlo 2.501, odnosno 10,6%. To je naše brojanje podataka sa mempool.space, a ne objavljena statistika.

Udeo jako zavisi od bloka i od dana. Četiri bloka pokazuju da Taproot nije retkost, ali ne i kako se udeo menjao kroz godine. Za to nismo našli javne podatke sa jasnom licencom.

Taproot je otvorio put i inskripcijama

Taproot je ukinuo i neka ograničenja skripti. Skripta Taproot izlaza više nema granicu od 10.000 bajtova, nego je ograničava samo veličina bloka (BIP 342). Pošto je skripta u witness delu, njeni bajtovi se pri merenju računaju četiri puta manje.

To je iskoristio program ord. On u deo skripte koji se nikad ne izvršava upisuje sliku, tekst ili zvuk, a to se zove inskripcija (engl. inscription). Zapis se otkriva u trošenju skriptom (dokumentacija programa ord). Izdanje 0.4.0 od 19.1.2023. već je zapisivalo slike, zvuk i HTML (ord, spisak izmena).

Oko toga je u februaru 2023. počela rasprava. Jedni misle da slike nemaju šta da traže u blokovima i da poskupljuju obične uplate. Drugi kažu da inskripcije plaćaju naknadu kao i svi i da pravila to dozvoljavaju. Programer Andrew Poelstra je to krajem 2023. sažeo rečima da ne postoji razuman način da se spreči upis podataka u witness, a da se ne podstakne nešto još gore ili ne pokvari korisna upotreba (naš prevod, Bitcoin Optech, 20.12.2023).

Šta ti od toga imaš danas

  • Adrese sa bc1p. Ako ih tvoj novčanik nudi, možeš da ih koristiš. Bitcoin Core, program za full node, u novom novčaniku ih daje od verzije 23.0 iz aprila 2022 (napomene uz izdanje).
  • Slanje na bc1p. Program koji šalje na takvu adresu mora da zna zapis bech32m (BIP 350). Pre slanja većeg iznosa probaj sa malim.
  • Obična uplata nije jeftinija. Sa jednim ulazom razlika je jedan virtuelni bajt. Ušteda se vidi kad trošiš više manjih iznosa odjednom.
  • Javni ključ se vidi odmah. Kod adrese bc1p ključ je u samoj adresi, a kod bc1q tek posle prvog trošenja. Danas to nije opasno, ali bi postalo kad bi se pojavili dovoljno jaki kvantni računari.
  • Više ključeva i nasleđe. Tu Taproot donosi najviše, ali programi za to tek stižu. Stanje 1.11.2026. opisuje tekst Multisig i najslabija karika.

Ako ti novčanik daje adrese sa bc1q, ne moraš ništa da menjaš. One važe i dalje.

Šta mislimo: tiha izmena koja se isplati kasnije

Po nama je Taproot dobra izmena, ali ne zbog onoga što običan korisnik danas vidi. Obična uplata košta skoro isto. Vrednost je u tome što novčanik sa više ključeva, plan za naslednike ili kanal za plaćanje može da izgleda kao obična uplata i da plaća kao ona. Pravila to već dozvoljavaju, a programi za to tek sazrevaju.

Inskripcije pokazuju i drugu stranu. Pravilo napisano za jednu namenu ljudi koriste i za druge, koje autori nisu imali na umu. Mislimo da je to dobar razlog da se pravila Bitcoina menjaju polako, a oko svake nove izmene raspravlja dugo.

Šta iz ovoga sledi za tebe

Ključne lekcije:

  • Schnorr potpis ima 64 bajta i može da se sabira, pa više ključeva može da potpiše kao jedan.
  • Taproot izlaz se troši ključem ili jednom skrivenom skriptom, i otkriva se samo upotrebljeni put.
  • Ulaz sa bc1p je manji, izlaz veći. Obična uplata košta skoro isto kao sa bc1q.
  • U četiri bloka iz novembra 2026. Taproot ulaza je bilo 12,5%. Taproot je omogućio i inskripcije.

Šta dalje?

Skripte Taproot izlaza pišu se u tapscriptu, a on ima mesta ostavljena za nove naredbe. Predlog da se jedna stara naredba vrati baš tamo objašnjava sledeći tekst, OP_CAT: mala naredba sa velikim mogućnostima.

Taproot se ne vidi u običnoj uplati. Vidi se tek kad novčanik treba da čuva više od jednog ključa.

  1. Taproot i Schnorr: potpis koji se sabira i skripte koje se ne vide

Tekst 9 od 23

Napredne teme