用go语言写一个简易区块链系统
时间: 2023-12-31 12:06:45 浏览: 19
好的,以下是一个简单的区块链系统的Go语言实现:
```go
package main
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"time"
)
// 区块结构体
type Block struct {
Index int
Timestamp string
Data string
PrevHash string
Hash string
}
// 生成区块的函数
func GenerateBlock(prevBlock Block, data string) Block {
var newBlock Block
newBlock.Index = prevBlock.Index + 1
newBlock.Timestamp = time.Now().String()
newBlock.Data = data
newBlock.PrevHash = prevBlock.Hash
newBlock.Hash = CalculateHash(newBlock)
return newBlock
}
// 计算区块哈希值的函数
func CalculateHash(block Block) string {
record := string(block.Index) + block.Timestamp + block.Data + block.PrevHash
h := sha256.New()
h.Write([]byte(record))
hashed := h.Sum(nil)
return hex.EncodeToString(hashed)
}
func main() {
// 创世区块
genesisBlock := Block{0, time.Now().String(), "Genesis Block", "", ""}
genesisBlock.Hash = CalculateHash(genesisBlock)
// 打印创世区块信息
fmt.Printf("Genesis Block:\nIndex: %d\nTimestamp: %s\nData: %s\nPrevHash: %s\nHash: %s\n",
genesisBlock.Index, genesisBlock.Timestamp, genesisBlock.Data, genesisBlock.PrevHash, genesisBlock.Hash)
// 生成新的区块
block2 := GenerateBlock(genesisBlock, "Data of Block 2")
// 打印新生成的区块信息
fmt.Printf("\nNew Block:\nIndex: %d\nTimestamp: %s\nData: %s\nPrevHash: %s\nHash: %s\n",
block2.Index, block2.Timestamp, block2.Data, block2.PrevHash, block2.Hash)
}
```
该程序实现了一个简单的区块链系统,包括区块的定义、创世区块的生成、区块哈希值的计算和新区块的生成等功能。可以在此基础上进一步完善代码,实现更复杂的区块链系统。