Ethereum White Paper, Objasnio. 1. dio

U sljedećim blogovima objavit ćemo bijelu knjigu Ethereuma opisujući je laičkim izrazima. Kako je rad predug da bi se mogao uklopiti u jedan blog, podijelit ćemo ga u nekoliko odjeljaka. Pokušat ćemo objasniti detalje o niši u bijelom papiru Ethereuma na najjednostavnije moguće načine.

Uvod i postojeći pojmovi

Svi znamo da je Satoshi Nakamoto razvoj bitcoina stvorio monumentalnu tehnologiju poznatu kao - Blockchain. Nadamo se da već znate što je Blockchain tehnologija zahvaljujući našim prethodnim postovima.

Postoje brojne druge aplikacije za Blockchain tehnologiju, od kojih neke uključuju: obojene kovanice, pametno vlasništvo, namecoin, pametne ugovore ili DAO (decentralizirane autonomne organizacije). Te su aplikacije složene za izgradnju na vrhu Bitcoin blockchaina. Da bi se riješio ovaj problem, Ethereum predlaže Turingov programski jezik koji se može koristiti za stvaranje pametnih ugovora ili za kodiranje kompliciranih funkcija. Turingov cjelovit jezik u osnovi se može koristiti za simulaciju Turingovog stroja. Turingov stroj je model koji može simulirati bilo koji računalni algoritam bez obzira na složenost.

Zaklada Ethereum predlaže da se sve gore navedeno bez napora postigne u nekoliko redaka koda. Ovu tvrdnju ćemo dalje potvrditi u ovom blogu i budućim postovima.

Povijest

Digitalne valute kao koncept prevladavaju već desetljećima. U 80-im i 90-ima koristila se kriptografska tehnika zvana Chaumian Blind. Međutim, oslanjali su se na centraliziranog posrednika, što je bio očigledno kršenje ugovora. Zatim je došao B-novac koji je predložio decentralizirani sustav konsenzusa, ali kako bi se to postiglo bilo je diskutabilno. Nakon toga Hal Finney je predložio dokaze o radu za višekratnu upotrebu koji su se, u kombinaciji s konceptom B-novca, u početku činili obećavajućim, ali pokušaji da se primijeni takvo rješenje nisu bili uspješni.

Satoshi Nakamoto je spojio sve te koncepte zajedno s drugim etabliranim primitivnim tehnologijama upravljanja vlasništvom pomoću tehnika kriptografije. Algoritem konsenzusa koji Blockchain Bitcoin koristi za praćenje kovanica naziva se dokazom rada.

Dokaz mehanizma konsenzusa o radu bio je veliki proboj u ovom području jer je riješio dva glavna problema.

  1. Čvorovi u mreži sada bi se lako mogli dogovoriti o korištenju algoritma konsenzusa za unošenje transakcija u distribuiranoj knjizi.
  2. Problem tko može odlučiti o ulasku u distribuiranu knjigu riješen je korištenjem računalne snage koju je svaki čvor spreman potrošiti.

Za rudare to u suštini znači - Više računarske snage = Više miniranih blokova = Više kripto nagrada.

Drugi koncept koji se zove dokaz udjela izračunava težinu čvora u procesu glasovanja na temelju broja novčića koji posjeduje, a ne samo računskih resursa.

Državni tranzicijski sustavi

Glavna knjiga bilo koje kripto valute u osnovi je sustav tranzicije stanja koji u bilo kojem trenutku sadrži podatke o tome koliko ima novca u pojedinim novčanicima i transakcijama koje obavljaju te novčanike.

Na donjem dijagramu postoje tri glavna bloka koja treba razmotriti

Stanje - sastoji se od svih podataka o vlasništvu koji se nalaze u knjizi koja je kriptografski šifrirana.

Transakcija - Transakcijski blok definira količinu prijenosa koji se pokreće u sustavu. Sadrži i potpis koji je definirao pošiljatelj.

Država "- ovo se stanje sastoji od konačnih podataka o vlasništvu koji su raspoređeni po svim čvorovima. Ova država će tada djelovati kao država u sljedećoj transakciji.

