添加区块到区块链当中003

2023-11-08

package main

import (
	"crypto/sha256"
	"fmt"
)

//0 定义结构
// 创建前哈希值 创建当前哈希值 和数据
type Block struct {
	Prevhash []byte //前哈希
	Hash []byte   //当前哈希 TODO
	Data []byte   //数据
}

//创建一个区块
func NewBlock(data string,prevBlockHash []byte)  *Block {
	block:=Block{
		Prevhash: prevBlockHash,
		Hash: []byte{},  //当前的先默认为空的  后面再计算
		Data:[]byte(data), //传过来的肯定是字符串 转byte
	}
	block.SetHash()
	return &block
}

//3 将区块生成哈希 SetHash()方法来生成  传递的是结构的类
func (block *Block) SetHash()  {
	//拼接数据 前哈希加上当前区块的数据
	blcokInfo:=	append(block.Prevhash,block.Data...)
	//调用哈希方法生成
	hash:=sha256.Sum256(blcokInfo)
	block.Hash=hash[:]
}

// 4. 引入区块链  就是把block连接起来
// 4-1 定义区块链结构
type BlockChain struct {
	//定义一个区块链数组
	blocks []*Block
}

// 5. 定义(创建)一个区块链   注意 定义区块链要弄一个创世区块
func  NewBlockChain() *BlockChain{
	// 创建一个创世区块 并作为第一个添加到区块链当中
	genesisBlock:=genesisBlock()
	return &BlockChain{
		blocks:[]*Block{genesisBlock},

	}
}

//定义一个创世区块
func genesisBlock()   *Block {
	return NewBlock("我是创世区块",[]byte{})
}

// 5. 添加区块代码  需要区块前哈希
func (bc *BlockChain)  AddBlock(data string)  {
	lastBlock:= bc.blocks[len(bc.blocks)-1]
	//获取最后一个区块链的区块前的哈希
	prevHash:=lastBlock.Prevhash
	//创建新的区块
	block:= NewBlock(data,prevHash)
	//添加到区块数组里面
	bc.blocks=append(bc.blocks,block)
}


// 6. 重构代码

