使用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比特币区块链
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“使用go实现简易比特币区块链公链功能”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
2024年11月23日
2024年11月23日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]