一、区块链基本技术
区块链:区块链是一种单向链式结构,由区块连接而成。
第一个区块称为创始区块。
除了创始区块外,每个区块中都保留了上一个区块的Hash地址(区块的唯一标识),通过引用上一个区块的Hash地址,区块间形成了链式关系,从而形成了区块链。
(一)区块(区块头+区块体)
其中区块的大小被限制在1M以内(为了防止资源浪费和DOS攻击),区块头的大小被固定为80个字节。
一个区块包含两个部分:
1、区块头
区块头中记录了版本号、上一个区块的Hash地址、merkle根、区块创建时间戳、区块的工作量难度目标以及用于计算目标的参数值。
2、区块体
区块体区块体存储着这个区块的详细数据(Data:交易数量以及交易数据),这个数据包含若干行记录,可以是交易信息,也可以是其他某种信息。区块与Hash是一一对应的,Hash可以当做是区块的唯一标识。
1、时间戳
时间戳是什么?时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
1、区块链通过时间戳保证每个区块依次顺序相连。时间戳使区块链上每一笔数据都具有时间标记。
2、时间戳的组成是一个经加密后形成的凭证文档
3、时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash编码加密形成摘要,然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。
它包括三个部分:需加时间戳的文件的摘要;DTS收到文件的日期和时间;DTS的数字签名。一般来说,时间戳产生的过程为:用户首先将需要加时间戳的文件用编码加密形成摘要,然后将该摘要发送到链上,在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。
时间戳的这种设计,使得更改一条记录的困难程度按时间的指数倍增加,越老的记录越难更改。这是因为,如果改动某个区块里的一条记录,意味着该区块原来的默克尔树根失效了,需要改动区块头,该区块的数字指纹随之失效。又由于下一个区块的区块头包含这个哈希指针,这就意味着下一个区块也需要改动。如此直到最新的那个区块。
3、Merkle树
4、扩容
(二)数据结构
1、链表+hash散列
【链表】
为了更好的理解:将链表和数组进行比较
特征一:
数组空间的内存地址是连续的
链表节点的内存地址是不连续的
特征二:
链表长度可以根据需求改变大小
但是数组长度是固定的
【链表示意图】
1、链表示意图和火车相似
2、每个车厢称为节点,链表节点
3、第一个节点称为头节点,最后一个称为尾节点
猫说:区块链可以用链表去维护,当然也可以用数组去维护
【hash散列】
2、区块高度+区块标识
区块高度指的是: 区块链接在主链的个数,也就是连接在区块链上的区块数。
【猫说】:区块高度是区块的标示符(不唯一),区块有两个标示符,一是区块头的哈希值,二是 区块高度
【作用】
哈希值: 溯源区块, 区块哈希值可以唯一、明确地标识一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块哈希值
区块高度:指该区块在区块链中的位置
【猫说】:区块高度并不是唯一的标识符。虽然一个单一的区块总是会有一个明确的、固定的区块高度,但反过来却并不成立,一个区块高度并不总是识别一个单一的区块。两个或两个以上的区块可能有相同的区块高度,在区块链里争夺同一位置,失败方的区块会被抛弃掉
3、分叉
8、有向无环图/缠结Tangle
(三)加密算法
1、什么是加密/非对称加密
2、数字签名/数字身份/数字证书
3、哈希函数
4、RSA/椭圆曲线加密算法
5、环签名
6、混币服务
7、零知识证明
(四)分布式技术
1、节点/全节点
2、点对点通讯
3、分布式存储
(五)共识机制
1、什么是共识机制
2、POW
3、POS
4、DPOS
5、51%攻击
6、拜占庭将军问题
7、改进型实用拜占庭容错PBFT