主頁(yè) > 知識(shí)庫(kù) > 使用go實(shí)現(xiàn)簡(jiǎn)易比特幣區(qū)塊鏈公鏈功能

使用go實(shí)現(xiàn)簡(jiǎn)易比特幣區(qū)塊鏈公鏈功能

熱門標(biāo)簽:重慶慶云企業(yè)400電話到哪申請(qǐng) 寧波語(yǔ)音外呼系統(tǒng)公司 鄭州智能語(yǔ)音電銷機(jī)器人價(jià)格 地圖標(biāo)注免費(fèi)定制店 仙桃400電話辦理 宿遷便宜外呼系統(tǒng)代理商 湛江crm外呼系統(tǒng)排名 上海極信防封電銷卡價(jià)格 不封卡外呼系統(tǒng)

使用go語(yǔ)言實(shí)現(xiàn)具備以下功能的簡(jiǎn)易區(qū)塊鏈

  • 區(qū)塊與區(qū)塊鏈
  • 共識(shí)機(jī)制
  • 數(shù)據(jù)庫(kù)
  • Cli命令行操作
  • 交易管理
  • 密碼學(xué)
  • 數(shù)字簽名
  • 交易緩存池
  • P2P網(wǎng)絡(luò)管理

由于平時(shí)還要進(jìn)行論文工作,項(xiàng)目不定時(shí)更新

2021.1.1實(shí)現(xiàn)了區(qū)塊結(jié)構(gòu)、區(qū)塊鏈結(jié)構(gòu)、工作量證明pow,剩下部分陸續(xù)更新

1.實(shí)現(xiàn)區(qū)塊結(jié)構(gòu)

package BLC

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

//實(shí)現(xiàn)一個(gè)最基本的區(qū)塊結(jié)構(gòu)
type Block struct {
	TimeStamp int64 //時(shí)間戳,區(qū)塊產(chǎn)生的時(shí)間
	Heigth int64//區(qū)塊高度(索引、號(hào)碼)代表當(dāng)前區(qū)塊的高度
	PreBlockHash []byte//前一個(gè)區(qū)塊(父區(qū)塊)的哈希
	Hash []byte//當(dāng)前區(qū)塊的哈希
	Data []byte//交易數(shù)據(jù)
}
//創(chuàng)建一個(gè)新的區(qū)塊
func NewBlock(height int64,preBlockHash []byte,Data []byte) *Block {
	var block Block
	block=Block{Heigth: height,PreBlockHash: preBlockHash,Data: Data,TimeStamp: time.Now().Unix()}
	block.SetHash()
	return block
}
//計(jì)算區(qū)塊哈希
func (b *Block)SetHash() { 
	//int64轉(zhuǎn)換成字節(jié)數(shù)組
	//高度轉(zhuǎn)換
	heightBytes:=IntToHex(b.Heigth)
	//時(shí)間轉(zhuǎn)換
	timeStampBytes:=IntToHex(b.TimeStamp)
//拼接所有屬性進(jìn)行hash
	blockBytes:=bytes.Join([][]byte{heightBytes,timeStampBytes,b.PreBlockHash,b.Data},[]byte{})
	hash:=sha256.Sum256(blockBytes)
	b.Hash=hash[:]
}

2.實(shí)現(xiàn)區(qū)塊鏈結(jié)構(gòu)

package BLC

type BlockChain struct {
	Blocks []*Block //存儲(chǔ)有序的區(qū)塊
}
//初始化區(qū)塊鏈
func CreateBlockChainWithGenesisBlock() *BlockChain {
	//添加創(chuàng)世區(qū)塊
	genesisBlock:=CreateGenesisBlock("the init of blockchain")

	return BlockChain{[]*Block{genesisBlock}}
}
//添加新的區(qū)塊到區(qū)塊鏈中
func (bc *BlockChain)AddBlock(height int64,data []byte,prevBlockHash []byte){
	newBlock := NewBlock(height,prevBlockHash,data)
	bc.Blocks=append(bc.Blocks,newBlock)
}

3.實(shí)現(xiàn)工作量證明

package BLC

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

//目標(biāo)難度值,生成的hash前 targetBit 位為0才滿足條件
const targetBit =16
//工作量證明
type ProofOfWork struct {
	Block *Block //對(duì)指定的區(qū)塊進(jìn)行驗(yàn)證
	target *big.Int //大數(shù)據(jù)存儲(chǔ)
}
//創(chuàng)建新的pow對(duì)象
func NewProofOfWork(block *Block) *ProofOfWork {
	target:=big.NewInt(1)
	target=target.Lsh(target,256-targetBit)
	return ProofOfWork{block,target}
}
//開始工作量證明
func (proofOfWork *ProofOfWork)Run() ([]byte,int64) {
	//數(shù)據(jù)拼接
	var nonce=0 //碰撞次數(shù)
	var hash [32]byte //生成的hash
	var hashInt big.Int //存儲(chǔ)轉(zhuǎn)換后的hash
	for {
		dataBytes:=proofOfWork.prepareData(nonce)
		hash=sha256.Sum256(dataBytes)
		hashInt.SetBytes(hash[:])
		fmt.Printf("hash:\r%x",hash)
		//難度比較
		if proofOfWork.target.Cmp(hashInt)==1{
			break
		}
		nonce++
	}
	fmt.Printf("碰撞次數(shù):%d\n",nonce)
	return hash[:],int64(nonce)
}
//準(zhǔn)備數(shù)據(jù),將區(qū)塊屬性拼接起來(lái),返回字節(jié)數(shù)組
func (pow *ProofOfWork)prepareData(nonce int) []byte {
	data:=bytes.Join([][]byte{
		pow.Block.PreBlockHash,
		pow.Block.Data,
		IntToHex(pow.Block.TimeStamp),
		IntToHex(pow.Block.Heigth),
		IntToHex(int64(nonce)),
		IntToHex(targetBit),
	},[]byte{})
	return data
}

4.當(dāng)前運(yùn)行結(jié)果

到此這篇關(guān)于使用go實(shí)現(xiàn)簡(jiǎn)易比特幣區(qū)塊鏈公鏈功能的文章就介紹到這了,更多相關(guān)go實(shí)現(xiàn)比特幣區(qū)塊鏈公鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易比特幣系統(tǒng)錢包的原理解析
  • Go語(yǔ)言實(shí)現(xiàn)IP段范圍校驗(yàn)示例
  • Django之form組件自動(dòng)校驗(yàn)數(shù)據(jù)實(shí)現(xiàn)
  • golang之?dāng)?shù)據(jù)校驗(yàn)的實(shí)現(xiàn)代碼示例
  • Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能示例
  • go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易比特幣系統(tǒng)之交易簽名及校驗(yàn)功能

標(biāo)簽:物業(yè)服務(wù) 儋州 海南 遼寧 西雙版納 電子產(chǎn)品 青海 安康

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用go實(shí)現(xiàn)簡(jiǎn)易比特幣區(qū)塊鏈公鏈功能》,本文關(guān)鍵詞  使用,實(shí)現(xiàn),簡(jiǎn)易,比特,幣,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用go實(shí)現(xiàn)簡(jiǎn)易比特幣區(qū)塊鏈公鏈功能》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于使用go實(shí)現(xiàn)簡(jiǎn)易比特幣區(qū)塊鏈公鏈功能的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章