Najbolji vodič za korak po korak Bitcoin skripte 1. dio

Cilj ovog vodiča pomoći će vam da razumijete logiku koja stoji iza Bitcoin skripte. Budući da će biti previše za pokriti, vodič će biti podijeljen u dva dijela.

Bitcoin je stvoren samo za jednu svrhu … transakcije. Bitcoin je mogao pokazati svijetu da sustav plaćanja može postojati na decentraliziranom peer-to-peer sustavu. Međutim, što se događa iza kulisa tih transakcija? Iza svake male transakcije stoji neki kôd koji radi u pozadini. Ovaj kod je Bitcoin skriptni jezik ili ukratko samo Bitcoin skripta.

Najbolji vodič za Bitcoin skripte

Uvod u Bitcoin skriptu

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Skripta je Turingov nepotpuni jezik sličan Forthu, temeljen na hrpi, obrnuto polirani. Da, to zvuči vrlo komplicirano, ali stvarno nije. Krenimo kroz svaki pojam obrnuto.

Turingov nepotpun

Nepotpuni jezik Turinga imat će ograničenu funkcionalnost i neće moći skakati i / ili petljati. Stoga ne mogu ući u beskrajnu petlju. Biti Turing Complete znači da će, s obzirom na resurse i memoriju, Turing Complete program moći riješiti bilo koji problem. Solidnost je primjer Turingova cjelovitog jezika.

Pa zašto bitcoin skripta Turinga nije potpuna?

Jer to ne treba biti. Bitcoin Script ne treba biti tako kompliciran kao pametni ugovor Ethereuma. Dapače, da je skripta Turing Complete, dala bi zlonamjernim stranama slobodu stvaranja kompliciranih transakcija i pojesti brzinu raspršivanja Bitcoin mreže i usporiti cijeli sustav.

Obrnuti poljski

Obrnuta poljska notacija je sustav u kojem operatori slijede operande.

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Značenje:

  • 3 + 4 pojavit će se kao 34+.
  • Dakle, za duže složenije iznose:
  • 5 * 3 + 4 prikazat će se kao 534 + *.

Na temelju stoga

Stogovi su jedna od najpopularnijih podatkovnih struktura. Prema Wikibooks, o njima se logično može razmišljati kao o linearnoj strukturi koju predstavlja stvarni fizički stog ili hrpa, strukturi u kojoj se umetanje i brisanje predmeta odvija na jednom kraju koji se naziva vrhom stoga.

Osnovna ideja stoga je LIFO ili Last In First Out. Razmotrite sljedeću hrpu knjiga:

Najbolji vodič za Bitcoin skripte

Koja je prva knjiga stavljena na ovaj stog? Vuk samotnjak & Cub zar ne? Koja je bila zadnja knjiga? Mjesečevi vrtovi.

Kad bi netko izvadio knjigu iz ove hrpe, Lone Wolf & Cub neće biti knjiga koju ćete prvo izvaditi, Mjesečevi vrtovi će biti prva koju ćete izvaditi.

Dakle, Last In First Out.

Posljednja knjiga koja se našla na ovoj hrpi slogova bit će prva izvađena knjiga.

Sada postoje dvije operacije slaganja koje morate znati o:

  • Gurnuti.
  • Pop.

Gurnuti: Čin dodavanja stvari u hrpu naziva se guranje.

Pop: Čin uklanjanja stvari iz hrpe naziva se iskakanje. Kao što je već spomenuto, zadnji element koji je gurnut u hrpu prvo iskoči.

Najbolji vodič za Bitcoin skripte

Zasluga za sliku: Wikimedia

Četvrtasto

Ovaj je prilično izravan. Bitcoin Script nalikuje programskom jeziku “Forth” koji se također temelji na stogu.

Dakle, sada barem znamo što je skripta, hajde da shvatimo kako transakcije rade.

Kako funkcioniraju transakcije u Bitcoin-u?

