Hi Guest

More contents, please log on!

Bitmere.com 区块链技术 Content

工作量证明实现代码笔记

jayquan
26 0 0
发币是什么意思?

问题一:区块链是在内存上的,现在要搬到本地数据库/文件存储

改进方法:引入特殊的存储机制

报错了,搞不明白,明明一模一样的,错误截图如下:

哈哈,通过在bolt库路径下搜Update找到用例了,发现是语法错了,这里是匿名函数啊!

一个block区块里面可以有多笔交易是什么意思?

合约和区块链什么关系?

完成数据库替换内存数据 f383d000df2c68b875f5cdbc233fb2ee20facd78

但是数据库内容还不知道对不对。

问题二:main函数太不优雅了,不灵活

把交易记录写入区块放到命令行做。

交易记录和区块是什么关系?

难道没次发生交易就要创建区块,那不是太麻烦了?

main函数操作部分交给CLI执行 3521b35776fcad749fa8830494e68b6a50d5be3b

CLI可以理解为一个类,先是初始化/构造函数,然后就是和数据相关的操作了。

定义CLI结构体 0c64883897b70aa42ffc6582e3350a4971ead5b8

func (cli *CLI) printUsage() 1383575d21e1c8c9dcd57f753877829835e0e155

验证参数 6611b9309378d50ee40ca0c684fe400b0605a4a7

添加新区块到区块链 c59a70a888b3d572245668f89beed2672f273d62

这些方法又都是供Run()选择调用的

添加blockchain的迭代器,并配置Next方法 5c024d134cbbc60c4cc9ed87a9a980734d8dc54d

测试命令如下,此时的版本是 297618742b808e0b759a3481cf454dbfaa5f1f99

./coin

./coin addblock -data “Pay 0.313 BTC for a coffee” 区块链被存储到本地数据库了

./coin printchain

效果截图如下:

但是打印后发现只有创世区块,不知道是存储问题还是打印问题?

于是我不断运行 ./coin addblock -data “Pay 0.313 BTC for a coffee” 发现文件大小是增加的,说明添加数据是没问题

就是打印问题。

问题还没解决,明天再说吧。

语法

GO语言真的很强大,包管理直接依托github.com,一个包就是一个文件夹,文件夹里面直接就是代码。

bytes.Join()和genesis.Serialize()的区别?

[]byte转换为string:hex.EncodeToString(block.Hash[:]) -> %s

block.Hash -> %x

第一次用:=,之后不需要冒号:了

defer bc.Db.Close()表示函数结束后再次执行这个语句。

成员函数都用小写开头。

成员数据都用大写开头。

strconf.FormatBool(pow.Validate())

for {}

cli := core.CLI{注意结构体初始化是花括号} b2459e54cea7c4e8a6a8f7bc11eb81b65ed50fbb

技巧

复制仓库全路径https://github.com/boltdb/bolt,GoLand会自动询问是否安装。

相当于执行 go get -t github.com/boltdb/bolt,安装的库在当前项目的src/github.com/boltdb/bolt下面,不会被git识别。
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
You have to log in before you can reply Login | 立即注册

Points Rules

Write the first review

jayquan 小学生
  • Follow

    0

  • Following

    0

  • Articles

    1

Promoted