OP_CAT:Mala naredba sa velikim mogućnostima

Šta je OP_CAT, zašto je isključen 2010, šta predlaže BIP 347, šta bi omogućio (covenant, vault), zašto su neki oprezni i gde je predlog 1.11.2026.

Sadržaj

Najvažnije u nekoliko reči:

  • OP_CAT je naredba Bitcoinove skripte koja spaja dva podatka u jedan. Od „Beo“ i „grad“ pravi „Beograd“.
  • OP_CAT je postojao u prvim verzijama programa. Isključen je 15.8.2010, zajedno sa još 14 naredbi, i na glavnoj mreži ga nema ni danas.
  • Predlog BIP 347 vraća ga samo u tapscript, skriptu Taproot izlaza, sa granicom od 520 bajtova za spojeni podatak. Za to bi bio potreban soft fork.
  • Zagovornici kažu da bi OP_CAT omogućio covenant, pravilo o tome kuda novac sme dalje, a sa njim i trezore koji zaustavljaju lopova. Oprezni se boje upotreba koje danas niko ne vidi unapred.
  • Autori su 1.3.2026. predlog proglasili završenim. To nije aktivacija. OP_CAT se zasad isprobava samo na probnoj mreži signet.
  • U tvom novčaniku se zbog ovoga ništa ne menja.

Bitcoin nema račune ni lozinke. Svaki iznos je zaključan malim programom, a ko hoće da ga potroši, mora da donese podatke koji taj program zadovoljavaju. OP_CAT je jedna naredba tog programa, ona koja spaja dva podatka u jedan.

Isključen je pre 16 godina. Od 2023. postoji predlog da se vrati, a programeri se oko njega ne slažu.

Svaki bitcoin čuva mali program

Iz teksta Šta je UTXO? znaš da izlaz transakcije kaže koliko bitcoina ide i ko sme sledeći da ih potroši. To „ko sme“ zapisano je kao kratak program. Jezik tog programa zove se skripta (engl. Bitcoin Script).

Najčešći program traži dve stvari, javni ključ koji odgovara adresi i potpis napravljen privatnim ključem iz istog para. Kako ključevi i potpis rade, objašnjava tekst Privatni i javni ključevi. Čvor koji proverava transakciju pokrene program i pusti trošenje samo ako program uspe.

Program se sastoji od reči koje se zovu opcode (naredba skripte). Svaka radi jednu malu stvar. Jedna uporedi dva podatka, druga izračuna heš, treća proveri potpis. Podaci na kojima rade stoje na steku (engl. stack), gomili u kojoj se nov podatak stavlja na vrh, a naredba uzima odozgo.

Jedna naredba spaja dva podatka u jedan

Dve trake od starog papira sa velikim slovima BEO i GRAD, spojene providnom lepljivom trakom u jednu traku na kojoj piše BEOGRAD

OP_CAT uzima dva podatka sa vrha steka, spaja ih po redu i na stek vraća jedan (BIP 347).

Zamisli da na steku prvo stoji „Beo“, a iznad njega „grad“. Posle OP_CAT na steku je jedan podatak, „Beograd“. Isto radi sa bilo kojim bajtovima.

Naredba ne uspeva u dva slučaja. Na steku nema dva podatka, ili bi spojeni podatak imao više od 520 bajtova. Tada pada cela skripta i trošenje ne prolazi.

Šta OP_CAT radi na steku

Gornji podatak je na vrhu steka. OP_CAT ga dopisuje iza onog ispod.

Spajanje uspe„grad“ (4 bajta)„Beo“ (3 bajta)OP_CAT„Beograd“ (7 bajtova)Spajanje ne uspe300 bajtova300 bajtovaOP_CAT600 > 520: skripta pada

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

Izvor: BIP 347, „Specification“ (otvara se u novom prozoru), 2023-2026, šta OP_CAT radi i kad ne uspeva. Oba primera su izmišljena; ishod je računat po pravilu iz BIP 347.

Današnja skripta nema opšti način da sastavi podatak od delova, pa ne može da proveri ni stablo heševa, kakvo Bitcoin koristi u svakom bloku (BIP 347). Tu rupu OP_CAT popunjava.

Covenant bi odredio i kuda novac sme dalje

Covenant (pravilo o tome kuda novac sme dalje) je uslov u skripti koji ne pita samo ko troši, nego i kuda novac ide (Bitcoin Optech). Po današnjim pravilima ko ima ključ, šalje novac kud hoće. Covenant bi to mogao da ograniči.

Mala stara metalna kasa sa ručkom, zaključana, na drvenom stolu; za ručku je kanapom vezana prazna kartica sa nacrtanim peščanim satom

Jedan primer iz predloga je vault (trezor sa odloženom isplatom). Ko ti ukrade ključ, danas odmah šalje sve na svoju adresu. Kod trezora skripta dozvoljava samo prenos na izlaz za čekanje, a dalje tek posle dogovorenog roka (Bitcoin Optech). Ako vidiš isplatu koju nisi ti pokrenuo, u tom roku možeš da je zaustaviš. Predlog BIP 347 navodi da je OP_CAT dovoljan za takav trezor (BIP 347).

