金狮镖局 Design By www.egabc.com
使用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比特币区块链
金狮镖局 Design By www.egabc.com
金狮镖局
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
金狮镖局 Design By www.egabc.com
暂无使用go实现简易比特币区块链公链功能的评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月14日
2024年11月14日
- 魔兽世界wlk暗牧一键输出宏是什么 wlk暗牧一键输出宏介绍
- 群星.1996-红不让台语原唱2辑【福和唱片】【WAV+CUE】
- 郭书瑶.2009-爱的抱抱(EP)【种子音乐】【FLAC分轨】
- 郑瑞芬.1989-BE.MY.BABY【现代】【WAV+CUE】
- 花钱请人每周放30万只不咬人的蚊子 防治登革热传播
- 饭制《第一后裔》丧尸版弗蕾娜
- 贝克汉姆亲临!2024FC品类游戏嘉年华圆满落幕
- 「命轨爻错之翼」风之翼发放说明
- 《原神》前瞻特别节目回顾长图
- 米游币抽抽乐-原神专场现已开启!
- 黑鸭子2001《风情中国HQCD》[日本版][WAV+CUE]
- 陈杰洲1990-成人礼[滚石][WAV+CUE]
- MarkAanderud-HandsFree(2024)[24-44,1]FLAC
- 孙露《观心》1:1母盘直刻限量版[低速原抓WAV+CUE][361M]
- 钟志刚《汽车DJ玩主》[低速原抓WAV+CUE][1G]