Prije nego što nastavimo, uzvikujte profesora Donalda J Pattersona i njegov Youtube kanal “djp3” za objašnjenje.

Pretpostavimo da Alice želi poslati određeni broj bitcoin-a Bobu. Kako funkcionira sustav transakcija u bitcoinima? transakcije s bitcoinima vrlo se razlikuju od transakcija s Fiat novčanikom. Ako bi Alice dala 2 dolara Bobu, fizički bi uzela 2 dolara iz novčanika i dala ih Bobu. Međutim, stvari ne rade tako u bitcoinu. Fizički ne posjedujete nijedan bitcoin, ono što imate dokaz je da imate Bitcoin.

Trebate znati još dvije stvari:

  • Rudari potvrđuju vaše transakcije stavljanjem podataka u mine koje su blokirali. U zamjenu za pružanje ove usluge naplaćuju transakcijsku naknadu.
  • Što se tiče valute FIAT, zapravo ne pratite kako i odakle vam ta posebna bilješka. Npr. Odmah otvorite novčanik i iz njega izvadite sve novčanice i kovanice. Možete li reći odakle ste točno uzeli svaku pojedinu novčanicu i novčić? Šanse su da nemate. Međutim, u bitcoinu se uzima u obzir povijest svake pojedine bitcoin transakcije.

Ok, sada ćemo duboko zaroniti u to kako se odvija bitcoin transakcija između Alice i Boba. Postoje dvije strane transakcije, ulaz i izlaz. Cijela ova Transakcija imat će ime koje ćemo shvatiti na kraju. Za sada, pogledajmo dinamiku.

Unos transakcije

Da bi se ta transakcija dogodila, Alice mora dobiti bitcoin koji je dobila od raznih prethodnih transakcija. Zapamtite, kao što smo već rekli, u bitcoinima se svaki novčić knjiži kroz povijest transakcija.

Dakle, pretpostavimo da Alice treba povući bitcoin iz sljedećih transakcija koje ćemo nazvati TX (0), TX (1) i TX (2). Te će se tri transakcije zbrojiti i to će vam dati ulaznu transakciju koju ćemo nazvati TX (ulaz).

Dijagramski će izgledati ovako:

Najbolji vodič za Bitcoin skripte

Dakle, to je to s ulazne strane, provjerimo kako će izgledati izlazna strana.

Izlaz transakcije

Izlaz će u osnovi imati broj bitcoin-a koje će Bob posjedovati, nakon transakcije i sve preostale promjene koja je preostala, a koja se zatim vraća natrag Alice. Ta promjena tada postaje njezina ulazna vrijednost za sve buduće transakcije.

Slikovni prikaz izlazne strane izgleda ovako:

Najbolji vodič za Bitcoin skripte

Ovo je vrlo jednostavna transakcija koja ima samo jedan izlaz (osim PROMJENE), postoje transakcije koje su moguće s više izlaza.

Ovako izgleda osnovni izgled transakcije. Međutim, da bi cijela ova stvar prošla, moraju se ispuniti određeni uvjeti.

Uvjeti transakcije

  • TX (ulaz) > TX (izlaz). Ulazna transakcija mora uvijek biti veća od izlazne transakcije. U bilo kojoj transakciji, deficit između ulaza i izlaza (izlaz + promjena) su naknade za transakcije koje rudari naplaćuju. Tako:

    Naknade za transakcije = TX (ulaz) – (TX (izlaz) + promjena).

  • Na ulaznoj strani:

    TX (0) + TX (1) + TX (2) = TX (ulaz).

    Ako Alice nema sredstava potrebna za obavljanje transakcija, tada će rudari transakcije jednostavno odbiti.

  • Bob će morati pokazati da može pružiti dokaz potreban za dobivanje bitcoina. Alice će zaključati transakcije s Bobovom javnom adresom. Morat će predočiti svoj privatni ključ da bi otključao transakcije i dobio pristup svojim naknadama.
  • Alice također mora provjeriti ima li uopće potrebna prava za slanje bitcoina. Način na koji to čini potpisivanjem transakcije svojim digitalnim potpisom (poznat i kao njezin privatni ključ). Svatko to može dekodirati pomoću njezinog javnog ključa i provjeriti je li doista podatke poslala Alice. Taj se dokaz naziva „Podaci o potpisu“. Zapamtite ovo jer će to kasnije biti vrlo važno.