Još dve upotrebe iz istog spiska:

  • Potpis u stablu (engl. tree signatures), kao multisig sa do 4.294.967.296 javnih ključeva u transakciji manjoj od 1 KB.
  • Kazna za varanje u kanalima za plaćanje, kakve koristi Lightning.

Autori OP_CAT opisuju kao jednostavnu, samostalnu naredbu, u duhu Unixa (BIP 347). Ni zagovornici covenanta ipak ne misle svi da je to najbolji alat. James O'Beirne je 2023. naveo da trezorima sa OP_CAT fale neke osobine koje nudi njegov predlog BIP 345, napravljen baš za trezore (Bitcoin Optech, 1.11.2023).

Zašto ga danas nema

OP_CAT je bio tu od početka. U najstarijem kodu u istoriji projekta, od 30.8.2009, naredba postoji i spaja dva podatka bez ikakve granice veličine (script.cpp).

Izmenom od 15.8.2010. Satoshi Nakamoto je isključio OP_CAT i još 14 naredbi, među njima množenje i deljenje. Ista izmena je najveći podatak u skripti spustila sa 5.000 na 520 bajtova (izmena 4bd188c). Opis izmene glasi samo „misc changes“ (razne izmene) i ne kaže zašto. Program Elements, na kome radi mreža Liquid, ponovo ga je uključio 10.1.2019 (izmena 13e1103), ali Bitcoin nije.

Današnji Bitcoin Core uz tu zabranu navodi oznaku prijavljene ranjivosti, CVE-2010-5137 (interpreter.cpp). Predlog BIP 347 prenosi i priču koja kruži među programerima. OP_CAT je mogao da napravi skriptu kojoj memorija raste eksponencijalno. Podatak od jednog bajta, 40 puta udvostručen i spojen sa sobom, bio bi veći od terabajta. Granica od 5.000 bajtova je to već tada sprečavala, a tapscript danas dozvoljava najviše 520 (BIP 347).

Predlog BIP 347 vraća ga samo u tapscript

Taproot je 2021. doneo adrese sa bc1p. Taproot izlaz može da se potroši ključem ili jednom od skripti koje su u njemu sakrivene (BIP 341). Te skripte se pišu u tapscriptu (skripta Taproot izlaza), malo izmenjenoj verziji skripte (BIP 342).

ŠtaStanje 1.11.2026.
Broj naredbe126 (0x7e)
Najveći spojeni podatak520 bajtova
Na glavnoj mrežiisključen od 15.8.2010.
Status BIP 347Complete, od 1.3.2026.
Gde se isprobavasignet

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

Tapscript ima brojeve naredbi ostavljene za buduće izmene, OP_SUCCESS. Skripta sa takvom naredbom danas prolazi bez ikakve provere, pa je niko ne koristi. Takva skripta pre izmene pravila vodi u gubitak novca, upozorava BIP 342.

Soft fork može takvoj naredbi da da značenje. Skripta koja je dotle uvek prolazila tada prolazi samo kad je naredba zadovoljena, a to je pooštravanje pravila. Slično je SegWit ostavio mesto za Taproot, kako piše u tekstu SegWit nadogradnja.

Predlog BIP 347, čiji su autori Ethan Heilman i Armin Sabouri, daje OP_CAT baš takvoj naredbi, broju 126 (0x7e). To je isti broj koji je OP_CAT imao pre 2010. U starijim skriptama OP_CAT ostaje isključen. Spojeni podatak ne sme da pređe 520 bajtova, granicu koja u tapscriptu već važi za svaki podatak (BIP 342). Kada i kako bi se predlog aktivirao, BIP 347 ne određuje.

Zašto su drugi oprezni

Ista moć koju zagovornici hvale druge brine. Naredba koja se lako kombinuje sa drugima može da omogući upotrebe koje danas niko ne predviđa, a pravilo jednom uvedeno u Bitcoin teško se vraća.

Najviše se raspravlja o rekurzivnom covenantu (pravilu koje prelazi na svaki sledeći izlaz). Takav uslov bi pratio novac kroz svako sledeće trošenje. Shinobi je 2022. na mejling listi programera upozorio da bi tako neko moćan, recimo država, mogao da traži da ljudi primaju samo novac koji ona kasnije može da oduzme. Drugi su odgovorili da se ta sloboda gubi i bez toga, prelaskom na drugi lanac sa istim uslovom (Bitcoin Optech, 9.3.2022).

Jeremy Rubin je iste godine nabrojao zabrinutosti koje je čuo. Jedna je MEV (engl. miner extractable value), zarada koju rudar izvlači biranjem i redosledom transakcija. Rekurzivni covenant bi mogao da je poveća daleko iznad onoga što daje obično slaganje bloka po naknadi (Bitcoin Optech, 25.5.2022). Kako rudar danas slaže blok, piše u tekstu Šta je mempool?

Da li sam OP_CAT omogućava rekurzivni covenant, programeri ni tada nisu bili jednoglasni (Bitcoin Optech, 18.5.2022).

