Hi 游客

更多精彩,请登录!

比特池塘 区块链茶馆 正文
自己实在不好意思又捡起来,歇菜了7天。
想着找工作,然而这6天完全可以不歇菜的,不要追求完美,应该像打游戏一样快乐地玩好。
《私有区块链,我们一起GO-慕课网》
3-1 区块链基本原型
Go项目文件夹惯例,十分直白易懂,文件夹可以当作包?调用的时候文件夹类似类
bin
src 这个目录用于安装可执行代码所在的包:go install ./coin 但是这个会安装到GOPATH根目录下$GOPATH/bin,我期望是只安装到当前项目的bin目录下,这个就是麻烦了点没有大的影响,先不管了。不过因为$GOPATH/bin被安装到了系统路径,所以直接运行coin就可以了,所以下次要却不可执行目录的名字不冲突。
替代方法:coin git:(master) ✗ go build -o ../../bin/coin
coin 入口程序文件夹
main.go
package main
core 核心数据结构
coin.NewBlockChain()
pkg
问题
区块自身的哈希值需要根据区块数据计算吗?哈希值的计算不包含哈希值(包含的是空的hash值),但是包含区块的数据部分
区块数据是不断更新的吗?
返回结构体指针和直接返回结构体有什么区别?
方法名都使用大写开头是好习惯吗?
创世区块存储数据吗?
感觉创建区块很容易嘛?
挖矿赚币是怎么回事?
创建的区块经过工作量证明之后比特币系统规定奖励一定的比特币,那么这个比特币和原来挖出来的区块是什么关系?存在这个区块上面吗?
区块是如何保证唯一的?
语法:
Go可以把文件夹直接当作软件来安装?
[]byte字节数组,应该是很原始的数据结构了
[][]byte{多个[]byte}
[]byte(string)可以进行数据额类型转换,库函数接受[]byte原始数据类型的情况更多。
用{需要按结构体成员定义顺序}的方式初始化结构体类型变量。
用户端使用string类型更直观,转换为[]byte则用[]byte(string)。
[]byte{}表示空值。
函数前面有变量var的,则函数func是方法method,相当于这个变量是类?也就是通过这个var.func来调用。
strconv.FormatInt(b.Timestamp, 10)是什么意思?
hex.EncodeToString(hashInBytes[:]) []byte类型转换为string类型
bc.Blocks = append(bc.Blocks, newBlock) 数组的添加新数据的方法
bc *Blockchain 和 bc Blockchain 为什么都可以用 bc.Block 方式调用?
[]*指针数组类型(存储的数据类型是指针),初始化使用{}形式
for _, block := range bc.Blocks用来遍历
*指针
&地址
结构体/数组初始化是用{}的形式
fmt.Printf("%x\n", []byte{})
fmt.Printf("%s\n", string)
fmt.Printf("%s\n", hex.EncodeToString([]byte{}[:]))
%x适合[]byte
Block结构体相关的函数/方法:
前一个课程的方法:
func calculateHash(b Block) string
func GenerateNewBlock(preBlock Block, data string) Block
func GenerateGenesisBlock() Block
本课程的方法:
SHA家族
散列函数计算散列值
校验:防止字节数组被篡改
比特币白皮书里称第一个区块叫:创世区块
白皮书是什么?
白皮书是政府或议会正式发表的以白色封面装帧的重要文件或报告书的别称。 作为一种官方文件,代表政府立场,讲究事实清楚、立场明确、行文规范、文字简练,没有文学色彩。 白皮书已经成为国际上公认的正式官方文书。 各国文件分别有其惯用的颜色,封面用白色的就是白皮书。
有了前面一个入门课程的学习,学习这门课的重叠部分就特别简单了。
不需要弄懂所有东西,也不需要去猜所有东西。
4-1 工作量证明及哈希算法
什么是工作量证明?
工作的结果作为数据加入区块链作为一个区块,意思是工作结果就是挖一个区块?
完成这个工作的人也会获得奖励,这个奖励是挖矿得来的还是系统给的?
整个“努力工作并进行证明”的机制,就叫做工作量证明。
怎么个努力法?
计算出一个数值,需要满足比特币算法的要求,什么数值呢?
nonce 工作量变量
比特币和哈希值是什么关系?
比特币和区块数据部分是什么关系?
哈希算法特性:
正向快速
逆向困难
输入敏感
冲突避免->我的比特币和你的肯定不一样,哈希值和比特币什么关系?
一个区块和一个比特币是什么关系?
每个区块都必须经过规定好的工作量证明才是有效的,你说这个区块是真的,就必须进过校验,怎么校验的?
工作量难度是可控的,但是比特币系统里是固定的?
感觉这个挺简单的?
4-2 工作量证明代码实现
工作量证明和发币是什么关系?
引入数据库,代码简化了很多。
cli负责灵活的命令行交互,代替main函数,比C++方便不少。
挖矿就是挖区块?
那挖出来的区块干嘛用的?
区块链的每一个区块都要经过工作量证明(区块的元素),是在什么时候证明的?
小数比特币是什么意思?
交易和区块是什么关系?
其他
gitignore - ignoring any ‘bin’ directory on a git project - Stack Overflow
之前的项目GOPATH问题:GoLand/Go/GOPATH/Project GOPATH 注意把
Use GOPATH that’s defined in system environment 关掉,这样软件自带的Terminal就优先识别配置的项目路径了。
同时go文件里的import的路径要改为$GOPATH/src打头了。
项目里面Go文件名都是小写的。
疑问
感觉这个通过工作量证明来使比特币价值提升很荒唐,关键是居然凑效了,比特币确实到后面很贵了,之后性质开始变了,一堆没工作量证明的空气币也莫名其妙地开始值钱了,和比特币完全是两码事了感觉,比特币怎么说没功劳也有苦劳。
不过这样理解还是情绪化,还没有涉及到区块链的应用。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

小贷平台推荐 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    6