Dakle, kako će se zvati cijela ova transakcija?

Ulaz (uključujući podatke o potpisu) i izlazni podaci zbrajaju se i raspršuju pomoću algoritma za raspršivanje SHA 256. Izlazno hash je ime koje se daje ovoj transakciji.

Dakle, sada ćemo pogledati iza kulisa i vidjeti kako transakcija zapravo izgleda.

Transakcija skripte bitcoina: iza kulisa

Tako izgleda transakcija u obliku koda.

Pretpostavimo da Alice želi poslati 0,0015 BTC Bobu i da bi to učinila, ona šalje unose koji vrijede 0,0015770 BTC. Ovako izgleda detalj transakcije:

Najbolji vodič za Bitcoin skripte

Ljubaznošću slike: djp3 youtube kanal.

Prvi redak koji vidite:

Najbolji vodič za Bitcoin skripte

Je li naziv Transakcije zvan heš ulazne i izlazne vrijednosti.

Vin_sz je broj ulaznih podataka jer Alice šalje podatke koristeći samo jednu od svojih prethodnih transakcija, to je 1.

Vout_sz je 2 jer su jedini izlazi Bob i promjena.

Ovo su ulazni podaci:

Najbolji vodič za Bitcoin skripte

Vidite li ulazne podatke? Alice koristi samo jednu ulaznu transakciju (u primjeru koji smo naveli gore, to će biti TX (0)), to je razlog zašto je vin_sz bio 1.

Ispod ulaznih podataka nalaze se njezini podaci o potpisu.

Ispod svega ovoga nalaze se izlazni podaci:

Najbolji vodič za Bitcoin skripte

Prvi dio podataka označava da Bob dobiva 0,0015 BTC.

Drugi dio označava da je 0,00005120 BTC ono što Alice vraća kao promjenu.

Sad, sjetite se da su ulazni podaci iznosili 0,0015770 BTC? To je veće od (0,0015 + 0,00005120). Deficit ove dvije vrijednosti je naknada za transakciju koju rudari ubiru.

Bliži pogled na izlazne transakcije

Kao što smo vidjeli gore, svaki se ulaz u transakciji pretvara u izlaze, neki od tih izlaza se troše, dok se neki ne troše i postaju promjene. Ova promjena je također poznata kao UTXO ili Nepotrošeni izlaz transakcije. UTXO nastavlja postati ulazni podaci za buduće transakcije.

Svaki izlaz transakcije sastoji se od dva dijela:

  • Vrijednost tog izlaza.
  • Kriptografska slagalica koja je nazvala skriptu zaključavanja ili skriptu svjedoka ili scriptPubKey. Zagonetku treba otključati kako biste potrošili novac. Ova je slagalica kodirana pomoću jezika bitcoin Script.

Dakle, ispitajmo izlaze transakcije kako bismo identificirali gore spomenute dijelove u njoj. Šifra preuzeta od Andreasa M. Antonopoulosa. “Ovladavanje bitcoinom.”

“Vout": [

{

"vrijednost": 0,01500000,

"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"

},

{

"vrijednost": 0,08450000,

"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",

}

]

U redu, dakle imamo dva izlaza u gore navedenom kodu.

Jedan izlaz ima vrijednost 0,015 BTC, dok drugi ima vrijednost 0,0845 BTC. Da bi se otključala vrijednost 0,015, skripta zaključavanja koju treba otključati ide ovako:

“ScriptPubKey”: “OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG”

Još bliži pogled na transakcijske ulaze