Bitcoin pravila menja retko i polako, jer ih proverava svaki čvor i jer greška u pravilima može da košta sve korisnike. Zašto se pravila menjaju soft forkom, objašnjava tekst Soft fork i hard fork. Mi mislimo da je ta sporost prednost, a ne mana.

Predlog je završen, ali nije aktivan

Na glavnoj mreži OP_CAT je isključen kao i 2010. Bitcoin Core ga u starim skriptama i dalje odbija (interpreter.cpp), a u tapscriptu je broj 126 i dalje jedna od naredbi OP_SUCCESS (script.cpp). Predlog izmene programa (#29247) otvoren je od januara 2024. i nije prihvaćen.

OP_CAT se isprobava na signetu, probnoj mreži na kojoj blokove potpisuje unapred određen potpisnik, pa novac na njoj ništa ne vredi (BIP 325). Program Bitcoin Inquisition, napravljen za probu predloga na signetu, aktivirao je OP_CAT u izdanju 27.0 od 18.5.2024. (izdanje 27.0).

Autori su 1.3.2026. predlogu dali status Complete (završen). Po pravilima za BIP-ove to znači da su završili rad i preporučuju usvajanje. Status Deployed (u upotrebi) soft fork dobija tek kad su na mreži ispunjeni uslovi za aktivaciju (BIP 3).

OP_CAT kroz vreme

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

  1. OP_CAT u prvom kodukod Bitcoina

    U najstarijem kodu u istoriji projekta OP_CAT spaja dva podatka, bez granice veličine.

  2. Izmena „misc changes“kod Bitcoina

    OP_CAT i još 14 naredbi isključeni. Najveći podatak spušten na 520 bajtova.

  3. Predlog na mejling listipredlog

    Ethan Heilman predlaže da se OP_CAT vrati u tapscript.

  4. BIP 347predlog

    Predlog sa brojem 347 (dobio ga je 24.4.2024) ulazi u spisak BIP-ova.

  5. Bitcoin Inquisition 27.0probna mreža

    OP_CAT aktiviran na signetu, probnoj mreži čiji novac ništa ne vredi.

  6. Status Completepredlog

    Autori su završili rad i preporučuju usvajanje. To nije aktivacija.

  7. Glavna mrežastanje

    OP_CAT nije aktivan. Bitcoin Core ga u starim skriptama odbija, a izmena #29247 nije prihvaćena.

Izvori: bitcoin/bitcoin, prvi commit, script.cpp (otvara se u novom prozoru), 30.8.2009, OP_CAT u prvom kodu; bitcoin/bitcoin, izmena 4bd188c (otvara se u novom prozoru), 15.8.2010, isključene naredbe i granica podatka; BIP 347, zaglavlje „Discussion“ (otvara se u novom prozoru), 1.11.2026, datum predloga; BIP 347, „Changelog“ (otvara se u novom prozoru), 1.11.2026, broj i ulazak u spisak; Bitcoin Inquisition, izdanje 27.0 (otvara se u novom prozoru), 18.5.2024, aktivacija na signetu; BIP 347 i BIP 3 (otvara se u novom prozoru), 1.11.2026, značenje statusa; Bitcoin Core, interpreter.cpp i izmena #29247 (otvara se u novom prozoru), 1.11.2026, stanje na glavnoj mreži.

Da li će OP_CAT biti aktiviran i kada, ne znamo. To zavisi od ljudi koji vode čvorove i od rudara.

Šta to znači za tebe danas

  • U tvom novčaniku se ništa ne menja. Nijedna adresa i nijedna uplata na glavnoj mreži danas ne koristi OP_CAT.
  • Ako se predlog jednom aktivira kao soft fork, stari čvorovi i novčanici rade i dalje. Nove mogućnosti koristi samo onaj ko ih izabere.
  • Ko vodi svoj čvor, sam bira koja pravila proverava.

Šta iz ovoga sledi za tebe

Ključne lekcije:

  • OP_CAT spaja dva podatka u jedan. Mala naredba, ali skripti daje alat koji danas nema.
  • Isključen je 2010. Opis izmene ne kaže zašto, a granica od 520 bajtova danas sprečava rast memorije zbog koga je, po priči među programerima, isključen.
  • BIP 347 ga vraća samo u tapscript. Predlog je završen, ali na glavnoj mreži nije aktivan.
  • Zagovornici vide trezore, oprezni rizike koji se ne vide unapred. Po nama oba stava imaju osnovu.

Šta dalje?

Ovim tekstom se završava deo staze o tehnologiji i protokolu. Sledeći deo je o sigurnosti i privatnosti, a počinje tekstom Passphrase: dodatna lozinka uz frazu za oporavak, o dodatnoj zaštiti fraze za oporavak.

OP_CAT je mala naredba sa velikim mogućnostima. Da li će ih Bitcoin dobiti, ne odlučuje niko sam.

  1. OP_CAT: mala naredba sa velikim mogućnostima

Tekst 10 od 23

Napredne teme