Голангда нөлдөн баштап блокчейн куруңуз

Бул макалада биз Go blockchainди нөлдөн баштап өнүктүрүүгө көңүл бурабыз. Бирок, биз баштоодон мурун, сиз Голангдагы негизги түшүнүктөр менен тааныш экениңизди билишиңиз керек. Эгер андай болбосо, анда алдын ала түшүнүктөрдү карап чыгып, андан кийин блокчейнге кайтып келсеңиз акылдуулукка жатат. 

Андыктан, келгиле, түз эле темага өтөбүз. 

Жаңы каталогдон баштоо 

Баштоо үчүн жаңы каталогду курабыз. Келгиле, бул каталогдун аталышы "blockchain" деп коёлу. Биз кодду буйрук сабына теребиз (же сиз macOS же Linux колдонуп жатсаңыз, Терминалды колдонушуңуз керек). Ошентип, биз теребиз:

CD go-workspace 

mkdir blockchain 

CD blockchain 

код .

VS коду ачылганда, биз Command Protte Go модулун түзөбүз. Муну кантип кылабыз? Ооба, биз теребиз:

go mod init github.com/golang-company/blockchain

main.go сайтында коддоо 

Андан кийин, биз 'main.go' деп аталган Go булак файлын түзүп, ага кодду теребиз. Бирок адегенде blockchain деген эмне экенин түшүнүп алалы. А blockchain борбордон ажыратылган жана бир нече теңтуштар арасында бөлүштүрүлгөн коомдук маалымат базасы катары аныкталышы мүмкүн. Блокчейн, түйүн так эмес маалыматтарды чыгарып жатса да, маалымат базасын өзүн өзү оңдоого мүмкүндүк берет. 

Адатта, блокчейндеги блок биз маалымат базасында бөлүшкөн маалыматтардан, хэштен жана мурунку блоктун криптографиялык хэшинен турат. 

 Демек, сен даярсыңбы Блокчейнди өнүктүрүүгө өтүңүз? Абдан жакшы! Келиңиз баштайлы. 

Программалоо бөлүгү 

Бул бөлүмдө биз main.go файлын карайбыз. 

негизги пакет

импорттоо (

"байт"

"crypto/sha256" 

"Fmt" 

)

Cryptoblock структурасын териңиз {

Хеш [] байт 

Маалымат [] байт 

PrevHash [] байт 

}

  • Көрүнүп тургандай, структура гана түзүлдү. 

func (c *Cryptoblock) BuildHash() {

чоо-жайы := bytes.Join([][] байт{c.Data, c.PrevHash}, []байт{}) 

hash := sha256.Sum256(чоо-жайы)

c.Хаш = хэш[ : ]

}

  • Биз азыр маалыматтарга жана мурунку хэшке жараша хэшти түзүүгө мүмкүндүк берүүчү ыкманы курабыз. Биз "байт" китепканасын импорттойбуз, анткени биз аны колдонобуз.
  • Кийинки кадам майда-чүйдөсүнө чейин деп аталган өзгөрмө түзүү жана маалымат түрү байт колдонуу болуп саналат. Байттардын кесиндилерин туташтыруу үчүн Join() колдонобуз.

чоо-жайы := bytes.Join([][] байт{c.Data, c.PrevHash}, []байт{}) 

Бул жерде биз байттардын 2D кесинди алып жатабыз, биз c.Data жана мурунку хэшти өткөрүп беребиз. Андан кийин биз байттардын бош бөлүгүн бириктиребиз. 

  • Андан кийин, биз деталдарда sum256 хэшинг функциясынын жардамы менен чыныгы хэшти түзүп жатабыз. Биз муну колдоно алабыз, анткени биз sha256 китепканасын импорттойбуз. 
  • Андан кийин, биз түзүлгөн хэшти блоктун Хэш талаасына түртөбүз. 