Pogledajmo sada drugu stranu medalje, ulaze u transakcije.

Da bi izvršio unos, novčanik korisnika prolazi kroz svoje UTXO-ove i odabire one koji imaju dovoljnu vrijednost za prolazak transakcije.

Npr. ako Alice želi poslati 0,15 BTC Bobu i ovdje UTXO set izgleda ovako:

  • UTXO A = 0,09 BTC
  • UTXO B = 0,2 BTC
  • UTXO C = 0,005 BTC

Koji će UTXO-ovi biti izabrani za ovu transakciju? To je točno, odabrat će se A i B, a sve što ostane postat će UTXO za sljedeću Aliceinu transakciju.

Sada, pogledajmo ulazni kod.

“Vin": [

{

"tksid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",

"vout": 0,

"skriptaSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 [ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",

"slijed": 4294967295

}

]

Pogledajmo što uključuje svaki dio ulazne skripte:

  • tksid: ID transakcije odnosi se na transakciju iz koje je generiran ovaj UTXO. To pomaže u evidentiranju transakcije
  • vout: Ovo se odnosi na to koji se izlaz te transakcije koristi. Npr. ako je ta transakcija imala dva UTXO-a, prvi će biti označen s 0 (jer kao što smo već vidjeli, brojanje počinje od 0, a ne od 1), a drugi s oznakom 1. U ovom slučaju koristimo prvi UTXO, tj .UTXO 0.
  • skriptaSig: Kao što smo već spomenuli, svaki UTXO sadrži skriptu zaključavanja. ScriptSig uključuje podatke potrebne za otključavanje podataka.
  • slijed: Uključeno je da pomogne ljudima da ažuriraju svoje transakcije prije nego što se potvrde i finaliziraju u bloku, nije baš toliko relevantno da bi se razumjelo osnove.

Serijalizacija transakcija

Ajmo sada to zajedno spojiti i vidjeti što imamo. Kada se transakcija prenosi putem mreže, ona se serializira. Kako kaže Andreas Antonopoulos,

“Serijalizacija je postupak pretvaranja unutarnjeg predstavljanja podatkovne strukture u format koji se može prenositi po jedan bajt, također poznat kao tok bajtova.”

U prethodna dva odjeljka vidjeli smo jednostavnu transakciju s jednim ulazom i izlazom. ako bismo je serializirali i pohranili u heksadecimalni format, kako bi to izgledalo?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

Da, ovaj autor ovdje nije slučajno udario glavom o tipkovnicu … tako to zapravo i izgleda.

Međutim, nemojte se bojati. Uskoro ćemo to shvatiti. Negdje u tom heksadecimalnom toku imamo ulazne i izlazne podatke. Pronađimo ih oboje!

Izlazna serializacija

Serijalizacija izlaznog dijela transakcije sadrži sljedeće dijelove:

Najbolji vodič za Bitcoin skripte

Zasluga za sliku: Andreas Antonopoulos “Ovladavanje bitcoinom”

E sad, koje podatke o rezultatima zapravo znamo?

  • Dvije su izlazne vrijednosti.
  • Jedna izlazna vrijednost vrijedi 0,015 BTC ili 1 500 000 satošija
  • U heksadecimalnom iznosu od 1.500.000 iznosi 16 e3 60, što kada je kodirano u malo-endianu, tj. Najmanje značajan bajt prva notacija daje 60 e3 16.
  • Duljina scriptPubKey je 25 bajtova, što je 19 u heksadecimalnom obliku.

Dakle, uzmite na znanje ove dijelove podataka, potražimo naše izlazne podatke.

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

Ulazna serializacija

Ulazna serializacija sadrži sljedeće komponente:

Najbolji vodič za Bitcoin skripte

Sad možete li pronaći ulaz njene transakcije?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

U redu, pa što smo do sada vidjeli?

  • Izlazi transakcije i UTXO-ovi.
  • Ulazi transakcije.
  • Kako se cijela transakcija serializira.