U tradicionalnom okruženju fiat bankarstva, države su pojedinačne bilance, a kada se novac šalje od točke A do točke B, ažuriraju se njihovi pojedinačni zapisi.

Očito je da pomoću tradicionalnih banaka ne možemo poslati više novca nego što imamo na našim računima, ovdje je primijenjena slična logika koja je definirana sljedećom funkcijom.

PRIJAVITE (S, TX) -> S 'ili GREŠITE

Da bismo to ilustrirali u kontekstu bankarskog primjera, možemo to prevesti u sljedeći izraz.

Crypto

PRIJAVI (S, TX) -> S '

BANKE

PRIJAVITE SE ({Alice: 50 USD, Bob: 50 USD), "pošaljite 20 dolara iz Alice u Bob") = {Alice: 30 USD, Bob: 70 dolara}

Ovdje je S početno stanje u kojem i Alice i Bob imaju 50 dolara na svojim računima.

TX je transakcija koja definira "slanje 20 dolara iz Alice u Bob"

S ’je konačno stanje koje odražava ažurirane bilance Alice i Boba

Prije nego što prijeđemo na sljedeći scenarij, moramo razumjeti kako se izračunava posjedovanje kovanica na pojedinim računima.

Bitcoin "država" ima kolekciju svih kovanica koje postoje zajedno s javnim ključem njihovog vlasnika. Kolekcija ovih kovanica određena je ukupnim UTXO povezanim s adresom. UTXO su Neiskorišteni izlazi transakcije, koji kao što samo ime kaže vlasnik nije potrošio. Ti se rezultati mjere tako da se za početak provjere jesu li kovanice od prethodnog vlasnika također bile UTXO. To se potvrđuje provjerom UTXO prethodnog vlasnika i uparivanjem kriptografskog potpisa proizvedenog privatnim ključem prethodnog vlasnika.

A sad, analizirajmo što će se dogoditi ako pokušate prodati novčiće koje nemate?

Crypto

PRIJAVI (S, TX) -> GREŠKA

BANKE

PRIJAVITE SE ({Alice: $ 50, Bob: $ 50}, "pošaljite $ 70 iz Alice u Bob") = GREŠKA

1. Provjerite vrijednost spomenutu u TX-u (70 USD)

a. Ako ovu vrijednost ne potvrdi UTXO vlasnika, tada ona nije prisutna na njihovom računu. Vrati pogrešku.

b. Ako se navedeni kriptografski potpis ne podudara s potpisom vlasnika, vratite pogrešku.

2. Ako je zbroj svih UTXO vlasnika manji od broja koja je spomenuta u TX-u, vratite pogrešku.

3. Ako je transakcija valjana, prenesite sredstva primatelju. Ovaj se prijenos događa tako što se od pošiljatelja ukloni ulazni UTXO i doda ga pod adresu javnog ključa primatelja.

Korak 1a sprječava pošiljatelja da šalje novčiće koji ne postoje, a korak 1b sprječava pošiljatelje da šalju kovanice drugih ljudi.

Korak 2 osigurava da postoji dovoljno kovanica s pošiljateljem prije nego što nastavite s transakcijom.

Korak 3 dovršava postupak oduzimanjem vrijednosti od pošiljatelja i dodavanjem ga u novčanik prijemnika.

E sad, ovi bi koraci mogli izgledati lako vizualizirati, ali iza kulisa događa se mnogo toga.

Sljedeći primjer trebao bi vam pomoći da bolje razumijete.

Pretpostavimo da izađete kupiti hrpu banana. Iz nekog nejasnog razloga 1 banana košta 75 dolara. U tradicionalnom postavljanju, kako biste vidjeli možete li si priuštiti ovu dragocjenu precijenjenu bananu, otvorit ćete svoj novčanik i provjeriti stanje. Imate dvije bilješke od po 50 dolara, što ukupno iznosi 100 dolara (50 + 50 = 100, duh!). Ove dvije bilješke mama vam je dala da kupite banane.

