2、go语言区块链--基础区块链的实现

文件名:blockchain.go

package main

//在这个文件里面,是把每一个区块连起来,怎么连?
//每一个区块,都包含上一个区块的hash,就是使用这个hash将每个区块进行链接。

import (
    "fmt"
)

//Blockchain 定义一个机构体,来存储这条链
type Blockchain struct {
    //这里就是每个区块组成的切片(slice),这里为什么使用切片而不用数组,
    //因为数组定义好后,是不允许再更改长度,而slice,没有这个要求
    blocks []*Block
}

//NewBlockchain 创建一个新的区块链
func NewBlockchain() *Blockchain {
    return &Blockchain{[]*Block{NewGenesisBlock()}}
}

//AddBlock 在区块链中添加一个区块
func (bc *Blockchain) AddBlock(data string) {
    //前一个区块是当前区块的长度减1
    prevBlock := bc.blocks[len(bc.blocks)-1]
    fmt.Println("prevBlock:", prevBlock)

    //当前区块的设置
    newblock := NewBlock(data, prevBlock.Hash)
    fmt.Println("newblock:", newblock)

    //将新生成的区块,添加到列表中
    bc.blocks = append(bc.blocks, newblock)
    fmt.Println("bc.blocks:", bc.blocks)
}

//这个main函数也是调试用,现在我们把它抽取到一个单独的文件中
//第一个block.go里面的main函数要去掉哦
func main() {
    bc := NewBlockchain()
    fmt.Println(bc)
    bc.AddBlock("test1")
}

github:https://github.com/jusorlee/go-blockchain-learn

阅读更多

更多精彩内容