Sada znamo da se UTXO mogu koristiti samo ako su otključani. Znamo da ulazne vrijednosti imaju scriptSig koji pomaže u njihovom otključavanju. Kako međusobno komuniciraju?

Prije nego što dođemo do toga, trebali bismo imati ideju kako se proračuni i operacije odvijaju u bitcoin skripti.

Kako funkcionira skripta?

Prije nego što nastavimo sa skriptom, bilo bi korisno razumjeti kako funkcionira sustav obrnutog poliranja zasnovan na hrpi.

Jednostavno dodavanje u sustavu obrnutog poliranja koji se temelji na stogu

Kao što smo već rekli 3 + 4 u obrnutom poliranju izgledat će kao 34+, izvršimo operaciju zbrajanja pomoću snopa.

Najbolji vodič za Bitcoin skripte

Tako se na stogu obavlja jednostavna operacija zbrajanja. Sad kad je to gotovo, kako bi ovo izgledalo da je riječ o skripti?

OP_3 OP_4 OP_ADD

Samo izgled mijenja se, ostatak postupka ostaje isti kao što je prikazano gore. Prefiks “OP_” potpis je skriptnog jezika.

Ako želite temeljni premaz na različitim opkodovima koji se koriste u skripti zatim kliknite ovdje.

Jednostavno dodavanje pomoću Bitcoin skripte uz provjeru

Sada pretpostavimo da želimo napraviti 2 + 3 = 5.

U obrnutom poljskom izgledat će 23 + 5 =.

U zapisu skripte to će izgledati ovako:

OP_2 OP_3 OP_ADD OP_5 OP_EQUAL

Najbolji vodič za Bitcoin skripte Najbolji vodič za Bitcoin skripte

Što bi se dogodilo da smo postfix VERIFY koristili u EQUAL? Znači, umjesto OP_EQUAL koristili smo OP_EQUALVERIFY?

Onog trenutka kada dodate sufiks VERIFY, TRUE ili FALSE, ne stane na stog, već skripta nastavlja izvršavajući ako je TOČNO ili to zaustavlja se izvršavajući ako je LAŽNO.

To se događa kada dodate “VERIFY” u opcode. Imajte ovo na umu za buduće primjere.

U redu, uzmimo posljednji primjer.

Jednostavno kopiranje u skripti

Uzimamo ovaj primjer samo da bismo vas upoznali s izuzetno važnim opcodeom, DUP aka duplikatom.

Idemo, želimo gurnuti broj u hrpu, duplicirati ga i vidjeti jesu li dva broja jednaka ili ne (što će očito i biti).

Koristit ćemo ovu skriptu:

OP_5 OP_DUP OP_EQUALVERIFY

Najbolji vodič za Bitcoin skripte

U redu, sada imate ideju o tome kako se obrađuju izračuni u bitcoin skripti, nastavimo s našim transakcijama i vidimo kako se izvršavaju.

Igra zaključavanja i otključavanja

Transakcije u bitcoinima stalna su igra zaključavanja i otključavanja. UTXO zaključava scriptPubKey dok ulazi transakcije sadrže scriptSig. Ideja scriptPubKey je ponuditi kriptografsku slagalicu koja se može otključati samo putem odgovarajućeg scriptSig.

Dakle, što se točno događa i kako se igra ova igra?

Pretpostavimo, Alice želi poslati Bobu nešto bitcoina. Bobova javna adresa je općepoznata i ona će poslati svoje Bitcoin-ove na Bob-ovu javnu adresu zajedno s uvjetom, Bob mora dokazati da je doista on taj koji dobiva bitcoin.

Vratimo se malo i vratimo se nekim osnovnim konceptima.

Svatko u bitcoinu ima dva ključa:

Javni ključ kriptografski je izveden iz privatnog ključa.

