Այս հոդվածում մենք կկենտրոնանանք Go blockchain-ի զարգացման վրա զրոյից: Այնուամենայնիվ, նախքան սկսելը, դուք պետք է համոզվեք, որ դուք ծանոթ եք Golang-ի հիմնական հասկացություններին: Եթե ոչ, ապա խելամիտ կլինի, եթե դուք անցնեք նախնական հայեցակարգերը, ապա վերադառնաք բլոկչեյնին:
Այսպիսով, եկեք անմիջապես անցնենք թեմային:
Սկսած նոր գրացուցակով
Սկսելու համար մենք կկառուցենք նոր գրացուցակ: Ենթադրենք, որ այս գրացուցակը ունի «բլոկչեյն» անվանումը։ Մենք մուտքագրելու ենք կոդը Command Prompt-ում (կամ եթե դուք օգտագործում եք macOS կամ Linux, դուք պետք է օգտագործեք Տերմինալը): Այսպիսով, մենք մուտքագրում ենք.
cd go-workspace
mkdir բլոկչեյն
cd blockchain
ծածկագիր .
Երբ VS կոդը բացվի, մենք հրամանի տողում կստեղծենք Go մոդուլ: Ինչպե՞ս ենք մենք դա անում: Դե, մենք մուտքագրում ենք.
գնալ mod init github.com/golang-company/blockchain
Կոդավորում main.go-ում
Հաջորդը, մենք կստեղծենք «main.go» անունով Go սկզբնաղբյուր ֆայլ և կմուտքագրենք դրա մեջ ծածկագիրը: Բայց նախ եկեք հասկանանք, թե ինչ է բլոկչեյնը: Ա blockchain կարող է սահմանվել որպես հանրային տվյալների բազա, որը ապակենտրոնացված է և բաշխված է մի քանի գործընկերների միջև: Blockchain-ը թույլ է տալիս տվյալների բազան ինքնուրույն շտկել, նույնիսկ եթե հանգույցը արտադրում է ոչ ճշգրիտ տվյալներ:
Սովորաբար, բլոկչեյնի բլոկը բաղկացած է տվյալներից, որոնք մենք կիսում ենք տվյալների բազայում, հեշից և նախորդ բլոկի ծածկագրային հեշից:
Այսպիսով, պատրա՞ստ եք Գնացեք բլոկչեյնի զարգացում? Հիանալի Եկեք սկսենք.
Ծրագրավորման մաս
Այս բաժնում մենք կանդրադառնանք main.go ֆայլին:
փաթեթի հիմնական
ներմուծում (
«բայթ»
«crypto/sha256»
«fmt»
)
տեսակ Cryptoblock struct {
Հաշ [] բայթ
Տվյալներ [] բայթ
PrevHash [] բայթ
}
- Ինչպես տեսնում եք, կառուցվածքը միայն ստեղծվել է:
func (c *Cryptoblock) BuildHash() {
մանրամասներ := bytes. Join ([][] byte{c.Data, c.PrevHash}, []byte{})
hash := sha256.Sum256 (մանրամասներ)
գ.Հաշ = հաշ[ :]
}
- Այժմ մենք կկառուցենք մի մեթոդ, որը մեզ հնարավորություն կտա ստեղծել հեշ՝ կախված տվյալներից և նախորդ հեշից: Մենք կներմուծենք «բայթերի» գրադարանը, քանի որ այն կօգտագործենք:
- Հաջորդ քայլը մանրամասներ կոչվող փոփոխականի ստեղծումն է և տվյալների տիպի բայթերի օգտագործումը: Մենք կօգտագործենք Join() բայթերի հատվածները միացնելու համար:
մանրամասներ := bytes. Join ([][] byte{c.Data, c.PrevHash}, []byte{})
Այստեղ մենք վերցնում ենք բայթերի 2D հատված, փոխանցում ենք c.Data-ն և նախորդ հեշը: Այնուհետև մենք կմիավորենք բայթերի դատարկ հատվածը։
- Դրանից հետո մենք ստեղծում ենք sum256 hashing ֆունկցիայի իրական հեշը մանրամասների վրա: Մենք կարող ենք օգտագործել սա, քանի որ ներմուծելու ենք sha256 գրադարանը:
- Հաջորդը, մենք ստեղծված հեշը հրում ենք բլոկի համար Hash դաշտ:
func BuildBlock (տվյալների տող, prevHash [] բայթ) *Cryptoblock {
արգելափակել := &Cryptoblock{[]byte{}, []byte(տվյալներ), prevHash}
block.BuildHash()
վերադարձի բլոկ
}
- Այժմ մենք կկառուցենք մի գործառույթ, որը հնարավորություն է տալիս ստեղծել Block: Ֆունկցիան ընդունում է տվյալների տողը որպես մուտքագրում, prevHash-ը նախորդ բլոկից որպես մուտքագրում, այնուհետև թողարկում է հղում դեպի Cryptoblock: Մենք բլոկը կկառուցենք՝ օգտագործելով բլոկի կոնստրուկտորը:
- &Cryptoblock-ը գործում է որպես բլոկի հղում: Hash դաշտի համար մենք ներառում ենք բայթերի դատարկ հատված: Տվյալների դաշտի համար մենք վերցնում ենք տվյալների տողը և այն վերածում բայթերի հատվածի: Եվ մենք prevHash-ը ներառում ենք PrevHash դաշտում:
- Վերջապես, մենք զանգում ենք BuildHash() բլոկի վրա և վերադարձնում ենք բլոկը:
մուտքագրեք BlockChain struct {
բլոկներ []*Cryptoblock
}
- Պահանջվում է տեսակ, որը կօգնի արտահայտել բլոկչեյնը։ Եվ մենք իրականացրեցինք մի ստրուկտ՝ դա իրականացնելու համար: 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:
- Օգտագործելով append ֆունկցիան՝ ավելացնելով այն chain.blocks-ին, այնուհետև մենք կցում ենք նոր բլոկը բլոկչեյնին:
func Inception() *Cryptoblock {
վերադարձնել BuildBlock («Inception», []byte{})
}
- Հաջորդ քայլը Inception կոչվող ֆունկցիայի ստեղծումն է, որը նկարագրելու է բլոկչեյնի առաջին բլոկը: Եվ մենք ֆունկցիայի մեջ կվերադարձնենք նոր BuildBlock՝ առաջին բլոկի տվյալների հետ միասին։ Այստեղ. Ես ներառել եմ «Inception» և բայթերի մի հատված, որը ներկայացնում է դատարկ նախորդ հեշը:
func InitBlockChain() *BlockChain {
վերադարձ &BlockChain{[]*Cryptoblock{Inception()}}
}
- Առաջին բլոկչեյնը ստեղծելու համար ես ներկայացրել եմ InitBlockChain ֆունկցիան։ Այստեղ ես պարզապես վերադարձնում եմ կոնկրետ հղումը BlockChain-ին: Հաջորդը, մենք կառուցում ենք Cryptoblock-ի զանգված, որտեղ մենք զանգ ենք կատարում Inception ֆունկցիային:
func main() {
շղթա := InitBlockChain()
chain.AddBlock («Առաջին բլոկ սկզբից հետո»)
chain.AddBlock («Երկրորդ բլոկ սկզբից հետո»)
chain.AddBlock («Երրորդ բլոկ սկզբից հետո»)
for _, block := range chain.blocks {
fmt.Printf («Նախորդ հեշ. %x\n», բլոկ. PrevHash)
fmt.Printf («Տվյալները բլոկում. %s\n», block. Data)
fmt.Printf(«Հաշ. %x\n», բլոկ.Հաշ)
}
}
- Վերջապես, մենք հասանք հիմնական գործառույթին: Ինչպես տեսնում եք, մենք կանչել ենք InitBlockChain() և այն վերագրել ենք շղթայի փոփոխականին:
- Հաջորդը chain.AddBlock-ի միջոցով բլոկներ ենք ավելացնում շղթային և փոխանցում ենք անհրաժեշտ տվյալները։
- Դրանից հետո մենք գործարկում ենք for loop՝ բլոկչեյնը ստուգելու համար: Այնուհետև մենք առանձնացնում ենք յուրաքանչյուր բլոկ և տպում դաշտերը յուրաքանչյուր բլոկի ներսում։ Մենք պարզապես մուտքագրում ենք.
fmt.Printf («Նախորդ հեշ. %x\n», բլոկ. PrevHash)
fmt.Printf («Տվյալները բլոկում. %s\n», block. Data)
fmt.Printf(«Հաշ. %x\n», բլոկ.Հաշ)
Արդյունք:
Այսպիսով, կարելի է ասել, որ ծրագիրը հաջողված է։ Հուսով եմ, որ դուք կարողացաք հասկանալ բլոկչեյնի հայեցակարգի իրականացումը Golang-ում: Պարզապես շարունակեք պրակտիկան, և դուք կկարողանաք գլուխ հանել բարդ նախագծերից:
Ձեր կրիպտոն արժանի է լավագույն անվտանգությանը: Ստացեք ա Ledger ապարատային դրամապանակ ընդամենը 79 դոլարով:
Աղբյուր՝ https://coinfomania.com/build-a-blockchain-in-golang/