当前位置: 首页 > news >正文

创建第一个区块001

  

package main

import (
	"crypto/sha256"
	"fmt"
)

//定义结构
type Block struct {
	//定义前区块哈希
	 Prevhash []byte
	//定义当前区块哈希
	 Hash []byte
	//数据
	Data []byte
}

 //2 创建区块  创建需要的数据和前区块的哈希
func NewBlock(data string,prevBlcokHash []byte) *Block  {
    block:=Block{
   	Prevhash: prevBlcokHash,
   	Hash: []byte{},  //先填空 后面计算
   	Data:[]byte(data),
   }

   block.SetHash()
   return &block
}

//3. 将区块生成哈希   不需要返回值做内部哈希
func (block *Block) SetHash() {
	//1. 拼装数据  前区块的哈希加上后区块的哈希
	blockInfo:=append(block.Prevhash,block.Data...)
	//2. sha256
	hash:=sha256.Sum256(blockInfo)
	block.Hash=hash[:]     //[160 57 93 6 104 177 148 137 117 112 129 47 45 7 202 7 231 156 160 168 71 27 251 219 114 225 214 77 62 89 86 199]
}
//4. 引入区块链
//5. 添加区块
//6. 重构代码


func main()  {
	
   block:= NewBlock("老师让班长转一枚比特币",[]byte{})
   fmt.Printf("前区块哈希值 %x\n",block.Prevhash)
   fmt.Printf("当前区块哈希值 %x\n",block.Hash)
   fmt.Printf("当前区块的数据 %s\n",block.Data)

/*
前区块哈希值 
当前区块哈希值 a0395d0668b194897570812f2d07ca07e79ca0a8471bfbdb72e1d64d3e5956c7
当前区块的数据 老师让班长转一枚比特币

*/
}

 

相关文章:

  • c语言常见出错信息(转)
  • 创建我的第一个区块链002
  • 几种开发工具的特性比较(转载)
  • 添加区块到区块链当中003
  • 很难见得到的一篇关于windows进程的说明书(转载)
  • 补充区块代码更新函数004
  • byte二位数组转换问题005
  • 写在周日的凌晨( 一次思维的对话)
  • 挖矿初出茅庐006
  • blot数据库007
  • Chapter1:Oracle 10g Oracle DAB [Oracle® Database 2 Day DBA
  • 修改构造区块链数据库008
  • golang序列化与反序列化009
  • chapter2: 安装 Oracle 软件并构建数据库
  • 001以太坊DAPP开发
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【翻译】babel对TC39装饰器草案的实现
  • Angular 2 DI - IoC DI - 1
  • Angular2开发踩坑系列-生产环境编译
  • CODING 缺陷管理功能正式开始公测
  • CSS 专业技巧
  • eclipse的离线汉化
  • ES6--对象的扩展
  • JavaScript设计模式系列一:工厂模式
  • java正则表式的使用
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • leetcode讲解--894. All Possible Full Binary Trees
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • magento 货币换算
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 半理解系列--Promise的进化史
  • 包装类对象
  • 坑!为什么View.startAnimation不起作用?
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端学习笔记之观察者模式
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 延迟脚本的方式
  • 一天一个设计模式之JS实现——适配器模式
  • 移动端唤起键盘时取消position:fixed定位
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • #NOIP 2014# day.1 T2 联合权值
  • #stm32驱动外设模块总结w5500模块
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (4)logging(日志模块)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (八)c52学习之旅-中断实验
  • (二)丶RabbitMQ的六大核心
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • .NET 8.0 中有哪些新的变化?
  • .Net mvc总结