Da biste si mogli priuštiti ovu Bananu morate prodati svoje novčanice u iznosu od 50 USD prodavaču banane, a on će vratiti 25 USD koristeći kombinaciju denominacija novčanica u USD. Sada ste ponosni vlasnik ove super skupe Banane. Pravi problem koji je sada pred vama, jeste objasniti majci cijenu 1 banane.

To je razumno jednostavno, a sada pogledajmo što se događa u tipičnoj transakciji s kripto valutama.

Uzmite u obzir da Alice želi poslati 75 BTC-a (da, Alice je prljavo bogata) Bobu. Za nastavak prvo će provjeriti ima li u novčaniku 75 BTC. Da bi to provjerila, ona mora sažeti sve svoje UTXO (unose vrijednosti). Razmotrite ovaj UTXO kao dvije novčanice od 50 USD u prethodnom primjeru. Međutim, Alice ima dvije vrijednosti UTXO u svom novčaniku od po 50 BTC. To znači da je Alice dobila dvije transakcije u svom novčaniku. Svaki UTXO vrijedi 50 BTC-a.

Sada znamo da novčanicu od 100 USD ne možete prerezati na dva dijela i podijeliti u dvije novčanice od 50 USD što bi učinilo da novčanica u iznosu od 100 USD ostane bez vrijednosti. Međutim, u kripto valuti možete izvršiti mikrotransakcije tako da 1 novčić podijelite na deset 0,1 novčića. Ova podjela, međutim, nije jednostavna.

Da bi Bob prenio 75 BTC, Alice će stvoriti transakciju s dva 50 BTC ulaza i iznijeti dva izlaza. Jedan izlaz dat će Bobu, a drugi saldo bit će prebačen natrag u Alicein novčanik.

50BTC + 50BTC → 75BTC do Boba + 25BTC do Alice

U ovom scenariju Bobu nije povjereno vraćanje ravnoteže u usporedbi s prethodnim primjerom. Umjesto da transakcija upravlja povratom preostalog iznosa salda Alice.

Rudarstvo

U idealnom društvu u kojem bismo mogli sa svim transakcijama vjerovati centraliziranom sustavu, ovaj bi korak bio potpuno nepotreban. Ali pokušavamo stvoriti decentralizirani sustav konsenzusa koji bi mogao narušiti monopol banaka nad našim ekonomijama. Iskopavanje je metoda kojom možemo kombinirati sustav tranzicije stanja s sustavom konsenzusa tako da se svi čvorovi u mreži slažu o transakcijama. Te se transakcije kombiniraju i pakiraju u blokove kao što je prikazano na donjoj slici.

Mreža Bitcoin proizvodi 1 blok svakih 10 minuta. Svaki blok ima vremensku oznaku, nonce (proizvoljni broj koji se ne može ponoviti), referencu na prethodni blok naveden kao Prevhash u gornjem dijagramu i popis svih transakcija koje su se dogodile nakon miniranja prethodnog bloka. Ovaj neprekinuti lanac blokova uvijek predstavlja najnovije stanje distribuirane knjige i tako dobiva svoje ime - Blockchain.

