区块链的生成与基本操作

这篇具有很好参考价值的文章主要介绍了区块链的生成与基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


项目github地址 link

一、项目愿景

通过该项目,能够了解区块链的构成以及如何实现一个功能完善的区块链。

二、项目架构

区块链的生成与基本操作

三、项目特点

1.去中心化
2.可追溯
3.不可篡改

四、项目流程

区块的基本结构与操作

区块链的生成与基本操作
区块头的细节如上图所示。每一个区块由6个部分组成分别为时间戳,前一区块哈希,当前区块哈希,随机数,区块号码(区块高度),merkle根,其中为了方便代码,将merkle根表示为数据。最后的区块的代码如下:

// 实现一个基本的区块结构
type Block struct {
	TimeStamp     int64  //代表区块时间
	Hash          []byte //当前区块hash
	PrevBlockHash []byte //前一区块Hash
	Height        int64  //区块高度
	Data          []byte //存储交易数据(先不考虑merkle树)
}

创建区块

每一个区块都需要以上六个部分,其中,时间戳可以在创建时生成,当前区块哈希与随机数也是创建时生成,所以需要传参为前一区块哈希,区块高度,交易数据
具体的代码如下:

// 新建区块
func newBlock(prevBlockHash []byte, height int64, data []byte) *Block {
	var block Block
	block = Block{
		TimeStamp:     time.Now().Unix(),
		Hash:          nil,
		PrevBlockHash: prevBlockHash,
		Height:        height,
		Data:          data,
	}

	return &block
}

创建创世区块,将其的高度设为1。

// 生成创世区块
func CreateGenesisBlock(data []byte) *Block {
	return NewBlock(nil, 1, data)
}

运行截图
区块链的生成与基本操作

区块链的生成与基本操作

区块链的基本结构
可以采用两种方式进行存放区块,切片与结构体都可以实现。为了更方便的理解,这里采用结构体的方式进行存储。

// 区块链基本结构
type BlockChain struct {
	Blocks []*Block //区块链的切片
}

区块链的操作中,通过区块的添加,实现区块链的延长。

// 添加区块到区块链中
func (bc *BlockChain) AddBlock(prevBlockHash []byte, height int64, data []byte) {
	var newBlock *Block
	newBlock = NewBlock(prevBlockHash, height, data)
	bc.Blocks = append(bc.Blocks, newBlock)
}

但是对于第一个区块而言,由于没有前驱结点, 所以把他作为创世区块单独处理。

// 初始化区块链
func CreateBlockChainWithGenesisBlock() *BlockChain {
	//生成创世区块
	block := CreateGenesisBlock([]byte("the first block"))
	return &BlockChain{[]*Block{block}}
}

最终的加入了创世区块的区块链如下
区块链的生成与基本操作
最终加入了三个区块了区块链如下:
区块链的生成与基本操作

// 启动
func main() {
	//初始化区块链
	blockChain := BLC.CreateBlockChainWithGenesisBlock()
	//fmt.Printf("the first block :%v\n", blockChain)
	//加入第二个区块
	blockChain.AddBlock(blockChain.Blocks[len(blockChain.Blocks)-1].Hash,
		blockChain.Blocks[len(blockChain.Blocks)-1].Height+1, []byte("Alice send 10 btc to bob"))
	//加入第三个区块
	blockChain.AddBlock(blockChain.Blocks[len(blockChain.Blocks)-1].Hash,
		blockChain.Blocks[len(blockChain.Blocks)-1].Height+1, []byte("Bob send 5 btc to Tom"))
	//依次展示区块
	for _, d := range blockChain.Blocks {
		fmt.Printf("prevHash:%v\nnowHash:%v\n", d.PrevBlockHash, d.Hash)
	}
}

验证hash值是否成一条链
区块链的生成与基本操作文章来源地址https://www.toymoban.com/news/detail-431265.html

