Изградете блокчејн во Голанг од нула

Во оваа статија, ќе се фокусираме на развојот на блокчејн Go од нула. Сепак, пред да започнеме, треба да бидете сигурни дека сте запознаени со основните концепти во Golang. Ако не, тогаш е мудро ако поминете низ прелиминарните концепти и потоа се вратите на блокчејн. 

Значи, да преминеме директно на темата. 

Почнувајќи со нов директориум 

Ќе изградиме нов директориум за почеток. Да претпоставиме дека овој директориум го има името „blockchain“. Ќе го напишеме кодот во командната линија (или ако користите macOS или Linux, мора да го користите терминалот). Така, пишуваме:

CD go-workspace 

mkdir блокчејн 

ЦД блокчејн 

код .

Како што се отвора VS Code, ќе создадеме Go модул во командната линија. Како го правиме тоа? Па, пишуваме:

оди мод иницира github.com/golang-company/blockchain

Кодирање во main.go 

Следно, ќе создадеме изворна датотека Go со име „main.go“ и ќе го напишеме кодот во неа. Но, прво да разбереме што е блокчејн. А blockchain може да се дефинира како јавна база на податоци која е децентрализирана и дистрибуирана меѓу неколку врсници. Blockchain овозможува базата на податоци да се корегира самостојно, дури и ако некој јазол произведува неточни податоци. 

Обично, блокот на блокчејн се состои од податоци што ги споделуваме во базата на податоци, хаш и криптографски хаш на претходниот блок. 

 Значи, дали сте подготвени за Одете на развој на блокчејн? Одлично! Ајде да почнеме. 

Програмски дел 

Во овој дел, ќе ја разгледаме датотеката main.go. 

главен пакет

увоз (

„бајти“

„крипто/sha256“ 

"fmt" 

)

тип Cryptoblock struct {

Хаш [] бајт 

Податок [] бајт 

PrevHash [] бајт 

}

  • Како што можете да видите, структурата е создадена само. 

func (c *Cryptoblock) BuildHash() {

детали := бајти. Придружи се ([][] бајт{c.Data, c.PrevHash}, []бајт{}) 

хаш := sha256.Sum256(детали)

в.Хаш = хаш[ : ]

}

  • Сега ќе конструираме метод кој ќе ни овозможи да генерираме хаш во зависност од податоците и претходниот хаш. Ќе ја увеземе библиотеката „бајти“ затоа што ќе ја користиме.
  • Следниот чекор е да креирате променлива наречена детали и да ги користите бајтите од типот на податоци. Ќе користиме Join() за да ги поврземе парчињата бајти.

детали := бајти. Придружи се ([][] бајт{c.Data, c.PrevHash}, []бајт{}) 

Еве, земаме 2D парче бајти, ги пренесуваме c.Data и претходниот хаш. Потоа ќе го комбинираме празното парче бајти. 

  • Следејќи го ова, ја креираме вистинската помош за хаширање на функцијата за хаширање sum256 за деталите. Можеме да го користиме ова бидејќи ќе ја увеземе библиотеката sha256. 
  • Следно, го туркаме креираниот хаш во полето Hash за блокот. 

func BuildBlock (низа со податоци, prevHash [] бајт) *Cryptoblock {

блок := &Криптоблок{[]бајт{}, []бајт(податоци), prevHash}

блок.BuildHash()

блок за враќање

  • Сега ќе изградиме функција која овозможува создавање на Block. Функцијата прифаќа низа податоци како влез, prevHash од претходниот блок како влез, а потоа излегува референца за Cryptoblock. Ќе го изградиме блокот користејќи го конструкторот на блокови. 
  • &Cryptoblock делува како референца за блокот. За Hash полето, ние инкорпорираме празно парче бајти. За полето Data, ја земаме низата со податоци и ја претвораме во парче бајти. И ние инкорпорираме prevHash во полето PrevHash. 
  • На крајот, ја повикуваме BuildHash() на блокот и го враќаме блокот. 

тип BlockChain struct {

блокови []*Криптоблок

}

  • Потребен е тип кој ќе помогне во изразувањето на блокчејнот. И ние имплементиравме структура за да го постигнеме ова. Структурата од типот BlockChain е составена од низа покажувачи до Cryptoblock.

func (синџир *BlockChain) AddBlock (низа на податоци) {

prevBlock := chain.blocks[len(chain.blocks)-1]

ново := BuildBlock (податоци, prevBlock.Hash)

chain.blocks = додаток (chain.blocks, new)

}

  • Овде, создаваме метод кој ни овозможува да се приклучиме на блок на ланецот. Методот го враќа покажувачот на блокчејн. По ова, тој прифаќа низа со податоци. 
  • Повикувајќи chain.blocks, доаѓаме до претходниот блок во блокчејнот. Следно, ја поминавме должината на блокчејнот [len(chain.blocks)-1].
  • Во новата променлива, ја повикуваме функцијата BuildBlock и пренесуваме низа за податоци и prevBlock.Hash.
  • Со користење на функцијата append, додавајќи го ова на chain.blocks, потоа го прикачуваме новиот блок на blockchain.

func Inception() *Cryptoblock {

врати го BuildBlock („Почеток“, []бајт{})

}

  • Следниот чекор е да се создаде функција наречена Inception која ќе го опише првиот блок на блокчејнот. И ќе вратиме нов BuildBlock во функцијата, заедно со податоците во првиот блок. Еве. Вградив „Inception“ и парче бајти што претставува празен претходен хаш. 

func InitBlockChain() *BlockChain {

врати &BlockChain{[]*Cryptoblock{Inception()}}

}

  • За да го креирам првиот блокчејн, ја воведов функцијата InitBlockChain. Еве, јас само ја враќам конкретната референца на BlockChain. Следно, градиме низа од Cryptoblock, каде што упатуваме повик до функцијата Inception. 

Func main() {

синџир := InitBlockChain()

chain.AddBlock („Прв блок по почетокот“)

chain.AddBlock („Втор блок по почетокот“)

chain.AddBlock („Трет блок по почетокот“)

за _, блок := опсег chain.blocks {

fmt.Printf („Претходен хаш: %x\n“, блок. PrevHash)

fmt.Printf(„Податоци во блок: %s\n“, блок.Податоци)

fmt.Printf(„Хеш: %x\n“, блок.Хаш)

}

}

  • Конечно, стигнавме до главната функција. Како што можете да видите, ја повикавме InitBlockChain() и ја доделивме на променливата на синџирот. 
  • Следно, додаваме блокови во синџирот преку chain.AddBlock и ги пренесуваме потребните податоци. 
  • Следејќи го ова, извршуваме јамка за да провериме дали има блокчејн. Потоа го издвојуваме секој блок и ги печатиме полињата во секој блок. Ние само пишуваме:

fmt.Printf („Претходен хаш: %x\n“, блок. PrevHash)

fmt.Printf(„Податоци во блок: %s\n“, блок.Податоци)

fmt.Printf(„Хеш: %x\n“, блок.Хаш)

излез: 

Значи, можеме да кажеме дека програмата е успешна. Се надевам дека успеавте да ја разберете имплементацијата на концептот на блокчејн во Голанг. Само продолжете да вежбате и ќе можете да се справите со сложени проекти. 

Вашиот крипто ја заслужува најдобрата безбедност. Добијте а Хардверски паричник Леџер за само 79 долари!

Извор: https://coinfomania.com/build-a-blockchain-in-golang/