Yn yr erthygl hon, byddwn yn canolbwyntio ar ddatblygiad blockchain Go o'r dechrau. Fodd bynnag, cyn i ni ddechrau, dylech fod yn sicr eich bod yn gyfarwydd â'r cysyniadau sylfaenol yn Golang. Os na, yna mae'n ddoeth os ewch chi drwy'r cysyniadau rhagarweiniol ac yna dod yn ôl i blockchain.
Felly, gadewch inni fynd yn syth at y pwnc.
Dechreu gyda Chyfeirlyfr Newydd
Byddwn yn adeiladu cyfeiriadur newydd i ddechrau. Gadewch inni dybio bod gan y cyfeiriadur hwn yr enw “blockchain.” Byddwn yn teipio'r cod yn y Command Prompt (neu os ydych chi'n defnyddio macOS neu Linux, mae'n rhaid i chi ddefnyddio'r Terminal). Felly, rydym yn teipio:
cd go-lle gwaith
mkdir blockchain
cd blockchain
côd .
Wrth i'r Cod VS agor, byddwn yn creu modiwl Go yn y Command Prompt. Sut ydym ni'n gwneud hynny? Wel, rydyn ni'n teipio:
ewch mod init github.com/golang-company/blockchain
Codio yn main.go
Nesaf, byddwn yn creu ffeil ffynhonnell Go o'r enw 'main.go' a byddwn yn teipio'r cod ynddo. Ond yn gyntaf gadewch inni ddeall beth yw blockchain. A blockchain gellir ei ddiffinio fel cronfa ddata gyhoeddus sy'n cael ei datganoli a'i dosbarthu ymhlith nifer o gymheiriaid. Mae Blockchain yn caniatáu i'r gronfa ddata hunan-gywiro, hyd yn oed os yw nod yn cynhyrchu data anghywir.
Fel arfer, mae bloc ar blockchain yn cynnwys data rydyn ni'n ei rannu yn y gronfa ddata, hash, a stwnsh cryptograffig y bloc blaenorol.
Felly, a ydych yn barod ar gyfer Ewch datblygiad blockchain? Gwych! Gadewch i ni ddechrau.
Rhan Rhaglennu
Yn yr adran hon, byddwn yn edrych i mewn i'r ffeil main.go.
prif becyn
mewnforio (
"beit"
“crypto/sha256”
"Fmt"
)
teipiwch strwythur Cryptoblock {
Hash [] beit
Data [] beit
PrevHash [] beit
}
- Fel y gwelwch, dim ond strwythur sydd wedi'i greu.
func (c *Cryptoblock) BuildHash() {
manylion := bytes.Join([][] beit{c.Data, c.PrevHash}, []beit{})
hash := sha256.Sum256(manylion)
c.Hash = hash[ :]
}
- Byddwn nawr yn adeiladu dull a fydd yn ein galluogi i gynhyrchu hash yn dibynnu ar y data a'r stwnsh blaenorol. Byddwn yn mewnforio'r llyfrgell “beit” oherwydd byddwn yn ei defnyddio.
- Y cam nesaf yw creu newidyn o'r enw manylion a defnyddio'r bytes math o ddata. Byddwn yn defnyddio Join() i gysylltu'r tafelli o beit.
manylion := bytes.Join([][] beit{c.Data, c.PrevHash}, []beit{})
Yma, rydym yn cymryd sleisen 2D o beit, rydym yn trosglwyddo'r c.Data a'r hash blaenorol. Yna byddwn yn cyfuno'r sleisen wag o bytes.
- Yn dilyn hyn, rydym yn creu'r hash gwirioneddol gan gymryd help y swyddogaeth stwnsio swm256 ar y manylion. Gallwn ddefnyddio hwn gan y byddwn yn mewnforio'r llyfrgell sha256.
- Nesaf, rydyn ni'n gwthio'r hash a grëwyd i'r cae Hash ar gyfer y bloc.
func BuildBlock (llinyn data, prevHash [] beit) *Cryptoblock {
bloc := &Cryptoblock{[]beit{}, []beit(data), prevHash}
bloc.BuildHash()
bloc dychwelyd
}
- Byddwn nawr yn adeiladu swyddogaeth sy'n galluogi creu Bloc. Mae'r swyddogaeth yn derbyn llinyn o ddata fel mewnbwn, prevHash o'r bloc blaenorol fel mewnbwn, ac yna'n allbynnu cyfeiriad at Cryptoblock. Byddwn yn adeiladu'r bloc gan ddefnyddio'r constructor bloc.
- Mae'r &Cryptoblock yn gweithredu fel cyfeiriad at y bloc. Ar gyfer cae Hash, rydym yn ymgorffori sleisen wag o beit. Ar gyfer maes Data, rydym yn cymryd y llinyn data a'i drawsnewid yn sleisen o beit. Ac rydym yn ymgorffori prevHash i faes PrevHash.
- Yn olaf, rydyn ni'n galw'r BuildHash () ar y bloc ac rydyn ni'n dychwelyd y bloc.
teipiwch strwythur BlockChain {
blociau [] * Cryptoblock
}
- Mae angen math a fydd yn helpu i fynegi'r blockchain. Ac fe wnaethom weithredu strwythur i gyflawni hyn. Mae'r math BlockChain struct yn cynnwys amrywiaeth o awgrymiadau i Cryptoblock.
func (cadwyn *BlockChain) AddBlock (llinyn data) {
prevBlock := cadwyn.blociau[len(chain.blocks)-1]
newydd := BuildBlock(data, prevBlock.Hash)
chain.blocks = atodi(chain.blocks, newydd)
}
- Yma, rydym yn creu dull sy'n ein galluogi i ymuno â bloc i'r gadwyn. Mae'r dull yn adfer y pwyntydd blockchain. Yn dilyn hyn, mae'n derbyn llinyn data.
- Gan alw chain.blocks, rydym yn cyrraedd y bloc blaenorol yn y blockchain. Nesaf, aethom ni heibio hyd y blockchain [len(chain.blocks)-1].
- Yn y newidyn newydd, rydym yn galw'r swyddogaeth BuildBlock ac rydym yn pasio llinyn data a prevBlock.Hash.
- Trwy ddefnyddio'r swyddogaeth atodiad, gan ychwanegu hwn at y chain.blocks, rydym wedyn yn atodi'r bloc newydd i'r blockchain.
func Cychwyn() *Cryptoblock {
dychwelyd BuildBlock("Inception", []beit{})
}
- Y cam nesaf yw creu swyddogaeth o'r enw Inception a fydd yn disgrifio bloc cyntaf y blockchain. A byddwn yn dychwelyd BuildBlock newydd yn y swyddogaeth, ynghyd â'r data yn y bloc cyntaf. Yma. Rwyf wedi ymgorffori “Inception” a thafell o beit sy'n cynrychioli stwnsh blaenorol gwag.
func InitBlockChain() *BlockChain {
dychwelyd &BlockChain{[]*Cryptoblock{Inception()}}
}
- Er mwyn creu'r blockchain cyntaf, rwyf wedi cyflwyno'r swyddogaeth InitBlockChain. Yma, rwy'n dychwelyd y cyfeiriad penodol at y BlockChain yn unig. Nesaf, rydym yn adeiladu amrywiaeth o Cryptoblock, lle rydym yn gwneud galwad i'r swyddogaeth Inception.
prif func () {
cadwyn := InitBlockChain()
chain.AddBlock("Bloc Cyntaf ar ôl Cychwyn")
chain.AddBlock("Ail Floc ar ôl Cychwyn")
chain.AddBlock("Trydydd Bloc ar ôl Cychwyn")
am _, bloc := range chain.blocks {
fmt.Printf("Hash blaenorol: %x\n", block.PrevHash)
fmt.Printf("Data mewn Bloc: %s\n", bloc.Data)
fmt.Printf("Hash: %x\n", block.Hash)
}
}
- Yn olaf, rydym wedi cyrraedd y brif swyddogaeth. Fel y gallwch weld rydym wedi galw'r InitBlockChain () ac rydym wedi ei neilltuo i'r newidyn cadwyn.
- Nesaf, rydym yn ychwanegu blociau i'r gadwyn trwy chain.AddBlock, ac rydym yn pasio'r data angenrheidiol.
- Yn dilyn hyn, rydym yn rhedeg am ddolen i wirio am y blockchain. Yna rydyn ni'n tynnu sylw at bob bloc ac yn argraffu'r meysydd y tu mewn i bob bloc. Rydyn ni'n teipio:
fmt.Printf("Hash blaenorol: %x\n", block.PrevHash)
fmt.Printf("Data mewn Bloc: %s\n", bloc.Data)
fmt.Printf("Hash: %x\n", block.Hash)
Allbwn:
Felly, gallwn ddweud bod y rhaglen yn llwyddiannus. Rwy'n gobeithio eich bod wedi gallu deall gweithrediad y cysyniad o blockchain yn Golang. Daliwch ati i ymarfer a byddwch yn gallu delio â phrosiectau cymhleth.
Mae eich crypto yn haeddu'r diogelwch gorau. Gael Waled caledwedd cyfriflyfr am ddim ond $79!
Ffynhonnell: https://coinfomania.com/build-a-blockchain-in-golang/