- Objavljeno datuma
Bitcoin script: uvod i osnove
- Autori
- Ime
- Vladimir Stevic
- X
Uvod
Ranije smo vidjeli primjer Bitcoin transakcije u članku. Ono što možemo da zaključimo jeste da osnovu transakcije čine inputs i outputs ili ulazna i izlazna sredstva. Ovdje ćemo pokušati napraviti korak dalje, te objasniti na koji način korisnik koji šalje transakciju zaključava izlazna sredstva onome kome šalje. Uz to dodatno i objasniti na koji način korisnik otključava input-e ili ulazna sredstva.
Prije sve pogledajmo primjer u kome Nikola želi poslati 15 evra Jovani:
- Nikola šalje novčanice od 10 i 20 evra Jovani.
- Pored ovoga Nikola definiše da 15 evra ide Jovani, a 5 evra čini kusur koji se vraća njemu.
- Novčanice 10 i 20 evra su ulazna sredstva ili input-i.
- Novčanice 15 evra i 5 evra su izlazna sredstva ili output-i
Imajmo na umu da su 10 i 20 evra takođe u jednom trenutku bili output-i, ove dvije novčanice je poslala Marija prije 10 dana Nikoli:
- Marija šalje Nikoli 50 evra (input), Marija definiše da 10 i 15 evra (outputs) ide Nikoli, a 25 evra (output) je kusur koji se njoj vraća.
Sada se vraćamo na početnu transakciju, kada je Nikola poslao 10 i 15 evra Jovani, on je morao da priloži za te input-e potpis (scriptSig - signature - unlocking script) da dokaže da su njegovi. Sa druge strane, onih 15 evra koje definiše da idu Jovani zaključava (scriptPubKey) definišući da su oni zaključani samo za Jovanin javni ključ. Sada Jovana kada odluči da potroši ovih 15 evra, moraće da priloži potpis (scriptSig - signature - unlocking script) da dokaže da su njeni.
Da zaključimo - inpute koje koristimo moramo otključati da dokažemo da imamo pravo na njih, outpute koje šaljemo moramo zaključati da bi samo osoba kojoj šaljemo mogla u budućnosti da ih otključa.
Bitcoin Script
Sada već možemo reći da sistem funkcioniše na principu šaljem ovo zaključano, da samo ti možeš otključati. Kako? Uz pomoć bitcoin script - jednostavan programski jezik koji radi na stack principu.
Skripte za zaključavanje se sastoje iz dvije stvari: podatak i operacija (OP CODE). Skripte za otključavanje sadrže podatke. Ovo zajedno se izvršava tako što se kreće od skripte za otključavanje pa ka kraju skripte za zaključavanje. Podaci se guraju u stack, dok se operacije onda izvršavaju jedna po jedna.
Pogledajmo u primjeru: imamo skriptu za kojom je zaključan output koji smo primili sa locking script-om: [ADD, 7, OP_EQUAL]. Kada želimo ovaj output iskoristiti kao input i poslati nekome, mi prilažemo unlocking script: [3, 4].
Pokušajmo izvršiti ovo, unlocking stavljamo na početak [3, 4], zatim locking skriptu [OP_ADD, 7, OP_EQUAL] pa sada imamo skriptu i prazan stack za izvršavanje:
Skripta [3, 4], [OP_ADD, 7, OP_EQUAL]
Stack []
- Prva vrijednost nam je 3 što je prost podatak, te ga guramo u stack pa dobijamo:
Skripta [4], [OP_ADD, 7, OP_EQUAL]
Stack [3]
- Zatim vidimo 4, takođe prost podatak, guramo i njega u stack:
Skripta [OP_ADD, 7, OP_EQUAL]
Stack [3, 4]
- Sada imamo operaciju ADD, koja radi slijedeće: uzima dvije stvari iz stack-a, u našem slučaju 3 i 4, te ih sabira i vraća u stack:
Skripta [7, OP_EQUAL]
Stack [7]
- Slijedeće u našoj skripti je broj 7, ponovo prost podatak i njega samo guramo opet u stack:
Skripta [OP_EQUAL]
Stack [7, 7]
- Posljednja operacija je OP_EQUAL, koja uzima dvije vrijednosti iz stack-a, što je 7 i 7, te provjerava jesu li jednake - 7 = 7
Skripta []
Stack [1]
- Ako je uslov ispunjen u stack se vraća vrijednost 1 (true) što znači da smo uspješno otključali sredstva.
Za kraj
Skripte mogu biti različite, što znači da postoji više načina da zaključamo sredstva kada ih šaljemo nekome. Neke od osnovnih su P2PK, P2HPK, P2MS i P2SH. Više o njima u ovdje.