Nakon što primatelj dobije bitcoine od pošiljatelja,
kako se konstruira transakcija koja te bitcoine troši (šalje novom
primatelju)?
Postupak konstruiranja nove transakcije sastoji se od
više koraka i bit će prikazan u hex(string) formatu.
1. Verzija
Svaka bitcoin transakcija ima verziju. Verzija je
uvijek "01". Polje u koje se zapisuje transakcija veličine
je četiri bajta te se verzija zapisuje u little-endian formatu
"01000000".
Hex: "01000000"
2. Broj ulaza
Nakon verzije dolazi broj i lista ulaza koje
transakcija ima. Ulazi se referenciraju na izlaze prethodnih
transakcija koje su poslane tom korisniku. Broj ulaza je cijeli broj
varijabilne duljine (tzv. var_int), a najčešće zauzima jedan bajt.
Za transakciju s jednim ulazom taj broj je "01".
Hex: "01000000
01"
3. Indeks prethodne transakcije
Sada slijedi lista ulaza. Svaki ulaz u transakciju sastoji se od četiri dijela: indeks transakcije čiji se izlaz (odnosno bitcoini vezani uz taj izlaz) želi potrošiti, indeksa izlaza, potpisa te oznake niza (sequence). Indeks transakcije je zapravo dvostruki SHA256 hash prethodne transakcije. To je polje veličine 32 bajta te se zapisuje u little-endian formatu. Npr. takav hash može izgledati ovako
"eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2"
Hex: "01000000
01
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2"
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2"
4. Indeks izlaza prethodne transakcije
Druga komponenta ulaza u transakciju, nakon indeksa
prethodne transakcije, je indeks izlaza prethodne transakcije koji se
želi potrošiti. Budući da transakcija može imati više od jednog
izlaza, potrebno je označiti koji se točno od tih izlaza želi
potrošiti. To je polje veličine četiri bajta te se zapisuje u
little-endian formatu. Ako se radi o izlazu "01" to je
"01000000".
Hex: "01000000
01
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2
01000000
"5. Polje scriptSig
Polje scriptSig u svakom ulazu dokazuje da primatelj
ima pravo trošenja izlaza iz prethodne transakcije koji
referenciraju goreopisani indeks prethodne transakcije i indeks
izlaza. To polje sadrži potpis ove transakcije i javni ključ na
koji su bitcoini poslani (iz kojeg je izvedena bitcoin adresa na koju
su bitcoini poslani). Budući da je transakcija tek u nastajanju,
umjesto potpisa transakcije, privremeno se kopira sadržaj polja
scripPubKey.
Polje je varijabilne duljine i zapisano je u var_string
big-endian formatu. Sadrži duljinu skripte u bajtovima te samu
skriptu.
Hex: "01000000
01
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2
01000000
76a914010966776006953d5567439e5e39f86a0d273bee88ac
"6. Oznaka niza (sequence)
Ovo polje uvijek ima maksimalnu vrijednost budući da
se nikada nije koristilo onako kako je originalno bilo zamišljeno.
Duljine je četiri bajta te se zapisauje u little-endian formatu. U
budućnosti će se to polje koristiti za vremenski zaključane
transakcije.
Hex: "01000000
01
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2
01000000
76a914010966776006953d5567439e5e39f86a0d273bee88ac
ffffffff
"7. Broj izlaza
Osim broja ulaza, transakcija sadrži i broj izlaza.
Izlazi sadrže adrese i bitcoine koji se na njih šalju. Kao i broj
ulaza, broj je izlaza cijeli broj varijabilne duljine (tzv. var_int),
a najčešće zauzima jedan bajt. Za transakciju s jednim izlazom taj
broj je "01".
Hex: "01000000
01
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2
01000000
76a914010966776006953d5567439e5e39f86a0d273bee88ac
ffffffff
01"
8. Iznosi
Iznosi vezani uz pojedini izlaz zapisuju se u satoshijima. Polje je veličine osam bajtova te se prikazuje u little-endian formatu. Za iznos od 0.999 BTC, odnosno 99900000 satoshija to je 605af40500000000
.
Hex: "01000000
01
eccf7e3034189b851985d871f91384b8ee357cd47c3024736e5676eb2debb3f2
01000000
76a914010966776006953d5567439e5e39f86a0d273bee88ac
ffffffff
01
605af40500000000"
605af40500000000"
No comments:
Post a Comment