首页 > 其他分享 >实现区块链golang(一)

实现区块链golang(一)

时间:2024-08-07 09:49:18浏览次数:14  
标签:Hash chain 实现 golang block byte 区块 Genesis Block

golang

package main

import (
    "bytes"
    "crypto/sha256"
    "fmt"
)

type BlockChain struct {
    blocks []*Block
}

type Block struct {
    Hash     []byte
    Data     []byte
    PrevHash []byte
}

func (b *Block) DeriveHash() {
    info := bytes.Join([][]byte{b.Data, b.PrevHash}, []byte{})
    hash := sha256.Sum256(info)
    b.Hash = hash[:]
}

func CreateBlock(data string, prevHash []byte) *Block {
    block := &Block{[]byte{}, []byte(data), prevHash}
    block.DeriveHash()
    return block
}

func (chain *BlockChain) AddBlock(data string) {
    prevBlock := chain.blocks[len(chain.blocks)-1]
    new := CreateBlock(data, prevBlock.Hash)
    chain.blocks = append(chain.blocks, new)
}

func Genesis() *Block {
    return CreateBlock("Genesis", []byte{})
}

func InitBlockChain() *BlockChain {
    return &BlockChain{[]*Block{Genesis()}}
}

func main() {
    chain := InitBlockChain()

    chain.AddBlock("First Block after Genesis")
    chain.AddBlock("Second Block after Genesis")
    chain.AddBlock("Third Block after Genesis")

    for _, block := range chain.blocks {
        fmt.Printf("Previous Hash: %x\n", block.PrevHash)
        fmt.Printf("Data in Block: %s\n", block.Data)
        fmt.Printf("Hash: %x\n", block.Hash)
    }
}

 

标签:Hash,chain,实现,golang,block,byte,区块,Genesis,Block
From: https://www.cnblogs.com/apenote/p/18346442

相关文章

  • 通过高德JS API 实现呼吸点
    效果图:核心代码:<scriptlang="ts"setup>import{onMounted,onUnmounted,ref}from'vue';importAMapLoaderfrom'@amap/amap-jsapi-loader';importredImagefrom'@/assets/images/red.png';importorangeI......
  • python 实现FFT快速傅立叶变换算法
    FFT快速傅里叶变换介绍FFT(快速傅里叶变换)是计算离散傅里叶变换(DFT)及其逆变换的一种高效算法。DFT是一种将信号从时域转换到频域的数学工具,而FFT通过减少计算量来加速这一过程。FFT的基本思想FFT利用了DFT中的对称性和周期性,通过分而治之的策略将DFT分解为更小的DFT,从而显......
  • 基于ssm+vue梅溪湖街道房屋在线租赁管理系统的设计与实现【开题+程序+论文】-计算机毕
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人口流动的日益频繁,房屋租赁市场成为了城市经济的重要组成部分。梅溪湖街道作为新兴的城市发展区域,吸引了大量居民和企业的入......
  • 基于ssm+vue随心听音乐播放平台的设计与实现13s22【开题+程序+论文】-计算机毕业设计
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化时代,音乐已成为人们日常生活中不可或缺的精神食粮,它不仅丰富了我们的情感世界,还成为了一种文化交流的桥梁。随着移动互联网技术的飞速发展,音......
  • IC设计企业如何真正实现便捷又高效地云租户文件传输?
    越来越多的IC设计企业选择开通云租户的方式进行半导体芯片的设计和验证工作,也即在HPC环境中进行芯片设计流程,对于IC设计企业而言,使用云租户有明显的好处和优势:资源分配:云平台会根据租户的需求分配相应的资源,如独立的身份ID、虚拟私有云(VPC)等。每个租户都拥有自己独立的资源环境,保......
  • 10 tqdm模块实现进度条_Parallel并行加快速度
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......
  • 设计模式实战:在线教育系统的设计与实现
    问题描述设计一个在线教育系统,支持课程选择、支付流程和用户身份验证。系统需要确保功能的灵活性和可扩展性。设计分析策略模式策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互换。在线教育系统需要支持不同的支付方式(如信用卡支付、PayPal支付),使用策略模式......
  • 【项目实战】在 MyBatis Plus 中添加 `@TableLogic` 注解,以实现逻辑删除
    一,需求描述在MyBatisPlus中实现逻辑删除是一种常见的需求逻辑删除,通常用于避免直接从数据库中物理删除数据,而是标记这些数据为“已删除”。逻辑删除,可以通过在表中添加一个额外的字段(如deleted或is_deleted)来实现。逻辑删除,当该字段为某个值时(例如1或者true),表示这......
  • 【项目实战】整合阿里云短信服务到 Spring Boot 项目中,以实现短信发送功能
    一,需求描述整合阿里云短信服务到SpringBoot项目中,以实现短信发送功能短信商:阿里短信SDK:aliyun-java-sdk-core二,需求实现需要按照以下步骤进行操作:2.1第一步:注册阿里云账号并开通短信服务访问阿里云官网,注册账号并登录。进入短信服务页面,申请并开通短信服务。......
  • 排序算法 归并排序 MergeSort -- C语言实现
    归并排序归并排序(Mergesort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第2种方法);自下......