到了这里,关于区块链的生成与基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • gitlab 基本操作给项目添加成员

    入职新公司,如果给你较高权限让你自己给自己分配项目的权限 查看全部项目 点击扳手,点击Admin Area,点击Project 授权 在搜索栏搜索自己想授权的项目 找到后点击你想授权的项目,再点击项目的setting设置完成授权 或者直接点进项目并点击成员,搜索你的账号并选择,然后

    2024年02月04日
    浏览(45)
  • Docker基本操作【一篇学会项目部署】

    本文均学于“黑马程序员” 本文所用环境:CentOS7 、HeidiSQL 、MobaXterm、MySQL Docker 是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其

    2024年02月06日
    浏览(37)
  • 【Midjourney】Midjourney 基本操作 ① ( 使用 Midjourney 生成图片 | V 按钮继续生成 | U 按钮获取结果 | Midjourney 设置面板 )

    输入的提示词 : ( 啥都不懂 , 随便写的 , 最近在做 露天矿软件 , 使用 Midjourney 生成一批此类图片 ) 生成的图像如下 : 如果要查看当月还剩下多少 GPU 使用时间 , 可以到 Midjourney 官网 https://www.midjourney.com/account/ 查看用了多少 GPU 快速生成模式时间 : 还是 200 分钟 , 没有减少 , 生成

    2024年02月09日
    浏览(50)
  • 【FPGA基础入门实践】Verilog 基本项目操作逐步演示

    0x00 回顾:AND/OR/NOT 逻辑的特性 AND: 与门可以具有两个或更多的输入,并返回一个输出。当所有输入值都为 1 时,输出值为 1。如果输入值中有任何一个为 0,则输出值为 0。 OR: 或门可以具有两个或更多的输入,并返回一个输出。如果输入值中至少有一个为 1,则输出值为

    2024年02月12日
    浏览(38)
  • 【Midjourney】Midjourney 基本操作 ② ( 导出图片 | 设置图片宽高比 | 生成后的图片处理 - 生成变体 / 放大细化图片 / 更换算法重绘 / 浏览器显示 )

    生成图片后 , 可以右键点击图片 , 在弹出的右键菜单中 , 选择 \\\" 保存图片 \\\" , 即可将生成的图片保存到本地 ; 选择保存图片会弹出 \\\" 另存为 \\\" 对话框 , 选择一个路径保存即可 ; 也可以在点开大图后 , 右键点击弹出菜单 , 选择 \\\" 保存图片 \\\" 选项 ; 点击图像下方的 Web 按钮 , 可以在

    2024年02月09日
    浏览(49)
  • 区块链的基本介绍

    目录 1、简介 2、区块链的分类 2.1 公有链 2.2 联盟链 2.3 私有链 3、区块链特征 4、区块链结构 5、区块链对记账权利的分配方式 5.1 POW 5.2 PoS  5.3 DPoS  6、Defi、NFT、 gameFi 7、DAPP  7.1 DAPP 的核心要素 8、比特币 8.1 比特币简介 8.2 比特币数字签名和安全问题 8.3 比特币的分叉和演变

    2024年02月08日
    浏览(53)
  • 区块链的基本概念和架构

    区块链是一种去中心化的分布式账本技术,被广泛应用于加密货币、智能合约和分布式应用等领域。在本文中,我们将深入探讨区块链的基本概念和架构,包括区块、哈希、共识机制和区块链网络等要点。我们还将通过实例展示这些概念的实际应用。 区块是区块链中的基本单

    2024年02月08日
    浏览(46)
  • 【Git】Git(分布式项目管理工具)在Windows本地/命令行中的基本操作以及在gitee中的操作,使用命令行、图形化界面,进行提交,同步,克隆

    介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,

    2024年02月04日
    浏览(72)
  • 区块链的三种基本算法以及实现

    哈希算法,ECDSA算法… 哈希算法就是通过一个单项函数,把任意数据内容,转换为数据指纹的方法. 为什么要把这些内容转换为数据指纹了? 因为内容数据量大,计算机程序直接对内容加载花费时间很长. 数据指纹的数据量很小,并且加了密,很坏很坏的人就无法直接看见你的在区块

    2024年01月17日
    浏览(48)
  • 【SpringBoot】SpringBoot实现基本的区块链的步骤与代码

    以下是Spring Boot实现基本的区块链代码的步骤: 创建一个Block类,它表示一个区块,包含一个区块头和一个区块体。区块头包括版本号、时间戳、前一个区块的哈希值和当前区块的哈希值。区块体包含交易数据。 创建一个Blockchain类,它表示整个区块链,包含一个链列表和一个

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包