I denne serie af artikler bygger vi en forenklet kryptovaluta, der er baseret på simpel blockchain-implementering i Golang på mindre end 5 minutter. du skal først installere golang for at lave dette projekt. til teksteditor kan du bruge hvad som helst, her bruger jeg visual studio code.
Har du installeret det? Okay, lad os gøre det!
hvis du har oprettet projektet, opret en fil main.go . oke lad os kode, først starter vi fra main.go Lad os starte med struct Block-delen af "blockchain". I blockchain blokerer den, der gemmer værdifuld information. For eksempel blokerer bitcoin butikstransaktioner, essensen af enhver kryptovaluta. Udover dette indeholder en blok nogle tekniske oplysninger, såsom dens version, det aktuelle tidsstempel og hashen for den forrige blok. I denne artikel vil vi ikke implementere blokken, som den er beskrevet i blockchain- eller Bitcoin-specifikationer, i stedet vil vi bruge en forenklet version af den, som kun indeholder væsentlig information. Sådan ser det ud. her har vi en strukturblok:
type Block struct {tidsstempel tid.Tidtransaktioner []strengprevhash []byteHash []byte}
Timestamp
er det aktuelle tidsstempel (når blokken oprettes), transactions
er den faktiske værdifulde information indeholdt i blokken, prevhas
gemmer hashen fra den forrige blok, og Hash
er blokkens hash. I Bitcoin-specifikation Timestamp
, prevhash
og Hash
er blokoverskrifter, som danner en separat datastruktur, og transaktioner (transaction
i vores tilfælde) er en separat datastruktur. Så vi blander dem her for nemheds skyld.
Så hvordan beregner vi hasherne? Måden hashes beregnes på er et meget vigtigt træk ved blockchain, og det er denne funktion, der gør blockchain sikker. Sagen er, at det er en beregningsmæssigt vanskelig operation at beregne en hash, det tager lidt tid selv på hurtige computere (det er derfor folk køber kraftige GPU'er for at mine Bitcoin). Dette er et bevidst arkitektonisk design, som gør det vanskeligt at tilføje nye blokke, og dermed forhindrer deres ændring, efter at de er tilføjet. Vi vil diskutere og implementere denne mekanisme i en fremtidig artikel.
Indtil videre tager vi blot blokfelter, sammenkæder dem og beregner en SHA-256-hash på den sammenkædede kombination. Lad os gøre det her Newhash
metode:
func NewHash(tid tid.Tid, transaktioner []streng, prevhash []byte) []byte {input := append(prevhash, time.String()...)for transaktion := interval transaktioner {input = append(input, string(rune(transaktion))...)}hash := sha256.Sum256(input)returner hash[:]}
Dernæst, efter en Golang-konvention, implementerer vi en funktion, der vil forenkle oprettelsen af en blok og finish:
func Blocks(transaktioner []streng, prevhash []byte) *Blok {aktuelTid := tid.Nu()returner &Bloker{timestamp: time.Time{},transaktioner: transaktioner,prevhash: prevhash,Hash: NewHash(currentTime, transaktioner, prevhash),}}
vi fortsætter med at oprette en printfunktion. printfunktionen er nyttig til at udskrive indholdet af hver blok, der udfører en transaktion. her er koden:
func Print(blok *Bloker) {fmt.Printf("ttime: %sn", blok.timestamp.String())fmt.Printf("tprevhash: %xn", blok.prevhash)fmt.Printf("thash: %xn", blok.Hash)}
Og funktionstransaktion for printtransaktion:
func Transaction(blok *Bloker) {fmt.Println("tTransaktioner:")for i, transaktion := område blok.transaktioner {fmt.Printf("tt%v: %qn", i, transaktion)}}
efter at alle de nødvendige funktioner er udført, vil vi bruge det i hovedfunktionen:
func main () {ryan := []streng{"ryandi sendte 50 BTC til Reza"}blok_1 := Blokke(ryan, []byte{})fmt.Println("Dette er vores første blok")Udskriv (blok_1)Transaktion (blok_1)jack := []streng{"jack send 20 BTC til Reynold"}blok_2 := Blokke(jack, blok_1.Hash)fmt.Println("Dette er vores anden blok")Udskriv (blok_2)Transaktion (blok_2)}
okay al den kode vi er færdig med at skrive. lad os køre det ved at skrive go run main.go i terminal. Output:
Konklusion
Vi byggede en meget simpel blockchain-prototype: det er bare en række blokke, hvor hver blok har en forbindelse til den forrige. Selve blockchain er dog meget mere kompleks. I vores blockchain er det nemt og hurtigt at tilføje nye blokke, men i ægte blockchain kræver det noget arbejde at tilføje nye blokke: man skal udføre nogle tunge beregninger, før man får tilladelse til at tilføje blokke (denne mekanisme kaldes Proof-of-Work). Blockchain er også en distribueret database, der ikke har nogen enkelt beslutningstager. En ny blok skal således bekræftes og godkendes af andre deltagere i netværket (denne mekanisme kaldes konsensus). Og der er ingen transaktioner i vores blockchain endnu!
- "
- Alle
- artikel
- artikler
- Bitcoin
- blockchain
- BTC
- bygge
- købe
- kode
- computere
- tilslutning
- Konsensus
- indhold
- fortsæt
- cryptocurrency
- Nuværende
- data
- Database
- Design
- editor
- FAST
- Feature
- Fields
- Fornavn
- følger
- formular
- funktion
- fremtiden
- GV
- hash
- link.
- Hvordan
- hr
- HTTPS
- ia
- oplysninger
- IP
- IT
- medium
- netværk
- Andet
- Mennesker
- forebyggelse
- projekt
- Proof-of-Work
- rækkevidde
- Kør
- Series
- Simpelt
- So
- starte
- butik
- forhandler
- Teknisk
- tid
- transaktion
- Transaktioner
- W
- Arbejde
- skrivning