func main()  {

	//创建一个区块链
	bc:=NewBlockChain()  //创建完是一个数组 对数组循环遍历

	bc.AddBlock("班长向班花转了50枚比特币")
	bc.AddBlock("班长向班花又转了50枚比特币")


	for i,block:=range bc.blocks{
		fmt.Printf("当前区块高度: %x\n",i)
		fmt.Printf("前区块的哈希是: %x\n",block.Prevhash)
		fmt.Printf("当前区块的哈希是: %x\n",block.Hash)
		fmt.Printf("当前区块的数据是: %s\n",block.Data)
	}
	
	//block:=  NewBlock("老师让班长转一枚比特币给我",[]byte{})
	//fmt.Printf("前区块的哈希是: %x\n",block.Prevhash)
	//fmt.Printf("当前区块的哈希是: %x\n",block.Hash)
	//fmt.Printf("当前区块的数据是: %s\n",block.Data)

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加区块到区块链当中003 的相关文章

  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • 使用Docker registry镜像创建私有仓库

    2015 01 25 wcdj 摘要 安装Docker后 可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境 本文记录简单的搭建过程 1 使用registry启动私有仓库的容器 docker run d p 5000 50
  • Go的并发的退出

    有时候我们需要通知goroutine停止它正在干的事情 比如一个正在执行计算的web服务 然而它的客户端已经断开了和服务端的连接 Go语言并没有提供在一个goroutine中终止另一个goroutine的方法 由于这样会导致goroutin
  • 【Golang入门】Golang第一天心得

    生活所迫 入门一下Go 很奇葩的第一点 接口 package main import fmt 定义一个接口 type Shape interface Area float64 定义一个矩形类型 type Rectangle struct W
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • go字符串详解

    文章目录 摘要 1 byte和rune类型 2 字符串 string 3 练习 反转字符串 摘要 go字符串结构体包含 指向底层存储数组的指针 字符串长度 字符串按utf 8将字符编码成二进制数 然后存储在byte数组中 因为utf 8编码
  • Go语言入门【09】结构体

    结构体 相比于Java 在Go语言中没有类的概念 但是多了结构体 结构体与Java中的类很像 是表示一系列同一类型或不同类型的数据构成的数据集合 例如可以将学生抽象成一个结构体 每一个学生有以下属性 Name 姓名 Age 年龄 Gende
  • Go_关键字、编译、转义字符

    关键字 关键字是指被go语言赋予了特殊含义的单词 共25个 关键字不能用于自定义名字 只能在特定语法结构中使用 break default func interface select case defer go map struct cha
  • golang sleep

    golang的休眠可以使用time包中的sleep 函数原型为 func Sleep d Duration 其中的Duration定义为 type Duration int64 Duration的单位为 nanosecond 为了便于使用
  • 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)

    要在 Go 中编写密码校验规则 确保密码不少于8位且包含数字和字母 你可以使用正则表达式和 Go 的 regexp 包来实现 以下是一个示例代码 错误示范 package main import fmt regexp func valida
  • go 进阶 gin实战相关: 五. gin_scaffold 企业脚手架

    目录 一 gin scaffold 企业级脚手架 二 gin scaffold 脚手架安装及使用演示 文件分层解释 开始使用 1 配置开启go mod 功能 2 下载 安装 gin scaffold 3 整合 golang common 4
  • Go Web编程实战(10)----模板引擎库text/template包的使用

    目录 前言 模板引擎 定义模板文件 解析模板文件 渲染模板 实战使用模板 创建 tmpl文件 创建文件用于解析与渲染模板 前言 在Go语言中 模板引擎库text template包主要用于处理任意格式的文本内容 同时还提供了html tem
  • Go语言包管理(一)

    Go语言中的包 我们在使用其他语言 比如Java Python 都有类似包的概念 Go也不例外 其核心思想即为分组和模块化 人的大脑对庞大和复杂的事情很难掌控 可以对其采用分而治之的策略 使其模块化 从而更容易管理 如下是标准库中net包的
  • Go 语言输出文本函数详解

    Go语言拥有三个用于输出文本的函数 Print Println Printf Print 函数以其默认格式打印其参数 示例 打印 i 和 j 的值 package main import fmt func main var i j stri
  • 为什么最近听说 Go 岗位很少很难?

    大家好 我是煎鱼 其实这个话题已经躺在我的 TODO 里很久了 近来很多社区的小伙伴都私下来交流 也有在朋友圈看到朋友吐槽 Go 上海的大会没什么人 还不如 Rust 大会 比较尴尬 今天主要是看看为什么 Go 岗位看起来近来很难的样子 也
  • go-zero目录结构和说明

    code of conduct md 行为准则 CONTRIBUTING md 贡献指南 core 框架的核心组件 bloom 布隆过滤器 用于检测一个元素是否在一个集合中 breaker 熔断器 用于防止过多的请求导致系统崩溃 cmdli
  • Go 语言中切片的使用和理解

    切片与数组类似 但更强大和灵活 与数组一样 切片也用于在单个变量中存储相同类型的多个值 然而 与数组不同的是 切片的长度可以根据需要增长和缩小 在 Go 中 有几种创建切片的方法 使用 datatype values 格式 从数组创建切片
  • 这套Go语言开发框架组合真的非常高效

    我尝试过很多框架 从Django Flask和Laravel到NextJS和SvelteKit 到目前为止 这是我唯一可以使用的不会让我感到疯狂或者放弃项目的堆栈 框架 我喜欢所有这些框架 但我只是不太适应它们的设计方式 实际上 我是一个弱
  • Go、Docker、云原生学习笔记全攻略:从零开始,一步步走向精通!(2024版)

    第一章 Go语言学习宝典 一 介绍 01 Go 语言的前生今世 二 开发环境搭建 01 Go 语言开发环境搭建 三 初识GO语言 01 Go 多版本管理工具 02 第一个 Go 程序 hello world 与 main 函数 03 Go
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github

