好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 使用go實現簡易比特幣區塊鏈公鏈功能

使用go實現簡易比特幣區塊鏈公鏈功能

熱門標簽:重慶慶云企業400電話到哪申請 寧波語音外呼系統公司 鄭州智能語音電銷機器人價格 地圖標注免費定制店 仙桃400電話辦理 宿遷便宜外呼系統代理商 湛江crm外呼系統排名 上海極信防封電銷卡價格 不封卡外呼系統

使用go語言實現具備以下功能的簡易區塊鏈

  • 區塊與區塊鏈
  • 共識機制
  • 數據庫
  • Cli命令行操作
  • 交易管理
  • 密碼學
  • 數字簽名
  • 交易緩存池
  • P2P網絡管理

由于平時還要進行論文工作,項目不定時更新

2021.1.1實現了區塊結構、區塊鏈結構、工作量證明pow,剩下部分陸續更新

1.實現區塊結構

package BLC

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

//實現一個最基本的區塊結構
type Block struct {
	TimeStamp int64 //時間戳,區塊產生的時間
	Heigth int64//區塊高度(索引、號碼)代表當前區塊的高度
	PreBlockHash []byte//前一個區塊(父區塊)的哈希
	Hash []byte//當前區塊的哈希
	Data []byte//交易數據
}
//創建一個新的區塊
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
}
//計算區塊哈希
func (b *Block)SetHash() { 
	//int64轉換成字節數組
	//高度轉換
	heightBytes:=IntToHex(b.Heigth)
	//時間轉換
	timeStampBytes:=IntToHex(b.TimeStamp)
//拼接所有屬性進行hash
	blockBytes:=bytes.Join([][]byte{heightBytes,timeStampBytes,b.PreBlockHash,b.Data},[]byte{})
	hash:=sha256.Sum256(blockBytes)
	b.Hash=hash[:]
}

2.實現區塊鏈結構

package BLC

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

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

3.實現工作量證明

package BLC

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

//目標難度值,生成的hash前 targetBit 位為0才滿足條件
const targetBit =16
//工作量證明
type ProofOfWork struct {
	Block *Block //對指定的區塊進行驗證
	target *big.Int //大數據存儲
}
//創建新的pow對象
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) {
	//數據拼接
	var nonce=0 //碰撞次數
	var hash [32]byte //生成的hash
	var hashInt big.Int //存儲轉換后的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("碰撞次數:%d\n",nonce)
	return hash[:],int64(nonce)
}
//準備數據,將區塊屬性拼接起來,返回字節數組
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.當前運行結果

到此這篇關于使用go實現簡易比特幣區塊鏈公鏈功能的文章就介紹到這了,更多相關go實現比特幣區塊鏈公鏈內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • go語言實現簡易比特幣系統錢包的原理解析
  • Go語言實現IP段范圍校驗示例
  • Django之form組件自動校驗數據實現
  • golang之數據校驗的實現代碼示例
  • Django框架登錄加上驗證碼校驗實現驗證功能示例
  • go語言實現簡易比特幣系統之交易簽名及校驗功能

標簽:物業服務 儋州 海南 遼寧 西雙版納 電子產品 青海 安康

巨人網絡通訊聲明:本文標題《使用go實現簡易比特幣區塊鏈公鏈功能》,本文關鍵詞  使用,實現,簡易,比特,幣,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用go實現簡易比特幣區塊鏈公鏈功能》相關的同類信息!
  • 本頁收集關于使用go實現簡易比特幣區塊鏈公鏈功能的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美图片激情小说| 免费网站??禁| 艳鉧动漫1~6无删减版日本| 嗯嗯不要啊啊| 少妇婬荡呻吟揉捏丰满奶头动漫| 性欧美极品videos| 被学长摸湿奶好爽高H漫画| 韩国koreanbj101自慰直播| gay裸美国老汉gay| 亚洲国产精品久久久久制服红楼梦 | 欧美三级午夜理伦三级| 国产馆在线观看视频| 成人做爰黄AAA片爽爽影院小说| 国产精品7m凸凹视频分类大全| poren日本美国| 将军跪撅含玉势绳衣调教小说| 久久中国精品| 高清欧美日本视频免费观看| 男人干女人的视频| 久久久久久精品国产亚洲小蛇| 白虎网| 夜色资源网yese321| 久久精品国产91久久麻豆| 老师打开一点我进不去作文视频| free×12性欧美sex| 国产xx肥老妇视频奂费| m男亚洲一区中文字幕| 无码A片试看120秒| 亚洲欧美综合一区二区三区四区| 满级大佬| 天美传媒妇乱XXXXX视频| 麻豆网无码AV在线观看| 2021海角社区最新版| 巨粗进入娇妻哭喊求饶| 成色p31s是国精产品吗| 色戒158分钟未删除版在线观看| 香港三级女同性les电影| 室外野战好爽| 精品91?海角乱在线观看| 亚洲欧美日韩人成| 日本一区二区不卡|