Голангта нөлден бастап блокчейн жасаңыз

Бұл мақалада біз Go блокчейнін нөлден бастап дамытуға назар аударамыз. Дегенмен, біз бастамас бұрын, сіз Голанг тіліндегі негізгі ұғымдармен таныс екеніңізге сенімді болуыңыз керек. Олай болмаса, алдын ала тұжырымдамалардан өтіп, содан кейін блокчейнге қайта оралсаңыз дана болады. 

Олай болса, тікелей тақырыпқа көшейік. 

Жаңа каталогтан бастап 

Біз бастау үшін жаңа каталог жасаймыз. Бұл каталогта «blockchain» атауы бар деп есептейік. Біз кодты пәрмен жолына тереміз (немесе егер сіз macOS немесе Linux пайдалансаңыз, Терминалды пайдалануыңыз керек). Осылайша, біз тереміз:

CD жұмыс кеңістігі 

mkdir блокчейн 

CD блокчейн 

код.

VS коды ашылғанда, біз пәрмен жолында Go модулін жасаймыз. Біз мұны қалай істейміз? Жақсы, біз тереміз:

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

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

Әрі қарай, біз «main.go» деп аталатын Go бастапқы файлын жасаймыз және оған кодты енгіземіз. Бірақ алдымен блокчейннің не екенін түсінейік. А blockchain орталықтандырылмаған және бірнеше әріптестер арасында таратылатын жалпыға қолжетімді деректер базасы ретінде анықталуы мүмкін. Блокчейн, тіпті түйін дәл емес деректерді шығарса да, дерекқорды өздігінен түзетуге мүмкіндік береді. 

Әдетте блокчейндегі блок біз дерекқорда бөлісетін деректерден, хэштен және алдыңғы блоктың криптографиялық хэшінен тұрады. 

 Сонымен, сіз дайынсыз ба Блокчейнді дамытуға барыңыз? Тамаша! Бастайық. 

Бағдарламалау бөлімі 

Бұл бөлімде біз main.go файлын қарастырамыз. 

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

импорт (

«байт»

«crypto/sha256» 

"Fmt" 

)

Cryptoblock құрылымын теріңіз {

Хэш [] байт 

Деректер [] байт 

АлдыңғыХэш [] байт 

}

  • Көріп отырғаныңыздай, құрылым тек құрылды. 

func (c *Cryptoblock) BuildHash() {

мәліметтер := bytes.Join([][] байт{c.Data, c.PrevHash}, []байт{}) 

хэш := 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, жаңа)

}

  • Мұнда біз блокты тізбекке қосуға мүмкіндік беретін әдісті жасаймыз. Әдіс блокчейн көрсеткішін шығарады. Осыдан кейін ол деректер жолын қабылдайды. 
  • Chain.blocks шақыру арқылы біз блокчейндегі алдыңғы блокқа жетеміз. Әрі қарай, біз блокчейннің ұзындығынан өттік [len(chain.blocks)-1].
  • Жаңа айнымалыда біз BuildBlock функциясын шақырамыз және деректер жолы мен prevBlock.Hash жібереміз.
  • Қосымша функциясын пайдаланып, оны chain.blocks ішіне қосып, біз жаңа блокты блокчейнге қосамыз.

func Inception() *Криптоблок {

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», блок. АлдыңғыХэш)

fmt.Printf(“Блоктағы деректер: %s\n”, block.Data)

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

}

}

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

fmt.Printf («Алдыңғы хэш: %x\n», блок. АлдыңғыХэш)

fmt.Printf(“Блоктағы деректер: %s\n”, block.Data)

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

Шығару: 

Демек, бағдарлама сәтті өтті деп айта аламыз. Сіз Голангта блокчейн тұжырымдамасын жүзеге асыруды түсіне алдыңыз деп үміттенемін. Тек жаттығуды жалғастырыңыз және сіз күрделі жобаларды басқара аласыз. 

Сіздің криптоңыз ең жақсы қауіпсіздікке лайық. Алу Ledger аппараттық әмиян бар болғаны 79 долларға!

Дереккөз: https://coinfomania.com/build-a-blockchain-in-golang/