随机推荐

  • XMPP客户端库Smack 4.1.4版官方开发文档之一

    本文转载自 博客主页 http blog csdn net chszs 一 Smack库概述 Smack是一个开源 易用的XMPP Jabber客户端库 它使用Java语言开发 由Jive Software开发 Smack的优点是编程简单
  • 利用python,2分钟完成1000台路由器的配置或备份

    0 实现要求 通过2个简单的脚本 检测任意网段中ssh可达的设备并链接 同时对所有设备写入任意华为命令脚本 并记录设备回显的所有内容 如1000台设备 dis cu 显示结果 1 实验准备 此处主要是华为的设备 模拟器使用ensp 4台路由
  • 详谈IEEE浮点数编码机制

    在一些工程领域中单单依靠整数是无法满足他们对精度的需求的 这种时候就需要用到浮点数了 今天着重来聊一聊在计算机底层 浮点数的编码方式 以及它相关值的计算方式 二进制小数 在介绍浮点数之前先来看看二进制中实数可以如何表示 假设我有一个十进制的
  • VS2019中QT槽函数连接及使用

    1 qt连接VS 连接前提是在下载qt的时候将 MSVC 2017装上 点击扩展 选择管理扩展 搜索qt 选择下载 之后下载结束并重新打开后 会弹出一个 QT option 将路径填进去 2 VS中qt的使用 在qt中可以直接添加信号与槽
  • Windows如何关闭电脑休眠(适用所有Windows系统版本)

    方法一 此方法适用所有Windows系统版本电脑 1 点击开始按钮 在搜索框中输入cmd 右键点击选择以管理员身份运行 2 在打开的命令提示符窗口中 输入命令 powercfg h off 然后回车就可以了 3 如果想重新开启休眠功能 同样
  • 时间选择组件默认显示前7天日期

    1 div class st time div
  • windows下openGLES 3.0 配合 vs 环境搭建(二)

    在 http blog csdn net dardgen2015 article details 51563914 中 讨论了怎样搭建openGLes 3 0的环境 但是这种方法需要CMake的配合 不是很方便 接下来我们看看怎样搭建可以不
  • Double型比较大小 compareTo()

    public class DoubleCompare public static void main String args Double d1 100 0 Double d2 90 0 Double d3 150 005 int i 10
  • vue3自定义指令批量注册(按钮防重指令)

    vue3文档中很简单的描述了一下自定义指令
  • es分布式架构和原理分析

    es的分布式架构 前言 这篇初识ElasticSearch文章中 说明了es的集群的核心概念 回顾一下 关于节点 一个运行中的 es实例称为一个节点 而集群是由一个或者多个拥有相同cluster name 配置的节点组成 它们共同承担数据和
  • 计算机四级网络工程师(计算机网络单选)- 知识点

    计算机四级网络工程师 操作系统单选 计算机四级网络工程师 操作系统多选 计算机四级网络工程师 计算机网络单选 计算机四级网络工程师 计算机网络多选 一 Ethernet 1 Ethernet帧结构一般包含前导码 帧前定界符 目的地址 源地址
  • Device Association Service占用CPU - 解决方案

    问题 电脑开启蓝牙后 连接蓝牙设备时 服务主机 Device Association Service服务可能会占用大量CPU 在任务管理器中可以查看 若占用CPU持续超过10 则属于异常状态 由于本人问题已经解决 因此没有问题截图 下文介绍
  • 用R做中文LDA主题模型可视化分析

    LDA主题模型在2002年被David M Blei Andrew Y Ng 是的 就是吴恩达老师 和Michael I Jordan三位第一次提出 近几年随着社会化媒体的兴起 文本数据成为越来越重要的分析资料 海量的文本数据对社会科学研究
  • 99_好题整理1—鸡兔同笼

    F 鸡兔同笼 内存限制 128 MiB 时间限制 3000 ms标准输入输出 题目描述 已知鸡和兔的总数量为n 总腿数为m 输入n和m 依次输出鸡和兔的数目 如果无解 则输出 No answer 不要引号 输入格式 第一行输入一个数据a 代
  • 实用 SQL 语句收藏这篇就够了

    前言 文章沿着设计一个假想的应用 awesome app 为主线 从零创建修改数据库 表格 字段属性 索引 字符集 默认值 自增 增删改查 多表查询 内置函数等实用 SQL 语句 收藏此文 告别零散又低效地搜索经常使用的 SQL 语句 所有
  • STM32程序卡死HardFault_Handler

    在工作过程中移植部分功能程序后发现程序经常性莫名卡死 然后就一直在HardFault Handler中断卡死 解决如下 1 首先去网上查询了出现HardFault Handler是由于什么原因造成 1 堆栈溢出 这个可能性不大 2 数组越界
  • Scrapy+bs4爬取京东商品对应的评论信息

    Scrapy bs4爬取京东商品对应的评论信息 spiders comm py coding utf 8 import json import jsonpath import scrapy from bs4 import Beautiful
  • tomcat端口介绍以及配置启用https

    一 tomcat 默认端口
  • 步进电动机 - 特征篇(一)

    第1章 步进电动机特征篇 1 1 步进电动机特征 步进电动机是如同时钟的秒针一般 每次旋转一定角度的电动机 首先 介绍一下步进电动机的特征 链接 https www orientalmotor com cn web seminar stki
  • 添加区块到区块链当中003

    package main import crypto sha256 fmt 0 定义结构 创建前哈希值 创建当前哈希值 和数据 type Block struct Prevhash byte 前哈希 Hash byte 当前哈希 TODO