V tej seriji člankov bomo v manj kot 5 minutah zgradili poenostavljeno kriptovaluto, ki temelji na preprosti implementaciji verige blokov v Golang. za izdelavo tega projekta morate najprej namestiti golang. za urejevalnik besedil lahko uporabite karkoli, tukaj uporabljam kodo Visual Studio.
Ste ga namestili? V redu, naredimo to!
če ste ustvarili projekt, ustvarite datoteko main.go . oke lets code, najprej bomo začeli z main.go. Začnimo z delom struct Block "blockchaina". V verigi blokov so bloki, ki shranjujejo dragocene informacije. Na primer, bitcoin blokira transakcije shranjevanja, kar je bistvo katere koli kriptovalute. Poleg tega blok vsebuje nekaj tehničnih informacij, kot so različica, trenutni časovni žig in zgoščena vrednost prejšnjega bloka. V tem članku ne bomo implementirali bloka, kot je opisano v specifikacijah blockchaina ali Bitcoina, namesto tega bomo uporabili njegovo poenostavljeno različico, ki vsebuje samo pomembne informacije. Tako izgleda. tukaj imamo strukturni blok:
type Block struct {časovni žig čas.Častransakcije []nizprevhash []bajtZgoščena []bajt}
Timestamp
je trenutni časovni žig (ko je blok ustvarjen), transactions
so dejanske dragocene informacije v bloku, prevhas
shrani zgoščeno vrednost prejšnjega bloka in Hash
je zgoščena vrednost bloka. V specifikaciji Bitcoin Timestamp
, prevhash
in Hash
so glave blokov, ki tvorijo ločeno podatkovno strukturo, in transakcije (transaction
v našem primeru) je ločena podatkovna struktura. Zato jih tukaj mešamo zaradi enostavnosti.
Kako torej izračunamo zgoščene vrednosti? Način izračuna zgoščenih vrednosti je zelo pomembna značilnost verige blokov in prav ta funkcija zagotavlja varnost verige blokov. Dejstvo je, da je izračun zgoščene vrednosti računsko težka operacija, traja nekaj časa tudi na hitrih računalnikih (zato ljudje kupujejo zmogljive grafične procesorje za rudarjenje Bitcoinov). To je namerna arhitekturna zasnova, ki oteži dodajanje novih blokov in tako prepreči njihovo spreminjanje po dodajanju. O tem mehanizmu bomo razpravljali in ga implementirali v prihodnjem članku.
Zaenkrat bomo samo vzeli polja blokov, jih združili in izračunali zgoščeno vrednost SHA-256 za združeno kombinacijo. Naredimo to v Newhash
metoda:
func NewHash(čas čas.Čas, transakcije []niz, prevhash []bajt) []bajt {input := append(prevhash, time.String()...)za transakcijo := obseg transakcij {vhod = pripni(vnos, niz(runa(transakcija))...)}hash := sha256.Sum256(vhod)vrni hash [:]}
Nato bomo po Golangovi konvenciji implementirali funkcijo, ki bo poenostavila ustvarjanje bloka in zaključek:
func Blocks(transactions []string, prevhash []byte) *Block {currentTime := time.Now()vrni &Blokiraj{časovni žig: čas.Čas{},transakcije: transakcije,prevhash: prevhash,Zgoščevanje: NewHash(trenutničas, transakcije, prevhash),}}
nadaljujemo z ustvarjanjem funkcije tiskanja. funkcija tiskanja je uporabna za tiskanje vsebine vsakega bloka, ki izvaja transakcijo. tukaj je koda:
func Print(block *Block) {fmt.Printf("ttime: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("hash: %xn", block.Hash)}
In transakcija funkcije za transakcijo tiskanja:
func Transaction(block *Block) {fmt.Println("tTransactions:")za i, transakcija := obseg block.transactions {fmt.Printf("tt%v: %qn", i, transakcija)}}
ko bodo vse zahtevane funkcije dokončane, ga bomo uporabili v glavni funkciji:
func main() {ryan := []niz{"ryandi je Rezi poslal 50 BTC"}block_1 := Bloki (ryan, []byte{})fmt.Println("To je naš prvi blok")Natisni (blok_1)Transakcija (blok_1)jack := []niz{"jack pošlji 20 BTC Reynoldu"}block_2 := Bloki(jack, block_1.Hash)fmt.Println("To je naš drugi blok")Natisni (blok_2)Transakcija (blok_2)}
v redu vsa koda, ki smo jo napisali. zaženimo ga tako, da v terminal vnesemo go run main.go. Izhod:
zaključek
Zgradili smo zelo preprost prototip verige blokov: to je le niz blokov, pri čemer ima vsak blok povezavo s prejšnjim. Dejanska veriga blokov pa je veliko bolj zapletena. V naši verigi blokov je dodajanje novih blokov enostavno in hitro, v resnični verigi blokov pa dodajanje novih blokov zahteva nekaj dela: opraviti je treba nekaj težkih izračunov, preden dobimo dovoljenje za dodajanje blokov (ta mehanizem se imenuje Proof-of-Work). Prav tako je blockchain porazdeljena baza podatkov, ki nima enega odločevalca. Tako morajo nov blok potrditi in odobriti drugi udeleženci omrežja (ta mehanizem imenujemo soglasje). In v naši verigi blokov še ni transakcij!
- "
- vsi
- članek
- članki
- Bitcoin
- blockchain
- BTC
- izgradnjo
- nakup
- Koda
- računalniki
- povezava
- Soglasje
- Vsebina
- naprej
- cryptocurrency
- Trenutna
- datum
- Baze podatkov
- Oblikovanje
- urednik
- FAST
- Feature
- Področja
- prva
- sledi
- obrazec
- funkcija
- Prihodnost
- GV
- hash
- tukaj
- Kako
- hr
- HTTPS
- ia
- Podatki
- IP
- IT
- srednje
- mreža
- Ostalo
- ljudje
- preprečevanje
- Projekt
- Dokazilo o delu
- območje
- Run
- Serija
- Enostavno
- So
- Začetek
- trgovina
- trgovine
- tehnični
- čas
- transakcija
- Transakcije
- W
- delo
- pisanje