我们定义一个区块链,每个区块包含一个时间戳、交易数据、前一个区块的哈希值和当前区块的哈希值。
package main
import (
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"time"
)
// Block 结构体
type Block struct {
Index int
Timestamp string
Transactions []string
PrevBlockHash string
Hash string
}
// Blockchain 结构体
type Blockchain struct {
Blocks []Block
}
// NewBlockchain 创建一个新的区块链
func NewBlockchain() *Blockchain {
return &Blockchain{}
}
// AddBlock 添加一个新的区块到区块链
func (bc *Blockchain) AddBlock(transactions []string) {
prevBlock := bc.Blocks[len(bc.Blocks)-1]
newBlock := Block{
Index: prevBlock.Index + 1,
Timestamp: time.Now().String(),
Transactions: transactions,
PrevBlockHash: prevBlock.Hash,
}
newBlock.Hash = newBlock.CalculateHash()
bc.Blocks = append(bc.Blocks, newBlock)
}
// CalculateHash 计算区块的哈希值
func (b *Block) CalculateHash() string {
record := fmt.Sprintf("%d%s%v%s", b.Index, b.Timestamp, b.Transactions, b.PrevBlockHash)
h := sha256.New()
h.Write([]byte(record))
return hex.EncodeToString(h.Sum(nil))
}
// PrintBlockchain 打印区块链的内容
func (bc *Blockchain) PrintBlockchain() {
for _, block := range bc.Blocks {
fmt.Printf("Block %d\n", block.Index)
fmt.Printf("Timestamp: %s\n", block.Timestamp)
fmt.Printf("Transactions: %v\n", block.Transactions)
fmt.Printf("PrevBlockHash: %s\n", block.PrevBlockHash)
fmt.Printf("Hash: %s\n", block.Hash)
fmt.Println("----------------------------")
}
}
func main() {
// 创建一个新的区块链
blockchain := NewBlockchain()
blockchain.Blocks = append(blockchain.Blocks, Block{
Index: 0,
Timestamp: time.Now().String(),
Transactions: []string{"Genesis Block"},
PrevBlockHash: "",
Hash: "0",
})
// 添加一些区块
blockchain.AddBlock([]string{"Alice -> Bob: 10 BTC"})
blockchain.AddBlock([]string{"Bob -> Charlie: 5 BTC"})
// 打印区块链
blockchain.PrintBlockchain()
}
Block
结构体包含区块的基本信息,如索引、时间戳、交易记录、前一个区块的哈希值和当前区块的哈希值。Blockchain
结构体包含一个区块数组,用于存储整个区块链。运行程序后,你会看到类似以下的输出:
Block 0
Timestamp: 2025-01-20 15:00:00 +0800 CST
Transactions: [Genesis Block]
PrevBlockHash:
Hash: 0
----------------------------
Block 1
Timestamp: 2025-01-20 15:00:01 +0800 CST
Transactions: [Alice -> Bob: 10 BTC]
PrevBlockHash: <hash-of-block-0>
Hash: <hash-of-block-1>
----------------------------
Block 2
Timestamp: 2025-01-20 15:00:02 +0800 CST
Transactions: [Bob -> Charlie: 5 BTC]
PrevBlockHash: <hash-of-block-1>
Hash: <hash-of-block-2>
----------------------------
这个示例是一个非常基础的区块链实现,主要用于理解区块链的基本结构和工作原理。在实际应用中,区块链还需要实现共识机制(如 PoW、PoS)、网络通信、智能合约等功能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。