本文的一些内容来源于《Rust编程小项目:编写简单的区块链》,大家有时间可以看下这个视频。
当今世界有各种各样的区块链,狗链,野鸡链,还有我正准备写的“屎链”,欢迎大家来挖。不管啥链,底层原理都差不多。
先看下区块链的结构(单链):
需要明确的是,区块链是用来保存数据的,不是用来炒币的。一个矿工在一个时间将一些数据打包在一起,就 成了一个区块。上图的红色箭头方向不是区块链的发展方向,箭头均指向前一个区块,表示 某个区块(创世区块除外)总包含上一个区块的信息。依次类推,我们只要有最后一个区块,就能 推出所有的区块内容,即所有的交易信息。
上图就是区块链的简图,可以看出,每个区块头包含(pre hash,tx hash,time),为什么需要这3个呢? 因为
- 交易总得记录时间吧,所以需要加时间戳time
- 每个区块要指向上一个区块,所以必须要有pre hash
- 每个区块的数据理论上是可以串改的,但是改了之后hash就对不上了,所以tx hash用来保证数据不被串改
接着区块里面要有交易信息transaction,要是连交易信息都没有那区块链就废了。
最后是整个区块的哈希值,该值相当于每个区块的标识,同样的,只要改了区块中的一个数据,哈希值就会 发生改变。
好了,没了,理论知识就这些了。当然,本文讨论的是仅仅是在内存中运行的区块链本身,并不涉及web,挖矿等其他内容。
标题上说了,自顶向下设计,那我们设计区块链的思路逻辑就是:
- 建立一个名为区块链的结构体,能够返回一个可扩张的向量,向量内均为区块。该结构体具有产生创世区块及其他区块的能力,并且可以求出一个区块的哈希值。
- 建立一个名为区块的结构体,该结构体包含区块头以及交易数据和整个区块的哈希值。
- 需要添加关于序列化,反序列化,哈希,时间戳的库。