Sada, da bi im se poslao novac, svi moraju imati javnu adresu. Javnost se provodi kroz dva algoritma za raspršivanje, SHA-256 i RIPEMD-160. Razlog zašto to radimo je da osiguramo da imate dodatni sloj zaštite, AKO u slučaju da netko nekako smisli kako generirati vaš privatni ključ pomoću vašeg javnog ključa (što je neizvodljivo).

Bilješka: Javni ključ prvo prolazi kroz SHA-256 da bi dao 256-bitno izlazno raspršivanje, a zatim se to raspršivanje pokreće kroz RIPEMD-160 koji daje 160-bitno izlazno raspršivanje. Dakle, konačni izlaz je 160-bitni hash.

U redu, tako da će Alice poslati novac na Bobovu javnu adresu, uz uvjet da Bob mora pokazati dokaz da je novac doista dobio on..

Dokaz koji Bob koristi za otključavanje sredstava je njegov Digitalni potpis, koji je kriptografski izveden iz njegovog privatnog ključa.

Zamislite transakcije koje Alice šalje Bobu kao zaključanu škrinju, a Bobov potpis kao zaporku.

Vratimo se našoj skripti.

Alice šalje Bobu izlaz koji ima scriptPubKey, koji uključuje Bobovu adresu.

Bob otključava ulaz koristeći svoj potpis scriptSig koji uključuje njegov potpis i njegov javni ključ.

Pa, kako to predstavljamo u kodu?

scriptPubKey = OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

Bilješka: Kako funkcioniraju OP_HASH160 i OP_CHECKSIG, uskoro će vam biti jasno.

scriptSig =

Da bi otključao izlaz i iskoristio svoja sredstva, Bob se spaja ili nekako pridružuje scriptSig i scriptPubKey ovako:

Najbolji vodič za Bitcoin skripte

Kredit za sliku: CryptoCompare

U redu, pogledajmo sada kako skripta funkcionira kako bi siromašnom Bobu omogućila pristup njegovim sredstvima. Skripta trenutno izgleda ovako:

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

Provedba skripte postupka otključavanja / provjere

Ok, pogledajmo sada kako funkcionira skripta cijelog postupka provjere / otključavanja.

Trenutno kod izgleda ovako

Najbolji vodič za Bitcoin skripteNajbolji vodič za Bitcoin skripte

Najbolji vodič za Bitcoin skripte

OP_CHECKSIG iskoči i provjerava valjanost kako bi utvrdio jesu li to valjani potpisi i javne adrese..

Kad se cijeli taj postupak završi, Bob može otključati transakciju i dobiti pristup svojim sredstvima.

Čestitamo! Upravo ste prošli cijelu bitcoin transakciju!

Ovdje vidite najčešći tip bitcoin transakcija: P2PKH aka Hash za javni ključ.

Pa, što je taj misteriozni operater CHECKSIG i kako to radi? Pa, za to moramo pogledati kriptografiju koja stoji iza bitcoina.

Kako djeluje CHECKSIG?

Da bismo znali kako funkcionira CHECKSIG, morat ćemo znati što je digitalni potpis. Digitalni potpis digitalni je kôd (generiran i ovjeren šifriranjem javnim ključem) koji je priložen elektronički prenesenom dokumentu radi provjere njegovog sadržaja i identiteta pošiljatelja.

Algoritam digitalnog potpisa koji koristi bitcoin je ECDSA ili algoritam digitalnog potpisa eliptične krivulje.

Kriptografija eliptične krivulje je ono što bitcoin, ethereum itd. koriste u svoje svrhe šifriranja. Pa, što je eliptična krivulja? Eliptična krivulja je bilo koja krivulja koja zadovoljava sljedeću jednadžbu:

Y ^ 2 = x ^ 3 + sjekira + b

Gdje je (x, y) točka na krivulji, a a i b su konstante.

Postoje beskonačne krivulje koje možete napraviti. Slijedi kako jedna od ovih krivulja općenito izgleda:

Najbolji vodič za bitcoin