Sljedeći koraci provjeravaju valjanost bloka:

  1. Provjerite postoji li prethodni blok na koji se blok odnosi i je valjan.
  2. Provjerite da li je vremenska oznaka bloka veća od prethodnog bloka i manje od 2 sata u budućnosti.
  3. Provjerite je li dokaz o radu na bloku valjan.
  4. Neka je [[0] stanje na kraju prethodnog bloka.
  5. Pretpostavimo da je TX popis transakcija bloka s n transakcija. Za sve i u 0 ... n-1, postavite S [i + 1] = PRIJAVI (S [i], TX [i]) Ako bilo koja aplikacija vrati pogrešku, izađite i vratite lažno.
  6. Vrati se true i registriraj S [n] kao stanje na kraju ovog bloka.

Točke 1 do 3 su izravne. Međutim, sljedeće 3 točke mogu zvučati pomalo zbunjujuće. Da razumemo kako to funkcionira.

Kao što je spomenuto u točki 4, neka S [0] bude stanje na kraju Bloka 5624.

U točki 5. spominje se da za svaku n transakciju postoji određeno stanje na sljedeći način:

Dakle, pomoću funkcije → S [i + 1] = PRIJAVI (S [i], TX [i])

Imamo sljedeće:

S [1] = PRIJAVI (S [0], TX [0]) ← Prva transakcija

S [2] = PRIJAVI (S [1], TX [1]) ← Druga transakcija

,

,

S [n] = PRIJAVITE se (S [n-1], TX [n-1]) ← nta transakcija

Ako se sjećate funkcije o kojoj smo čitali u prethodnoj temi. Morali bismo biti u mogućnosti povući vrijednost S na temelju funkcije Primjena.

PRIJAVI (S, TX) -> S '

To se uglavnom koristi za povezivanje različitih transakcija i blokova. Tako svaka transakcija u bloku definira prijelaz valjanog stanja koristeći gore navedene funkcije iz jedne transakcije u drugu. Međutim, stanje se ne pohranjuje nigdje u bloku i izračunava se ispravno samo polazeći od genezijskog stanja tog određenog bloka, za svaku transakciju u tom bloku. Ovo napokon daje izlaz S [n] koji će djelovati kao S [0] za sljedeći blok.

Redoslijed transakcija je od najveće važnosti, jer ako B stvori transakciju koja uključuje sredstva (UTXO) koje je poslao (stvorio) A, transakcija koju izvršava A mora doći prije B da bi blok bio valjan.

Uvjet dokaz potrebnog rada je da dvostruki hash-SHA256 svakog bloka koji je 256-bitni broj mora biti manji od dinamički prilagođenog cilja. Ovi se dinamički ciljevi povremeno razlikuju tako da rudari pružaju dovoljno računske snage za potvrdu svojih dokaza rada. Također, budući da je funkcija SHA256 u potpunosti pseudo slučajna i nepredvidiva, jedini način da se probije je jednostavnim pokušajem i pogreškama ili grubom silom.

Pretpostavimo da je dinamički cilj postavljen na ~ 2150, tada mreža mora postići prosjek 2 (256-150) što je jednako 2106 pokušaja prije nego što se nađe valjani blok. Ovaj se dinamički cilj vraća na svakih 2016. blokova i kalibrira se na novu ciljnu vrijednost. Novi blok u prosjeku proizvodi se svakih deset minuta na Bitcoin mreži. Za sva teška dizanja koja rudari rade olakšavajući naše transakcije i rješavajući složene matematičke probleme, bitcoini im daju nagradu. Početna nagrada bila je 25 BTC po miniranom bloku. Trenutno je nagrada 12,5 BTC po miniranom bloku. Ovako bitcoini dolaze u promet. Bitcoini dodijeljeni rudarima novi su bitcoini koji se otključavaju sa 21 000 000 Bitcoina, što je tvrda granica Bitcoina koja ikad može biti u opticaju.

ŠTO SE događa u slučaju napada?

Sada ćemo analizirati prednosti rudarstva i kako sprečava napade. Sljedeći su redovi pokupljeni iz Ethereumovog bijelog papira jer je tekst prilično sam po sebi razumljiv.

"Napadačeva strategija je jednostavna:

  1. Pošaljite trgovcu 100 BTC u zamjenu za neki proizvod (po mogućnosti digitalno dobro za brzo isporučivanje)
  2. Pričekajte isporuku proizvoda
  3. Izradite još jednu transakciju koja će tih 100 BTC-a poslati sebi
  4. Pokušajte uvjeriti mrežu da je prva bila njegova transakcija.

Jednom kada se dogodi korak (1), nakon nekoliko minuta neki rudar će transakciju uključiti u blok, recimo broj bloka 270. Nakon otprilike sat vremena, pet lanca će nakon tog bloka biti dodano u lanac, sa svakim od ti blokovi indirektno ukazuju na transakciju i na taj način je „potvrđuju“. U ovom trenutku, trgovac će prihvatiti plaćanje kao finalizirano i isporučiti proizvod; budući da pretpostavljamo da je to digitalno dobro, isporuka je trenutna. Sada napadač stvara drugu transakciju koja šalje 100 BTC-a sebi. Ako ga napadač jednostavno pusti u divljinu, transakcija se neće obraditi; rudari će pokušati pokrenuti APPLY (S, TX) i primijetiti da TX troši UTXO koji više nije u državi. Dakle, umjesto toga, napadač stvara "viljušku" blockchaina, započinjući miniranjem druge verzije bloka 270 koji upućuje na isti blok 269 kao roditelj, ali s novom transakcijom umjesto stare. Budući da se podaci o blokovima razlikuju, to zahtijeva ponovno dokazivanje rada. Nadalje, napadačeva nova verzija bloka 270 ima drugačiji hash, tako da originalni blokovi 271 do 275 ne "upućuju" na njega; dakle, originalni lanac i novi lanac napadača potpuno su odvojeni. Pravilo je da se u vilici uzima najduži blok lanca kao istina, pa će legitimni rudari raditi na lancu 275 dok napadač sam radi na lancu 270. Da bi napadač mogao duže zadržati svoj blockchain, morat će imati više računske snage od ostatka mreže kombiniranog kako bi se sustigao (otuda, "51% napad"). "

Gornji tekst pokazuje kako da stekne kontrolu nad blockchainom, napadač mora imati više snage obrade od 51% ukupnog blockchaina što je vjerovatno nemoguće za gornje kovanice.

Merkle drveće

Stabla merkle pomažu u održavanju jedinstvenosti bloka. Drveće Merkle je binarno stablo gdje svaki čvor ima dvoje djece, a to ide sve do dna da imaju pojedinačne čvorove lišća koji se sastoje od podataka o transakcijama. Ti se čvorovi na listi oblikuju do vrha kao što je prikazano na donjoj slici i završavaju u jednom 'hashu'. Ovaj sloj bloka sastoji se od vremenske oznake, dakle, prethodnog hash-a i korijena hash-a stabla Merkle kao što je prikazano na slici s lijeve strane.

Sada, ljepota kriptografskih funkcija je, čak i ako se promijeni jedan bit ulaza, cijeli se obrazac šifriranja promijeni i izlaz srednje vrijednosti hash-a je drugačiji. To mijenja izlazak vrijednosti hash vrijednosti ukupnog bloka i odbacuje ga blockchain jer nema valjan dokaz rada. Izlaz Merkleovog stabla je jedan hash koji je dovoljno siguran da djeluje kao jamstvo čvorovima.

Ovi čvorovi uspoređuju ovaj hash iz jednog izvora s drugim malim dijelom stabla Merkle iz drugog izvora kako bi u konačnici potvrdili autentičnost bloka. Sličan scenarij prikazan je na desnoj strani gornje slike kada čvor odbije blok jer se njegov hash ne podudara s podacima u Merkle stablu.

Kako se podaci pohranjeni u blockchainu bitcoina kontinuirano povećavaju, pojavit će se trenutak u kojem prosječna stolna računala ne bi mogla pohraniti sve podatke. Tu se pojavljuje protokol poznat kao "pojednostavljena provjera plaćanja" (SPV). Ovaj protokol omogućuje čvorovima da provjere dokaz o radu pomoću hash-a u pojedinim blokovima. Takvi se čvorovi nazivaju i "svjetlosni čvorovi". Ovi svjetlosni čvorovi preuzimaju zaglavlje bloka, provjeravaju rad na zaglavima bloka, a zatim preuzimaju samo „grane“ povezane s transakcijama koje su za njih relevantne. Svjetlosni čvorovi na taj način osiguravaju da su transakcije legalne, unatoč preuzimanju samo vrlo malog dijela blockchaina.

Alternativne Blockchain aplikacije

  1. NameCoin
    NameCoin omogućuje registraciju imena u decentraliziranoj bazi podataka.
  2. Kovanice u boji
    Kovani novčići služe kao protokol koji ljudima omogućuje stvaranje vlastitih digitalnih valuta na Bitcoin Blockchainu.
  3. Metacoins
    Metacoin protokol je pohranjen na vrhu Bitcoina, ali koristi drugu funkciju prijelaza stanja od Bitcoina. Omogućuju mehanizam za stvaranje proizvoljnog protokola kriptovaluta.

Postoje dva načina za izgradnju blockchain sustava. Prvo je izgradnja neovisne mreže, a drugi uključuje izgradnju protokola na vrhu Bitcoina. Prvi je pristup teško provesti zbog uključenih troškova. Također, broj aplikacija koje bi se izvodile na Blockchainu ne zahtijevaju potpunu neovisnu mrežu. Zahtjevi ovih aplikacija relativno su manje računalni.

Pristup temeljen na Bitcoin-u ima nedostatak što ne nasljeđuje pojednostavljene značajke provjere plaćanja Bitcoin-a. SPV radi za Bitcoin jer može koristiti dubinu blockchaina kao proxyja za valjanost; u nekom trenutku, jednom kada preci transakcija kreću dovoljno daleko natrag, sa sigurnošću se može reći da su legitimno bili dio države. Potpuno sigurna implementacija meta-protokola SPV trebala bi skenirati unatrag do početka Bitcoin Blockchaina da bi se utvrdilo jesu li određene transakcije valjane ili ne.

Scripting

Bitcoin protokol se bavi primitivnom verzijom koncepta poznatog kao 'pametni ugovori'. UTXO u Bitcoin-u može biti ne samo javni ključ, već i komplicirana skripta izražena jednostavnim programskim jezikom. U ovom slučaju, nakon transakcije, UTXO mora pružiti podatke koji zadovoljavaju skriptu. Nakon toga, čak se i osnovni mehanizam vlasništva javnih ključeva implementira putem skripte koja se provjerava pomoću eliptičnih krivulja. Skripta vraća 1 ako je provjera uspješna i vrati 0 u suprotnom.

Ovom se daljnjom kontrolom može napisati skriptu koja zahtijeva provjeru potpisa iz dva od dana tri privatna ključa za potvrdu ("multisig"). Ovo je slučaj upotrebe za velike konglomeratne korporativne račune, sigurne račune i escrow situacije. Ove skripte pametnih ugovora mogu se izmijeniti da bi učinile brojne radnje, ovisno o slučaju uporabe.

Međutim, postoji nekoliko ograničenja u skriptu jeziku Bitcoin:

  1. Nedostatak Turingove cjelovitosti - petlje nisu dostupne za sprečavanje beskonačnih situacija u petlji, ali pisanje pametnog ugovora na jeziku koji Turing nije potpun može biti zastrašujuće.
  2. Vrijednost sljepoća - UTXO skripta ne može utvrditi je li se vrijednost BTC-a promijenila u odnosu na USD.
  3. Nedostatak države - UTXO se može potrošiti ili potrošiti. Stvaranje složenih pametnih ugovora koji bi mogli uključivati ​​dvostupanjsku kriptografsku provjeru na Bitcoin mreži nije moguće.
  4. Blockchain sljepoća - UTXO također nema pristup notsu, vremenskoj oznaci ili prethodnom hash-u bloka. Ovo ograničava primjenu Bitcoina u mnogim poljima.

"Ethereum predlaže izgradnju alternativnog okvira koji omogućuje još veće dobitke u lakoći razvoja, kao i još jača svojstva lakog klijenta, istodobno omogućavajući aplikacijama da dijele ekonomsko okruženje i sigurnost u blockchainu."

Time se zaključuje interpretacija dijela 1 bijele knjige Ethereum. Da zaključimo, ovaj nam je post dao opći pregled kako funkcionira Bitcoin, prva kripto valuta. Sada ćemo preći na analizu u čemu se Ethereum razlikuje od Bitcoin protokola.