使用golang编写代码实现一个简易的区块链,包含如何创建区块、如何加密哈希、如何链接区块等功能

用Golang实现一个简易的区块链的代码示例

package main

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
	"time"
)

// 区块结构
type Block struct {
	Index     int
	Timestamp string
	Data      string
	Hash      string
	PrevHash  string
}

// 创建区块
func createBlock(index int, data, prevHash string) *Block {
	block := &Block{
		Index:     index,
		Timestamp: time.Now().String(),
		Data:      data,
		PrevHash:  prevHash,
	}
	block.Hash = calculateHash(block)
	return block
}

// 计算区块哈希
func calculateHash(block *Block) string {
	record := string(block.Index) + block.Timestamp + block.Data + block.PrevHash
	hash := sha256.Sum256([]byte(record))
	return hex.EncodeToString(hash[:])
}

// 创建创世区块
func createGenesisBlock() *Block {
	return createBlock(0, "Genesis Block", "")
}

// 将区块链接起来形成区块链
type Blockchain struct {
	Blocks []*Block
}

func (bc *Blockchain) initialize() {
	genesisBlock := createGenesisBlock()
	bc.Blocks = []*Block{genesisBlock}
}

func (bc *Blockchain) addBlock(data string) {
	prevBlock := bc.Blocks[len(bc.Blocks)-1]
	newBlock := createBlock(prevBlock.Index+1, data, prevBlock.Hash)
	bc.Blocks = append(bc.Blocks, newBlock)
}

func main() {
	blockchain := Blockchain{}
	blockchain.initialize()

	blockchain.addBlock("Data for Block 1")
	blockchain.addBlock("Data for Block 2")

	for _, block := range blockchain.Blocks {
		fmt.Printf("Index: %d\n", block.Index)
		fmt.Printf("Timestamp: %s\n", block.Timestamp)
		fmt.Printf("Data: %s\n", block.Data)
		fmt.Printf("Hash: %s\n", block.Hash)
		fmt.Printf("PrevHash: %s\n", block.PrevHash)
		fmt.Println("--------------------------")
	}
}

这个简易的区块链包含了创建区块、加密哈希以及链接区块的功能。它定义了一个Block结构表示区块,其中包含了索引、时间戳、数据、哈希和前一个区块哈希。calculateHash函数用于计算区块的哈希值。createBlock函数用于创建一个新的区块,并根据前一个区块的哈希计算自己的哈希。createGenesisBlock函数用于创建创世区块。Blockchain结构用于管理区块链,它包含一个Blocks字段来存储所有的区块。initialize函数用于初始化区块链并创建创世区块。addBlock函数用于向区块链中添加新的区块。

main函数中,我们首先初始化一个区块链,并添加两个新的区块。然后遍历区块链,打印每个区块的信息。

请注意,这只是一个简单的示例,仅仅展示了区块链的基本概念和实现方式。实际的区块链系统可能更加复杂,并包含许多其他的功能和特性。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值