ໃນບົດຄວາມນີ້, ພວກເຮົາຈະສຸມໃສ່ການພັດທະນາ Go blockchain ຕັ້ງແຕ່ເລີ່ມຕົ້ນ. ຢ່າງໃດກໍ່ຕາມ, ກ່ອນທີ່ພວກເຮົາຈະເລີ່ມຕົ້ນ, ທ່ານຄວນແນ່ໃຈວ່າທ່ານຄຸ້ນເຄີຍກັບແນວຄວາມຄິດພື້ນຖານໃນ Golang. ຖ້າບໍ່ແມ່ນ, ມັນຈະສະຫລາດຖ້າທ່ານຜ່ານແນວຄວາມຄິດເບື້ອງຕົ້ນແລະຫຼັງຈາກນັ້ນກັບຄືນສູ່ blockchain.
ດັ່ງນັ້ນ, ໃຫ້ພວກເຮົາໄປກົງກັບຫົວຂໍ້.
ເລີ່ມຕົ້ນດ້ວຍໄດເລກະທໍລີໃຫມ່
ພວກເຮົາຈະສ້າງໄດເລກະທໍລີໃຫມ່ເພື່ອເລີ່ມຕົ້ນດ້ວຍ. ໃຫ້ພວກເຮົາສົມມຸດວ່າໄດເລກະທໍລີນີ້ມີຊື່ "blockchain." ພວກເຮົາຈະພິມລະຫັດໃນ Command Prompt (ຫຼືຖ້າທ່ານໃຊ້ macOS ຫຼື Linux, ທ່ານຕ້ອງໃຊ້ Terminal). ດັ່ງນັ້ນ, ພວກເຮົາພິມ:
cd go-workspace
mkdir blockchain
cd blockchain
ລະຫັດ.
ເມື່ອລະຫັດ VS ເປີດ, ພວກເຮົາຈະສ້າງໂມດູນ Go ໃນ Command Prompt. ພວກເຮົາເຮັດແນວນັ້ນໄດ້ແນວໃດ? ແລ້ວ, ພວກເຮົາພິມ:
ໄປ mod init github.com/golang-company/blockchain
ການຂຽນລະຫັດໃນ main.go
ຕໍ່ໄປ, ພວກເຮົາຈະສ້າງໄຟລ໌ແຫຼ່ງ Go ທີ່ມີຊື່ວ່າ 'main.go' ແລະພວກເຮົາຈະພິມລະຫັດໃສ່ມັນ. ແຕ່ທໍາອິດໃຫ້ພວກເຮົາເຂົ້າໃຈວ່າ blockchain ແມ່ນຫຍັງ. ກ blockchain ອາດຈະຖືກກໍານົດເປັນຖານຂໍ້ມູນສາທາລະນະທີ່ມີການແບ່ງຂັ້ນຄຸ້ມຄອງແລະແຈກຢາຍໃນບັນດາເພື່ອນມິດຫຼາຍໆຄົນ. Blockchain ອະນຸຍາດໃຫ້ຖານຂໍ້ມູນແກ້ໄຂດ້ວຍຕົນເອງ, ເຖິງແມ່ນວ່າ node ກໍາລັງຜະລິດຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງ.
ໂດຍປົກກະຕິແລ້ວ, ຕັນໃນ blockchain ປະກອບດ້ວຍຂໍ້ມູນທີ່ພວກເຮົາແບ່ງປັນໃນຖານຂໍ້ມູນ, hash, ແລະ hash cryptographic ຂອງ block ທີ່ຜ່ານມາ.
ດັ່ງນັ້ນ, ເຈົ້າພ້ອມແລ້ວບໍ? ໄປພັດທະນາ blockchain? ຍິ່ງໃຫຍ່! ໃຫ້ເລີ່ມຕົ້ນ.
ພາກສ່ວນການຂຽນໂປລແກລມ
ໃນພາກນີ້, ພວກເຮົາຈະເບິ່ງເຂົ້າໄປໃນໄຟລ໌ main.go.
ຊຸດຫຼັກ
ນໍາເຂົ້າ (
"ໄບຕ໌"
"crypto/sha256"
"fmt"
)
ປະເພດ Cryptoblock struct {
Hash [] byte
ຂໍ້ມູນ [] byte
PrevHash [] byte
}
- ດັ່ງທີ່ທ່ານສາມາດເຫັນໄດ້, ໂຄງສ້າງພຽງແຕ່ຖືກສ້າງຂື້ນ.
func (c *Cryptoblock) BuildHash() {
ລາຍລະອຽດ := bytes.Join([][] byte{c.Data, c.PrevHash}, []byte{})
hash := sha256.Sum256(ລາຍລະອຽດ)
c.Hash = hash[ : ]
}
- ໃນປັດຈຸບັນພວກເຮົາຈະສ້າງວິທີການທີ່ຈະຊ່ວຍໃຫ້ພວກເຮົາສາມາດສ້າງ hash ຂຶ້ນກັບຂໍ້ມູນແລະ hash ທີ່ຜ່ານມາ. ພວກເຮົາຈະນໍາເຂົ້າຫ້ອງສະຫມຸດ "bytes" ເພາະວ່າພວກເຮົາຈະໃຊ້ມັນ.
- ຂັ້ນຕອນຕໍ່ໄປແມ່ນການສ້າງຕົວແປທີ່ເອີ້ນວ່າລາຍລະອຽດແລະນໍາໃຊ້ຂໍ້ມູນປະເພດ bytes. ພວກເຮົາຈະໃຊ້ Join() ເພື່ອເຊື່ອມຕໍ່ slices ຂອງ bytes.
ລາຍລະອຽດ := bytes.Join([][] byte{c.Data, c.PrevHash}, []byte{})
ທີ່ນີ້, ພວກເຮົາກໍາລັງກິນ 2D slice ຂອງ bytes, ພວກເຮົາສົ່ງ c.Data ແລະ hash ທີ່ຜ່ານມາ. ຫຼັງຈາກນັ້ນ, ພວກເຮົາຈະສົມທົບການ slice ຫວ່າງເປົ່າຂອງ bytes.
- ປະຕິບັດຕາມນີ້, ພວກເຮົາກໍາລັງສ້າງ hash ຕົວຈິງການຊ່ວຍເຫຼືອຂອງ sum256 hashing function ກ່ຽວກັບລາຍລະອຽດ. ພວກເຮົາສາມາດໃຊ້ສິ່ງນີ້ໄດ້ຍ້ອນວ່າພວກເຮົາຈະນໍາເຂົ້າຫ້ອງສະຫມຸດ sha256.
- ຕໍ່ໄປ, ພວກເຮົາຍູ້ hash ທີ່ສ້າງຂຶ້ນເຂົ້າໄປໃນຊ່ອງ Hash ສໍາລັບຕັນ.
func BuildBlock (ສາຍຂໍ້ມູນ, prevHash [] byte) *Cryptoblock {
block := &Cryptoblock{[]byte{}, []byte(data), prevHash}
block.BuildHash()
ບລັອກກັບຄືນ
}
- ດຽວນີ້ພວກເຮົາຈະສ້າງຟັງຊັນທີ່ຊ່ວຍໃຫ້ການສ້າງ Block ໄດ້. ຟັງຊັນຮັບສາຍຂໍ້ມູນເປັນການປ້ອນຂໍ້ມູນ, prevHash ຈາກບລັອກກ່ອນໜ້າເປັນການປ້ອນຂໍ້ມູນ, ແລະຫຼັງຈາກນັ້ນສົ່ງຜົນການອ້າງອີງເຖິງ Cryptoblock. ພວກເຮົາຈະສ້າງບລັອກໂດຍໃຊ້ຕົວສ້າງຕັນ.
- The &Cryptoblock ເຮັດຫນ້າທີ່ເປັນການອ້າງອີງເຖິງບລັອກ. ສໍາລັບຊ່ອງຂໍ້ມູນ Hash, ພວກເຮົາລວມເອົາຊ່ອງຫວ່າງຂອງ bytes. ສໍາລັບພາກສະຫນາມຂໍ້ມູນ, ພວກເຮົາເອົາສາຍຂໍ້ມູນແລະປ່ຽນເປັນ slice ຂອງ bytes. ແລະພວກເຮົາລວມ prevHash ເຂົ້າໄປໃນພາກສະຫນາມ PrevHash.
- ສຸດທ້າຍ, ພວກເຮົາໂທຫາ BuildHash () ໃນບລັອກແລະພວກເຮົາສົ່ງຄືນບລັອກ.
ປະເພດ BlockChain struct {
ບລັອກ []*Cryptoblock
}
- ປະເພດທີ່ຈະຊ່ວຍໃນການສະແດງ blockchain ແມ່ນຕ້ອງການ. ແລະພວກເຮົາໄດ້ປະຕິບັດໂຄງສ້າງເພື່ອເຮັດສໍາເລັດນີ້. ປະເພດຂອງ BlockChain struct ແມ່ນປະກອບດ້ວຍອາເຣຂອງຕົວຊີ້ໄປຫາ Cryptoblock.
func (ຕ່ອງໂສ້ *BlockChain) AddBlock(ສາຍຂໍ້ມູນ) {
prevBlock := chain.blocks[len(chain.blocks)-1]
ໃຫມ່ := BuildBlock(ຂໍ້ມູນ, prevBlock.Hash)
chain.blocks = append(chain.blocks, ໃຫມ່)
}
- ນີ້, ພວກເຮົາກໍາລັງສ້າງວິທີການເຮັດໃຫ້ພວກເຮົາສາມາດເຂົ້າຮ່ວມຕັນກັບຕ່ອງໂສ້. ວິທີການດຶງຕົວຊີ້ blockchain. ປະຕິບັດຕາມນີ້, ມັນຍອມຮັບສາຍຂໍ້ມູນ.
- ໂທຫາ chain.blocks, ພວກເຮົາໄປຫາຕັນທີ່ຜ່ານມາໃນ blockchain. ຕໍ່ໄປ, ພວກເຮົາຜ່ານຄວາມຍາວຂອງ blockchain [len(chain.blocks)-1].
- ໃນຕົວແປໃຫມ່, ພວກເຮົາກໍາລັງໂທຫາຟັງຊັນ BuildBlock ແລະພວກເຮົາກໍາລັງຖ່າຍທອດຂໍ້ມູນ string ແລະ prevBlock.Hash.
- ໂດຍການນໍາໃຊ້ຫນ້າທີ່ເພີ່ມເຕີມ, ເພີ່ມນີ້ໃສ່ chain.blocks, ຫຼັງຈາກນັ້ນພວກເຮົາຕິດຕັນໃຫມ່ກັບ blockchain.
func Inception() *Cryptoblock {
ກັບຄືນ BuildBlock(“Inception”, []byte{})
}
- ຂັ້ນຕອນຕໍ່ໄປແມ່ນການສ້າງຫນ້າທີ່ທີ່ເອີ້ນວ່າ Inception ທີ່ຈະອະທິບາຍເຖິງບລັອກທໍາອິດຂອງ blockchain. ແລະພວກເຮົາຈະກັບຄືນ BuildBlock ໃຫມ່ໃນຫນ້າທີ່, ພ້ອມກັບຂໍ້ມູນໃນບລັອກທໍາອິດ. ທີ່ນີ້. ຂ້ອຍໄດ້ລວມເອົາ "ການເລີ່ມຕົ້ນ" ແລະບາງສ່ວນຂອງ bytes ເຊິ່ງເປັນຕົວແທນຂອງ hash ທີ່ຜ່ານມາຫວ່າງເປົ່າ.
func InitBlockChain() *BlockChain {
ກັບຄືນ &BlockChain{[]*Cryptoblock{Inception()}}
}
- ເພື່ອສ້າງ blockchain ທໍາອິດ, ຂ້າພະເຈົ້າໄດ້ນໍາສະເຫນີຫນ້າທີ່ InitBlockChain. ທີ່ນີ້, ຂ້າພະເຈົ້າພຽງແຕ່ກັບຄືນການອ້າງອີງໂດຍສະເພາະກັບ BlockChain. ຕໍ່ໄປ, ພວກເຮົາສ້າງ array ຂອງ Cryptoblock, ບ່ອນທີ່ພວກເຮົາໂທຫາຫນ້າທີ່ເລີ່ມຕົ້ນ.
func main() {
ລະບົບຕ່ອງໂສ້ := InitBlockChain()
chain.AddBlock(“ບຼັອກທຳອິດຫຼັງການເລີ່ມຕົ້ນ”)
chain.AddBlock(“ບລັອກທີສອງຫຼັງຈາກການເລີ່ມຕົ້ນ”)
chain.AddBlock(“ທ່ອນທີສາມຫຼັງຈາກການເລີ່ມຕົ້ນ”)
ສໍາລັບ _, block := range chain.blocks {
fmt.Printf(“Hash ກ່ອນໜ້າ: %x\n”, block.PrevHash)
fmt.Printf(“Data in Block: %s\n”, block.Data)
fmt.Printf(“Hash: %x\n”, block.Hash)
}
}
- ໃນທີ່ສຸດ, ພວກເຮົາໄດ້ມາຮອດຫນ້າທີ່ຕົ້ນຕໍ. ດັ່ງທີ່ເຈົ້າສາມາດເຫັນໄດ້ວ່າພວກເຮົາໄດ້ເອີ້ນວ່າ InitBlockChain() ແລະພວກເຮົາໄດ້ມອບຫມາຍໃຫ້ຕົວແປຂອງລະບົບຕ່ອງໂສ້.
- ຕໍ່ໄປ, ພວກເຮົາກໍາລັງເພີ່ມບລັອກຜ່ານລະບົບ chain.AddBlock, ແລະພວກເຮົາຜ່ານຂໍ້ມູນທີ່ຈໍາເປັນ.
- ປະຕິບັດຕາມນີ້, ພວກເຮົາດໍາເນີນການສໍາລັບ loop ເພື່ອກວດສອບ blockchain ໄດ້. ຫຼັງຈາກນັ້ນ, ພວກເຮົາແຍກແຕ່ລະຕັນແລະພິມພາກສະຫນາມພາຍໃນແຕ່ລະຕັນ. ພວກເຮົາພຽງແຕ່ພິມ:
fmt.Printf(“Hash ກ່ອນໜ້າ: %x\n”, block.PrevHash)
fmt.Printf(“Data in Block: %s\n”, block.Data)
fmt.Printf(“Hash: %x\n”, block.Hash)
ຜົນໄດ້ຮັບ:
ດັ່ງນັ້ນ, ພວກເຮົາສາມາດເວົ້າໄດ້ວ່າໂຄງການແມ່ນປະສົບຜົນສໍາເລັດ. ຂ້າພະເຈົ້າຫວັງວ່າທ່ານຈະສາມາດເຂົ້າໃຈການປະຕິບັດແນວຄວາມຄິດຂອງ blockchain ໃນ Golang ໄດ້. ພຽງແຕ່ສືບຕໍ່ປະຕິບັດແລະທ່ານຈະສາມາດຈັດການກັບໂຄງການ intricate.
crypto ຂອງເຈົ້າສົມຄວນໄດ້ຮັບຄວາມປອດໄພທີ່ດີທີ່ສຸດ. ໄດ້ຮັບ ກ Ledger hardware wallet ພຽງ $79!
ທີ່ມາ: https://coinfomania.com/build-a-blockchain-in-golang/