Kredit za sliku: CSBreakdown youtube kanal

Koja su svojstva eliptične krivulje?

  • Krivulja je simetrična preko x osi.
  • Svaka linija koja prolazi kroz 2 točke na krivulji presijecat će krivulju na trećoj točki.
  • Bilo koja tangenta na krivulji presijecat će krivulju na još jednoj točki.

Izvođenje matematike na krivulji.

Svojstvo sabiranja krivulje

Pretpostavimo da postoje dvije točke na krivulji V i A. Pratimo one na krivulji i stavimo crtu kroz njih. To će presijecati krivulju na trećoj točki.

Najbolji vodič za Bitcoin skripte

Kredit za sliku: CSBreakdown youtube kanal

Treću točku nazvat ćemo X, a na krivulji ćemo je odraziti ovako:

Najbolji vodič za Bitcoin skripte

Kredit za sliku: CSBreakdown youtube kanal

Odraz X je točka koja će slučajno biti (V + A). Ovo je aditivno svojstvo eliptične krivulje.

Zanimljiva napomena. Ako dodamo dva odsjaja jedni s drugima, ako bismo na gornji grafikon dodali X i V + A, dobit ćemo beskonačnost. Razlog tome je što će linija kroz X i (V + A) presijecati krivulju u beskonačnosti.

Svojstvo množenja krivulje

Sad, što ako želimo dodati sebi broj? Pretpostavimo da imamo točku V, što učiniti da nađemo 2V? Provući ćemo tangentu kroz V i presijecati je u točki grafikona, a zatim pronaći odraz točke na krivulji. Taj odraz bit će 2V.

Najbolji vodič za Bitcoin skripte

Kredit za sliku: CSBreakdown youtube kanal

Ovo je također multiplikativno svojstvo grafa jer nalazimo točke koje su u osnovi množenje cijelog broja sa samom točkom. Sad pretpostavimo da želimo pronaći 3V. Spojit ćemo se s V i 2V, a zatim odraziti točku presjeka, ovako:

Najbolji vodič za Bitcoin skripte

Kredit za sliku: CSBreakdown youtube kanal

Vidite kako točke kruže po grafikonu? To je ono što mu daje sigurnost.

Matematička svojstva eliptične krivulje

Svojstvo # 1: Točke na krivulji tvore abelovsku skupinu

Svojstva abelovske skupine su sljedeća:

  • Imaju identitet.
  • Imaju inverze zvane refleksije.
  • Točke imaju asocijativno značenje za tri točke A, B i C na krivulji: (A + B) + C = A + (B + C).
  • Točke su zatvorene na krivulji.
  • Bodovi su komutativno značenje za dvije točke A i B. A + B = B + A.

Svojstvo # 2: Množenje na krivulji je brzo

Sva množenja izvršena na krivulji mogu se izvršiti vrlo brzo. Pretpostavimo sada da imamo točku P i želimo pronaći 100P. Umjesto da broj dodamo sebi 100 puta, možemo učiniti sljedeće:

  • Dodajte točku P sebi da biste dobili 2P.
  • Dodajte 2P i P da biste dobili 3P.
  • Dodajte sebi 3P da biste dobili 6P.
  • Dodajte sebi 6P da biste dobili 12P.
  • Dodajte 12P sebi da biste dobili 24P.
  • Dodajte 24P i P da biste dobili 25P.
  • Dodajte sebi 25P da biste dobili 50P.
  • Dodajte sebi 50P da biste dobili 100P.

Dakle, umjesto da prođete 99 koraka, cijelu stvar skraćujete na samo 8 koraka.

Svojstvo # 3: Podjela na krivulji je spora

Iako je množenje brzo, dijeljenje je vrlo sporo. Pretpostavimo da imamo Q = nP i želimo pronaći vrijednost n dijeljenjem Q s P. To zapravo ne možemo učiniti. Morat ćemo ručno prolaziti kroz brojeve jedan po jedan da bismo pronašli vrijednost koja zadovoljava jednadžbu. Zbog toga je vrlo sporo. To se naziva diskretni logaritamski problem i to je ono što krivuljama daje funkciju vrata, tj. Lako je pomnožiti n i P da se dobije Q, ali s obzirom na Q i P, nemoguće je dobiti n.

