笑来老师在github写了一篇文章《INBlockchain 的开源区块链 ICO 投资原则 》,区块链定义是:
区块链指的是一种公开的,由去中心化网络共同维护的账务系统,提供开放的、不可篡改的底层数据服务。
看到这句话想:要学习区块链有什么指导意义呢?想了半天不知道如何理解这句话。
后面在看《精通比特币》一书时,在第七章看到对区块链定义是:
区块链是由包含交易信息的区块从后向前有序链接起来的数据结构。
看到这句话时找出关键词:区块、有序链接。如果能把这些关键词搞明白了,也算跨过入门区块链的门槛。
1.区块
区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。
关键词:交易,数据结构
对交易定义使用比特币来说明,定义:
把比特币从一个地址转到另一个地址。
交易定义是很容易理解,如果理解有困难的话,用日常生活熟悉的网银转账来理解,把钱从A账号转到B账号,这就构成一笔交易。
而数据结构是计算机存储、组织数据的方式。可以理解通过某种方式把数据有效组织起来。
区块结构:
大小 | 字段 | 描述 |
---|---|---|
4字节 | 区块大小 | 用字节表示区块大小 |
80字节 | 区块头 | 区块头信息,包含6个字段 |
1-9字节 | 交易数量 | 交易信息的个数 |
可变 | 交易列表 | 记录在区块里的交易信息列表 |
没有学过计算机编程,看到区块结构感到很抽象。下面通过结构图来表示:
结构图更加形象表示区块组成结构。
如果说区块链是公开账簿,那么区块就是账簿其中一页。账簿每一页包含区块大小,区块头,交易数量,交易列表。
那如何把一页页链接起来变成有序账簿呢?
是通过区块头的父区块哈希值链接起来
下面展示区块头结构:
大小 | 字段 | 描述 |
---|---|---|
4字节 | 版本 | 版本号,用于跟踪软件/协议的更新 |
32字节 | 父区块哈希值 | 引用区块链父区块的哈希值 |
32字节 | Merkle根 | 该区块中交易的merkle树根的哈希值 |
4字节 | 时间戳 | 该区块产生的时间(精确到秒的Unix时间戳) |
4字节 | 难度目标 | 该区块工作量证明算法的难度 |
4字节 | Nonce | 用于工作量证明算法的计数器 |
区块头结构的字段和描述涉及计算机专业术语,暂时先忽略。先把区块头的结构理解后。区块头的结构图如下:
一个完整区块组成结构图如下:
2.区块标识符
每个区块都有一个区块标识符,区块标识符包含区块头哈希值(区块主标识符)和区块高度,区块头哈希值是唯一、能明确标识一个区块。
当一个节点从网络接收传入的区块时,它会验证这些区块信息,然后链接到现有的区块链上。为了建立链接,一个节点将检查传入的区块头的“父区块哈希值”,该区块的“父区块哈希值”与现有区块链的最后一个区块的区块标识符的头哈希值相等,然后使用链条方式链接起来,如下图:
成功地把区块写入到区块链中,类似往账簿写入一页账本信息。对区块链的形成做了大致说明,现在再看看《精通比特币》对区块链定义,相信大家都有初步认识和理解。
现在再看回文章第一个的区块链定义:
区块链指的是一种公开的,由去中心化网络共同维护的账务系统,提供开放的、不可篡改的底层数据服务。
主要关键词:去中心化、财务系统。
3.去中心化
在了解去中心化前,先说说P2P网络。在P2P网络中,多个计算机或节点共同组成一个网络,而不需要中心服务器来协调各个计算机。P2P网络如下图:
P2P网络中,每台计算机是服务提供者也是服务使用者。在传统的B/C(服务端/客户端)应用,服务端其通常为客户端提供服务,客户端是服务端使用者。
在去中心化网络中,任何拥有算力的用户都可以竞争参与记账,无须集约化的机构来垄断和管理账簿。
是通过什么能做到不依赖中心机构管理账簿呢?
用户在区块链成功写入区块时获得奖励
奖励包括创建新区块的新币奖励和区块所含交易的交易费,促使用户通过算力竞争进行记账。不依赖任何用户来记账实现去中心化的目的。
同时,获得创建新区块的新币奖励也是挖矿过程。
4.财务系统
理解成账簿,记录所有交易信息。
总结,区块链由一个个区块组成,区块是由一笔笔交易组成,通过链条把区块链接起来,形成公开账簿。通过使用算力竞争写入区块获得奖励实现去中心化。