区块链实战(一)实现简单的区块与区块链交易

简介: 区块链实战(一)实现简单的区块与区块链交易

区块链实战

image.png

**注意:**区块不存储hash值,节点接受区块后独立计算并存储在本地。


Version 1

区块相关:

1.定义一个区块的结构Block


a.区块头:6个字段


b.区块体:字符串表示data


提供一个创建区块的方法


NewBlock(参数)


区块链相关

定义一个区块链结构BlockChain


Block数组


提供一个创建BlockChain()的方法

NewBlockChain()


提供一个添加区块的方法

AddBlock(参数)


block.go文件

package main
import (
  "bytes"
  "crypto/sha256"
  "time"
)
/*
1.定义一个区块的结构Block
​a.区块头:6个字段
​b.区块体:字符串表示data
*/
//区块
type Block struct {
  Version int64   //版本
  PerBlockHash []byte //前一个区块的hash值
  Hash []byte //当前区块的hash值,是为了简化代码
  MerKelRoot []byte  //梅克尔根
  TimeStamp int64  //时间抽
  Bits int64  //难度值
  Nonce int64 //随机值
//区块体
  Data []byte  //交易信息
}
/*
提供一个创建区块的方法
NewBlock(参数)
*/
func NewBlock(data string ,prevBlockHash []byte) *Block {
  var block Block
  block = Block{
    Version:      1,
    PerBlockHash: prevBlockHash,
    //Hash:         []byte{},     //区块不存储hash值,节点接受区块后独立计算并存储在本地。
    MerKelRoot:   []byte{},
    TimeStamp:    time.Now().Unix(),
    Bits:         1,
    Nonce:        1,
    Data:         []byte(data),
  }
  block.SetHash()  //填充Hash
  return &block
}
func (block *Block) SetHash() {
  // 源码里面是要传二维切片 func Join(s [][]byte, sep []byte) []byte
  tmp :=[][]byte{
    IntToByte(block.Version),
    block.PerBlockHash,
    block.MerKelRoot,
    IntToByte(block.TimeStamp),
    IntToByte(block.Bits),
    IntToByte(block.Nonce),
  }
  data:=bytes.Join(tmp,[]byte{})    //之后再计算hash
  hash := sha256.Sum256(data)
  block.Hash = hash[:]  //变切片
}
//创始块
func NewGensisBlock() *Block{
  return NewBlock("Genesis Block!",[]byte{})
}

blockChain.go文件

package main
/*
1. 定义一个区块链结构BlockChain
   Block数组
*/
type BlockChain struct {
   blocks []*Block
}
/*
2. 提供一个创建BlockChain()的方法
   NewBlockChain()
*/
func NewBlockChain() *BlockChain {
   block := NewGensisBlock()
   return &BlockChain{blocks:[]*Block{block}}  //创建只有一个元素的区块链,初始化
}
/*
3. 提供一个添加区块的方法
   AddBlock(参数)
*/
func (bc *BlockChain)AddBlock(data string)  {
   PerBlockHash := bc.blocks[len(bc.blocks)-1].Hash  //这一个区块的哈希是前一块的哈希值
   block := NewBlock(data,PerBlockHash)
   bc.blocks = append(bc.blocks,block)
}

utils.go文件

package main
import (
   "bytes"
   "encoding/binary"
   "fmt"
   "os"
)
func IntToByte(num int64) []byte {
   //func Write(w io.Writer, order ByteOrder, data interface{}) error {
   var buffer bytes.Buffer
   err := binary.Write(&buffer, binary.BigEndian, num)
   CheckErr("IntToByte",err)
   return buffer.Bytes()
}
func CheckErr(position string,err error) {
   if err != nil {
      fmt.Println("error ,pos:",position,err)
      os.Exit(1)
   }
}

main.go文件

package main
import "fmt"
func main() {
   bc := NewBlockChain()
   bc.AddBlock("A send B 1BTC")
   bc.AddBlock("B send C 1BTC")
   for _,block := range bc.blocks {
      fmt.Printf("Version : %d\n",block.Version)
      fmt.Printf("PerBlockHash : %x\n",block.PerBlockHash)
      fmt.Printf("Hash : %x\n",block.Hash)
      fmt.Printf("MerKelRoot : %x\n",block.MerKelRoot)
      fmt.Printf("TimeStamp : %d\n",block.TimeStamp)
      fmt.Printf("Bits : %d\n",block.Bits)
      fmt.Printf("Nonce : %d\n",block.Nonce)
      fmt.Printf("Data : %s\n",block.Data)
   }
}

执行结果

image.png

相关文章
|
3月前
|
存储 供应链 安全
【区块链】智能交易模式下的数据安全流通模型
【区块链】智能交易模式下的数据安全流通模型
102 1
|
18天前
|
安全 数据挖掘 API
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(下)
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(下)
34 1
|
18天前
|
数据可视化 数据挖掘 区块链
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(上)
43 0
|
10月前
|
供应链 安全 区块链
【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)
【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)
|
12月前
|
区块链
区块链101:区块链交易是如何运作的?
区块链101:区块链交易是如何运作的?
|
安全 算法 区块链
区块链金融交易借贷平台开发技术实现去中心化
传统的金融交易清算周期长和成本高昂,引入区块链技术,能够加快传统金融交易中心化的交易缓慢和低效的后端运作,并且重塑交易和结算流程。一个共享的数字公开账本能够持续被维护,确认所有参与链上的交易,防止欺诈,对全球金融交易、清算和结算带来了一个重大的改观机会。
|
存储 机器学习/深度学习 人工智能
【源码亲测演示】火币虚拟币交易平台币币交易区块链虚拟
花火交易所搭建 合作搭建交易所 仿28交易所搭建 如何搭建货币交易所 交易所源码搭建教程 怎么搭建usdt交易所 交易所搭建数字货币 杭州交易所搭建源码 搭建交易所教程 合约交易所如何搭建 交易所和平台搭建 怎么搭建交易所
【源码亲测演示】火币虚拟币交易平台币币交易区块链虚拟
|
存储 供应链 安全
景蓝交易所源码php区块链交易所源码/币币/法币/合约交易/配资上币/带搭建教程
景蓝交易所源码php区块链交易所源码/币币/法币/合约交易/配资上币/带搭建教程
景蓝交易所源码php区块链交易所源码/币币/法币/合约交易/配资上币/带搭建教程
|
安全 区块链 数据安全/隐私保护
交易所源码购买数字货币量化交易平台 区块链项目源码 交易系统源码 币币交易源码 区块链游戏源码 火币交易所源码 交易系统源码
去中心化交易所开发 币严交易所搭建 数字货币交易所系统开发 开发一个交易所需要多久 交易所系统开发搭建 合约交易所系统搭建开发 区块链交易所如何搭建 交易所系统搭建 如何搭建一个区块链数字货币交易所系统 区块链搭建交易所 开发交易所交易系统 数字货币区块链交易所系统搭建方案  数字货币交易所源码 数字货币源码 合约交易所源码
|
存储 人工智能 安全
区块链合约交易所源码新币币交易所USDT秒合约杠杆C2C法币交易
迄今为止,已经有相当多的服务提供加密货币兑换服务。虚拟货币的流行度只增不减,交易平台的需求量也越来越大。 并非所有知名交易所都是可靠和诚实的,因此利基市场仍然对新的和改进的公司开放。
区块链合约交易所源码新币币交易所USDT秒合约杠杆C2C法币交易

热门文章

最新文章