func BuildBlock (маалымат саптары, prevHash [] байт) *Cryptoblock {

блок := &Криптоблок{[]байт{}, []байт(маалымат), мурункуХаш}

block.BuildHash()

кайра блок

  • Эми биз Блокту түзүүгө мүмкүндүк берүүчү функцияны курабыз. Функция киргизүү катары берилиштердин сабын кабыл алат, мурунку блоктон prevHash киргизүү катары, андан кийин Cryptoblock шилтемесин чыгарат. Блок конструктордун жардамы менен блокту курабыз. 
  • &Cryptoblock блокко шилтеме катары иштейт. Хэш талаасы үчүн биз байттардын бош бөлүгүн киргизебиз. Берилиштер талаасы үчүн биз маалымат сабын алып, аны байт кесимине айландырабыз. Жана биз PrevHash талаасына prevHash киргизебиз. 
  • Акырында, биз блоктогу BuildHash() деп атабыз жана блокту кайтарабыз. 

BlockChain структурасын териңиз {

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

}

  • Блокчейнди билдирүүгө жардам бере турган түрү талап кылынат. Жана биз муну ишке ашыруу үчүн структураны ишке ашырдык. BlockChain структурасынын түрү Cryptoblock үчүн көрсөткүчтөрдүн массивинен турат.

func (чынжыр *BlockChain) AddBlock (маалымат сап) {

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

жаңы := BuildBlock(маалыматтар, prevBlock.Hash)

chain.blocks = тиркеме (chain.blocks, жаңы)

}

  • Бул жерде биз блокту чынжырга кошууга мүмкүндүк берүүчү ыкманы түзүп жатабыз. Метод blockchain көрсөткүчүн чыгарат. Андан кийин, ал маалымат сабын кабыл алат. 
  • chain.blocks чакырып, биз blockchain мурунку блок алуу. Андан кийин, биз blockchain узундугун өттү [len(chain.blocks)-1].
  • Жаңы өзгөрмөдө биз BuildBlock функциясын чакырып жатабыз жана биз маалымат сабын жана prevBlock.Hash өткөрүп жатабыз.
  • Тиркеме функциясын колдонуу менен, муну chain.blocksга кошуп, биз жаңы блокту блокчейнге бекитебиз.

func Inception() *Cryptoblock {

BuildBlock кайтаруу("Баштоо", []байт{})

}

  • Кийинки кадам блокчейндин биринчи блогун сүрөттөгөн Inception деп аталган функцияны түзүү. Жана биз биринчи блоктогу маалыматтар менен бирге функцияга жаңы BuildBlock кайтарып беребиз. Мына. Мен "Башталгычты" жана мурунку бош хэшти билдирген байттардын бир бөлүгүн коштум. 

func InitBlockChain() *BlockChain {

&BlockChain кайтаруу{[]*Криптоблок{Башталыш()}}

}

  • Биринчи блокчейнди түзүү үчүн мен InitBlockChain функциясын киргиздим. Бул жерде мен BlockChainге өзгөчө шилтемени кайтарып жатам. Андан кийин, биз Cryptoblock массивин курабыз, анда биз Inception функциясына чалабыз. 

func main() {

чынжыр := InitBlockChain()

chain.AddBlock("Башталгандан кийинки биринчи блок")

chain.AddBlock("Башталгандан кийинки экинчи блок")

chain.AddBlock("Башталгандан кийинки үчүнчү блок")

_ үчүн, блок := диапазон chain.blocks {

fmt.Printf("Мурунку хэш: %x\n", block.PrevHash)

fmt.Printf(“Блоктогу маалыматтар: %s\n”, block.Data)

fmt.Printf("Хэш: %x\n", блок.Хаш)

}

}

  • Акыры, биз негизги функцияга келдик. Көрүнүп тургандай, биз InitBlockChain() деп атадык жана аны чынжыр өзгөрмөсүнө дайындадык. 
  • Кийинки, биз chain.AddBlock аркылуу чынжырга блокторду кошуп жатабыз, биз керектүү маалыматтарды өткөрүп жатабыз. 
  • Андан кийин, биз блокчейнди текшерүү үчүн for циклин иштетебиз. Андан кийин ар бир блокту бөлүп, ар бир блоктун ичиндеги талааларды басып чыгарабыз. Биз жөн гана теребиз:

fmt.Printf("Мурунку хэш: %x\n", block.PrevHash)

fmt.Printf(“Блоктогу маалыматтар: %s\n”, block.Data)

fmt.Printf("Хэш: %x\n", блок.Хаш)

Output: 

Ошентип, биз программа ийгиликтүү деп айта алабыз. Сиз Голангда блокчейн концепциясын ишке ашырууну түшүнө алдыңыз деп үмүттөнөм. Жөн гана машыгууну уланта бериңиз, ошондо сиз татаал долбоорлорду чече аласыз. 

Сиздин криптоңуз эң мыкты коопсуздукка татыктуу. Алуу Болгону $ 79 үчүн Ledger аппараттык капчыгы!

Булак: https://coinfomania.com/build-a-blockchain-in-golang/