Pa kako provjera potpisa radi na eliptičnim krivuljama?

(Napomena: To se posebno događa u bitcoinima)

Prije nego što vidimo kako postupak funkcionira, provjerimo određene varijable i njihovo značenje koje ćemo koristiti u sljedećim jednadžbama.

Privatni ključ = d.

Poruka = ​​z.

Javni ključ = Q.

G će biti konstantna točka na grafikonu koju će pružiti bitcoin.

“K” je slučajni broj koji će se automatski generirati za svaki jedinstveni potpis.

“N” je još jedna konstanta koju će osigurati bitcoin.

Ok, hajde sada da vidimo kako funkcionira matematika koja stoji iza provjere.

Potpisivanje poruke

Javni ključ Q = dG. (nemoguće je dobiti privatni ključ iz Q i G zbog podjele na neizvedivo).

Sada ćemo pomnožiti G sa slučajnim brojem “k” i zacrtati tu točku na grafikonu. Koordinate te točke su (x, y). tj. (x, y) = kG

Zatim odredimo dvije vrijednosti r i s takve da:

r = x mod n.

s = (z + rd) k ^ -1 mod n

Razlog zašto generiramo r i s je taj što su to koordinate našeg potpisa.

Dakle, šaljemo točku (r, s) na provjeru.

Provjera poruke

Verifikatori će provesti jednostavnu jednadžbu:

z * s ^ -1 * G + r * s ^ -1 * Q

Vrijednost ove jednadžbe dat će nam točku (x, y).

Sada verifikatori mogu jednostavno usporediti x koordinate. Nemaju koordinatu x koju im je izravno dao pošiljatelj, ALI imaju vrijednosti r i n.

I kao što već znamo da je r = x mod n, a oni tada mogu jednostavno riješiti x.

Ako se vrijednosti x podudaraju, to znači da je potpis ovjeren!

Bonus: Dublji pogled u matematiku

Provjerimo jednadžbu koju će verifikatori morati još jednom učiniti:

Korak 1: z * s ^ -1 * G + r * s ^ -1 * Q

Znamo da je Q = d * G, jednostavno zamijenimo vrijednost.

Korak 2: z * s ^ -1 * g + r * s ^ -1 * d * G

Možemo uzeti (z + r * d) zajedničko

3. korak: (z + r * d) * s ^ -1 * G

Sad zapamtite, već smo utvrdili da je s = (z + r * d) * k ^ -1 mod n, ovdje zamijenimo vrijednosti:

Korak 4: (z + r * d) * (z + r * d) ^ – 1 * k * G

(Z + r * d) * (z + r * d) ^ – 1 međusobno se poništavaju i preostaje nam:

Korak 5: k * G što je koordinata (x, y) koju je pošiljatelj izvorno poslao.

Što bi moglo poći po zlu u eliptičnim krivuljama?

Iako se podrazumijeva da su eliptične krivulje najbolji način kriptografije, ostaje činjenica da još uvijek ima malo ranjivosti:

  • Što ako je izabrana pogrešna krivulja? Ako krivulja ima petlju u sebi, postoji mogućnost da je 1001P = P za bilo koju točku P na krivulji.
  • Može se odabrati slaba krivulja u koju se može probiti.

Ima svojih slabosti, ali su prilično upravljive.

KRAJ 1. DIJELA

Ovdje ćemo završiti 1. dio našeg vodiča za Bitcoin skripte. U drugom dijelu ćemo obraditi:

  • Transakcije s više potpisa.
  • Platite na skriptu Hash.
  • Kontrola protoka.
  • Timelocks.

Pratite nas za sljedeći dio!

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map