blockchain¶
第一节 通识¶
- 区块链的诞生: 2008年,中本聪,白皮书。解决了电子货币支付的三大问题:重复支付问题,依赖第三方问题,发行量控制问题
- 区块链的三要素 三要素:交易(导致账本状态改变),区块(共识),链(串联)
- 与关系型数据库的区别:
- 关系型数据库:可篡改,难验证
- 区块链:难篡改,易验证
- 区块链定义:
- 狭义:一种按照时间顺序将数据区块以顺序形式相连的链式数据结构,并以密码学形式保证不可篡改的分布式账本技术
- 广义:利用块链式结构存储数据,以分布式算法来更新数据,使用密码学方式保证安全的,利用自动化脚本组成的智能合约来编程的 分布式基础架构和计算范式**
第二节 通识¶
- 价值传递: 两种价值的传递方式:价值的传递要求信息的传递和价值的转移同时进行
- 区块链的本质:一种去中心化的状态机。比特币和以太坊都属于交易驱动的分布式状态机
- 区块链1.0和2.0区别:
- 在2.0增加了合约层
- 共识层增加了权益证明等新机制
第三节 包含作业1¶
-
比特币系统人员组成
- 开发人员:立法权
- 矿工:行政权
- 用户:司法权
-
比特币发型机制
-
总数量:核定,每10分钟出一个区块,最初区块奖励50枚,然后每21万个区块减半(四年减半),到2140年左右发行完毕
- 第一个区块被成为创世区块,内容不能改变
-
作业1
-
计算总量2100万的由来
- 计算四年减半说法的由来
- 计算总共减半的次数
- 计算被挖完的年份-2140是怎么得出来的
-
比特币信息数据的查询
-
比特币是存在于整个p2p网络的。
- 每一笔查询都经过全网广播,所有交易人人可见,公开透明,可以查看任何数据,并且保证交易无法伪造
第四节 加密学¶
- 哈希算法特点:
- 正向容易
- 反向困难
- 异入异出
- 输入敏感
- 雪崩效应:哈希函数的输入明文,有微笑的差距,就会导致输出的严重不一致
- 比特币的地址生成使用了:$SHA256 $ and $ RIPEMD−160$
- SHA-2
- 其中的224,256是哈希摘要的长度,输出长度越长,抗攻击能力越强
- 加密解密算法
- 核心逻辑:明文通过加密密钥变为密文,密文通过解密密钥变为明文
- 如果加密密钥=解密密钥,则是对称加密(私钥加密),否则为非对称加密(公钥加密)
- 非对称加密算法:
- 公开密钥,可公开
- 私有密钥,私有
- 生成:通过一对密钥对得到,通过私钥得到公钥,但是反过来不行
- 流程 如果A要和B通信,则在此之前,B广播公钥,A获得B的公钥。然后A给B发消息,则使用B的公钥加密,发送给B,B使用自己的私钥解密即可。
- 两种应用:其实公钥和私钥都可以用于加密 私钥加密,公钥解密:身份认证 公钥加密,私钥解密:信息加密
- 公钥密码算法的分类
- 大整数因子分解问题
- 离散对称问题
- 椭圆曲线:
- 标准方程:其中的系数a = 0, b = 7,也就是\(y = x^3 + 7\)
- 带签名的通信过程:
- 如果A和B需要进行互相通信,则首先互换公钥。公钥都是用自身的私钥产生的。
- 数字签名是用自己的私钥根据要发送的消息具体变化而生成的。
- 如果A要给B发消息:
- 加密:用B的公钥把要发的消息加密
- 签名:用A自己的私钥给消息签名
- B收到消息之后:
- 解密:用B自己的私钥把消息解密
- 验证:用A的公钥进行验证
第五节 区块结构 包含作业2 与 画图题¶
- 区块链:由包含交易信息的区块从后向前有序链接的数据结构,每个区块都指向前一个区块。第0个是创世区块。
- 区块高度:是从某个区块到第一个区块的高度。
- 区块的标识符:
- 区块高度:某些情况下不能唯一标识一个区块,因为某个项目中可能短时间内有两个同样的高度的区块
- 区块头的哈希:可以唯一标识。并且每个区块存储的是父区块的Hash值。并且只有区块头被用于计算Hash。
- 区块头Hash的作用:
- 可以乱序获得区块,然后按照Hash顺序连接。方便并行传输。
- 可以防止篡改,因为如果要改,就要一改到头。但是创世区块无法修改,所以无法修改。
- 存储:一般区块存储在k-v DB中,k是Hash,v是区块
- 区块容量大小
- 区块容量大小是1MB
- 每个区块包含的交易数:假设一笔交易需要250字节,而区块头固定80字节,则大约可以包含\(1024 * 1024 / 250 = 4194\) 笔交易
- 区块交易频率
- 每10分钟产生一个区块,一个区块4194笔交易
- 4194 / 600 = 7 tps
- 这是一个很低的交易频率,并发数太低
- 区块参数
- 版上默时难随
- 版本:版本号
- 上一个区块的哈希值:指向上一个区块
- 默克尔树根节点哈希:根据一个区块中所有交易的Merkle tree的root的哈希值
- 时间戳:区块产生的时间。但是父区块时间戳不一定严格小于子区块时间戳,有个容忍范围。
- bits:用于难度值的设置。目标哈希值经过压缩,生成bits字段。bits值越小,则hash值越小,挖矿越难
- Nonce:一个32位随机数
- 哈希值的计算:
- 根据区块参数,每次取一个随机数(只有这个是变量),然后将参数相加,对这个和求两次sha256,则求得一个哈希值。
- 如果自己遍历随机数,求哈希值,求得的结果<目标哈希值,则成功
- 这个衍生出工作量证明机制:证明只用计算1次,但是打包的时候需要计算 \(2 ^ {32}\) 次
- 完整打包过程:
- 把本地内存的交易记录到区块体中
- 把交易生成merkle树,把root求hash,存在区块头
- 把上一个区块的区块头数据通过sha256生成hash值,填入父Hash
- 把时间戳存储时间戳字段
- 感知难度值,存入bits字段
- 生成随机数,通过本区块的这些hash值进行遍历,如果哈希值小于bits字段反压缩出来的hash,则视为成功
- 工作量证明的本质:
- 1 cpu 1票
- 最长链为主
- 默克尔树的绘制
- 唯一一个绘图题,必考。
- 自底向上进行绘制
- 默克尔树作用:
- 代替哈希列表,组成一颗默克尔树,方便p2p测试
- 隶属证明
- 默克尔树计算:某个比特币64笔交易,采用默克尔树进行存储,则轻节点进行验证的时候,除了本身的交易哈希之外,还需要返回多少哈希值?当结果是32或者30笔交易的时候,又会是多少条
- 比特币密码学算法:
- 哈希算法:
- SHA-256
- RIPEMD-160:用于生成比特币地址
- ECDSA 非对称加密、签名算法
- 也有对称加密算法
- 哈希算法:
- 双花:值攻击者几乎同时将同一笔钱用作不同交易或者获得了物品最终却没掏钱
- UTXO模型和Account模型
- 账户:是区块链系统中的数字货币的所有者,称为地址
- 账户之间的货币交易通过交易来实现转账
- 比特币是UTXO模型,以太坊是Account模型
- 比特币的UTXO模型:
- 比特币的交易分为输入和输出,交易的输入和输出都是单一的整体,不可划分。
- 定义:未花费的交易输出
第六节 共识算法¶
- 共识算法
- 定义:针对某一个提案,达成一致意见的机制,就是共识算法
- 算法和机制的区别:
- 算法:顺序敏感
- 机制:顺序不敏感
- 区块链共识算法:使得区块链事务达成分布式共识(各个节点对交易结果达成一致)的算法
- 分布式系统
- 定义:一个组件在不同的联网的计算机上,组件之间通过传递消息进行通信和协调,共同完成一个任务的系统
- 不可靠情况:
- 节点不可靠
- 网络不可靠
- 一致性
- 注意点:一致性不等于共识算法
- 分布式系统应该满足的要求:活性,安全性,正确性
- 类别:
- 强一致性
- 顺序一致性
- 弱一致性
- 不同链的共识算法
- 公有链
- pow
- pos
- dpos
- ripple
- 联盟链
- pbft
- dbft
- 私有链
- paxos
- raft
- 公有链
- FLP定理
- 在不能依赖于一个外部的同步时钟的情况下,对于一个完全异步的分布式系统而言,只要有一个节点故障,就会导致全局共识无法达成
- 定理内容:即使在网络通信可靠的情况下,分布式系统的共识问题没有通用的解法
- CAP定理
- 内容:一个分布式系统,不可能同时满足三个重要的属性:
- 一致性C:这里指强一致性
- 可用性A:用户的基本请求可以被满足
- 分区容错性P:系统的分区故障导致延迟等情况下,系统仍然可以工作
- 不同的组合
- CA:几乎不存在,因为在分布式系统中必须要满足P
- CP: 分布式数据库,在极端情况下需要保证一致性
- AP:12306,淘宝,极端情况下需要保证服务可用
- POW 是AP模式,牺牲了强一致性。是一种概率性的拜占庭协议
- 比特币是AP模式,因此他的共识问题是个最终一致性的问题。同时中本聪进行了优化,称为非确定性的概率一致性的问题
- 公有链可以最终一致性,而一般私有链和联盟链都是强一致性算法
- 内容:一个分布式系统,不可能同时满足三个重要的属性:
- 拜占庭将军问题
- 背景:将军作战时的信使,甚至将军都可能叛变,问将军什么情况下能保证对作战方案达成共识
- 结论:如果叛变数\(F < 1/3N\),则才有保证。否则无解。三个人中有一个都不行
-
发展:
- BFT:\(O(n^F)\)
-
PBFT \(O(N^2)\),
- 定义:实用拜占庭容错算法,是paxos算法的变种。本质:给全网消息的顺序进行共识
- 过程:request,pre-prepare,prepare,commit,response
- 缺点:
- 节点上限:100个
- 不能防止女巫攻击:一个人恶意伪造多个用户进行共识过程
- 拜占庭容错算法分类:
-
确定性算法:一旦对某个结果达成共识,就不能更改
- 概率性算法:共识结果暂时不稳定,随着时间推移被推翻的可能性越来越小,最后称为确定性共识
- POW
- 定义:权益证明机制,也称为股份证明机制
- 安全性:来源于抵押的经济价值
- 实现手段:币龄 = 持有数量 + 持有时间
- 参与角色:验证者
- 优点:人人可挖矿,节能环保,性能高,网络更安全
- 不可能三角(不是定理):
- 去中心化,安全,效率:不可能同时都满足
- 比特币节点功能:
- 钱包功能
- 完整区块链
- 挖矿功能
- 路由功能(唯一必须)
- 比特币节点分类
- 普通全节点:完整且最新的节点数据
- bitcoin core全节点:功能最为全面的节点
- SPV钱包节点:轻节点,只用支付验证,注意不是交易验证,并且只用下载区块头
- 独立挖矿节点
- 比特币轻节点一年新增的数据量?
- 假设区块头80字节
- 10分钟一块
- 一年新增的数据量:\(80 * 6 * 24 *365 = 4MB\)
第七节 区块链应用¶
- 应用的场景
- 金融:交易,支付
- 公益:公益捐赠
- 文娱:数字版权
- 物联网:物品溯源,防伪