今天的越写越快乐系列文章为大家带来比特币核心
也就是区块链
在比特币系统中的应用逻辑,即比特币的底层是如何设计区块结构和进一步把区块连接起来构成区块链这样的数据结构(也就是比特币底层存储数据的规则)。
简介
区块链的数据结构是由包含交易信息的区块按照由远及近的顺序链接起来。它的表现为一个平面文件,或者存储在一个简单的数据库中。比特币核心客户端是由Google的LevelDB数据库存储区块链元数据
。区块链经常被视为一个垂直的栈
,第一个区块作为栈底的首区块,随后每一个区块都放置在之前的区块之上。用栈来形象化表示区块依次堆叠这一概念后,我们便可以使用一些术语,比如:“高度
”来表示区块与首区块直接的距离,“顶部
或者顶端
”来表示最新添加的区块。
对每个区块头进行SHA256加密哈希,可生成一个哈希值,通过这个哈希值可以识别出区块链中的对应区块。同时,每个区块都可以通过其区块头的“父区块哈希值”字段引用前一区块(父区块)。也就是说,每一个区块头都包含它的父区块哈希值。这样把每个区块链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块
)的链条
。
区块结构
区块是一种被包含在公开账簿里的聚合了交易信息的容器数据结构。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易列表组成。区块头长度是80字节,平均每个交易至少250字节,而且平均每个区块至少包含超过500个交易,因此一个包含所有交易的完整区块链比区块头大1000倍。下图描述了一个区块结构。
Size | Field |
---|---|
4 bytes | Block Size |
80 bytes | Block Header |
1-9 bytes(VarInt) | Transaction Counter |
Variable | Transactions |
区块头
Size | Field |
---|---|
4 bytes | Version |
32 bytes | Previous Block Hash |
32 bytes | Merkle Root |
4 bytes | Timestamp |
4 bytes | Difficulty Target |
4 bytes | Nonce |
区块标识符 - 区块头哈希值和区块高度
区块标识符可以通过两种方式进行获取,第一种是通过区块头哈希值,区块头哈希值可以唯一、明确地标识一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块哈希值。第二种是通过该区块在区块链中的位置,即区块高度
,也就是当前区块到首区块的距离(以垂直的栈为类比),这是因为每个区块都会在区块头中存储父区块的哈希值,那么使用区块高度或者区块头哈希值都可以获取一个区块信息。
创世区块
区块链里的第一个区块创建于2009年,被称为创世区块。它是区块链里面所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。
区块链接成为区块链
比特币的全节点在本地保存了区块链从创世区块起的完整副本。随着最新区块的产生,该区块的本地副本会不断更新用于扩展这个链条。当一个节点从网络接收传入的区块时,它会验证这些区块,然后链接到现有的区块链上,为建立一个连接,一个节点将检查传入的区块头并寻找该区块的“父区块哈希值”。
个人感想
作为比特币系统中承载交易的数据核心,区块链这种数据机构配合默克树可以快速归纳和校验大规模数据完整性。那么对于验证交易并写入区块数据而言则非常重要,正是因为区块链这种数据结构,比特币当中使用的技术《区块链》才慢慢流行起来,也正是这种数据结构的应用后来的以太坊、EOS等公有链才逐渐进入大众的视野,才被大家所熟知,慢慢地才有更多的人去投资、学习区块链技术。以便在将来的日子里看懂区块链项目,当成韭菜就不好了。当然要深入理解区块链技术也不是一朝一夕的事情,我有耐心和时间去研究和学习这方面的知识并通过理论和实战的方式去深刻体会技术的真谛和本质,以便于对自己的工作、生活有一定的帮助。那么接下来我会继续为大家带来《精通比特币》的读书笔记,希望大家可以通过本书的学习对比特币系统有一个更加深刻的认识。要是我的文章对你有所启发,那将是我莫大的荣幸。
网友评论