区块链
区块链:去中心化的账本
共识协议: 工作量证明
挖矿动力:区块奖励 交易费
比特币网络:P2P Overlay network
设计原则:简单 鲁棒 不需要高效
挖矿
H(block header)<= target
比特币
中本聪的基本逻辑
比特币发行机制
- 发行总量不变
- 总量恒定,永不增发,大约每十分钟出一个区块,区块包含新币的问世和发行
- 最开始每个区块的奖励为50枚比特币,然后每21万个区块奖励减半一次,一直到2140年发行完毕
- 第一个区块为创世区块,其内容不可更改
- 奖励逐渐减半
- 每产生21万个区块,奖励减半
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fqDQp3GL-1609852709495)(D:\firefoxdowload\图片\image-20210105100131069.png)]
比特币区块结构
比特币的难度和目标
难度:Bits值
目标:通过运算得到target
难度调整
Merkle树
非叶子节点的值:其下面所有叶子节点值进行组合后再Hash计算所得
叶子节点的值:数据的Hash值
作用:大大减少数据的传输量以及计算的复杂度,只需验证传输后的新区块上的默克尔根的值是否相等,不相等可逐层验证哈希值是否一致,最终找到不一致的数据进行重新同步。
区块链的生成过程
- 把本地内存中的交易信息记录到区块之中
- 生成包含交易信息的默克尔树,并把默克尔根植写到区块头里
- 生成上一个区块头的哈希写入区块头
- 将当前时间戳写入到区块头
- 将调整后的难度之写入到区块头
交易机制
- 如何交易
- 一位所有者(A)利用自己的私钥对前一次的交易T1和下一位所有者(B)的公钥地址签署一个随机散列的数字签名,这一位所有者将此数据签名制作为交易单T2,并将交易单T2全网广播
- 前一次交易说明货币的来源
- 下一位所有者的地址说明货币的去向
- 数字签名就是将前一次的交易数据和接收方的公钥连起来求Hash值x,再利用自己的私钥对x进行加密,就得到这份数字签名
- 验证交易
- 利用交易T2发起方的公钥对签名进行解密得到x
- 对T1交易数据和B的公钥连接起来求Hash得到 y
- 验证x y是否相等
密码算法
奠基工作
-
不可追踪的的密码学网络支付系统----------------------------------大卫乔姆
-
时间戳技术 ,实现了数据文件的不可篡改-------------Haber和Stornetta
-
HashCash:哈希现金,工作量证明算法------------------------------亚当贝克
-
B-money,匿名的分布式电子加密货币系统-----------------------------戴伟
-
Bit Gold,核心是工作量证明-------------------------------------------尼克萨博
-
工作量证明机制----------------------------------------------------------哈尔芬尼
-
中本聪在前任理论基础之上发表论文,一种点对点的现金支付系统
哈希函数 H: X->Y
-
数学形式定义
- 压缩:输入为任意长度,输出为固定长度.
- 能计算出H(x)
- 像攻击是困难的,对任意的hash值h,找到满足H(x)=y的x是困难的.
- 二元像攻击是困难的,找到满足H(x)=H(y),x!=y是困难的
-
雪崩效应:加密算法的一种特征,指明文的少量变化会引起密文的很大变化.
非对称加密
- 加密密钥和解密密钥不同就是非对称加密
- 非对称加密算法需要产生一对公私钥对,如果用公钥加密,只有用私钥才能解密,用私钥加密公钥才可以解密
数字签名
密码学
私钥->公钥->比特币地址 不可逆
共识算法
双花问题
双重花费.通过共识算法解决.保证交易安全
共识算法
- 保证分布式系统的系统状态一致性
- 一致性:所有诚实节点保存的区块链的前缀部分完全相同
- 有效性:由某个诚实节点发布的信息终将被其他所有节点记录在自己的区块链中
拜占庭将军问题
系统中的一个或多个系统组件失效问题.
分布式共识算法的定理
-
FLP定理
-
定义:在一个多进程异步通信系统中,即使只有一个进程不可靠,那么就不存在协议或算法能保证有限时间内使所有进程达成一致
-
启发:不要浪费时间为一个异步分布式系统设计在任意场景下都能实现共识的算法
-
-
CAP定理
- 一致性:每次读取系统,无论读取哪个节点都会读到同样的数据
- 可用性:每个操作都能够在一定时间内得到系统的响应
- 分区容错性:分布式系统中的部分节点故障不影响系统继续工作
区块链之不可能三角
- 去中心化
- 安全
- 可扩展性/效率
比特币追求去中心化和安全的技术组合
比特币每秒只能处理7笔交易,远远无法承载全球货币支付场景的需求
非拜占庭容错算法
性能较好,处理较快,不能容忍一半以上的节点故障
Paxos算法
-
异常情况
- 机器宕机
- 网络延迟,重复,丢失,分区
-
解决的问题:
如何在一个可能发生异常的分布式系统中,快速并且正确地在集群内部对某个数据的值达成一致,并且保证不论发生什么异常都不会破坏系统的一致性
-
算法描述
- 角色:客户端,提议者,决策者,决策学习者,领导者
- 阶段:
- 准备阶段(Prepare)
- 提议阶段(Accept)
Raft算法
- 介绍
- 是对Paxos算法的重新简化设计和实现
- 将一致性问题分解为领导选举,日志复制,安全性三部分
拜占庭容错算法
- PBFT为代表性的确定性系列算法
- Pow为代表的概率算法
确定性算法:一旦对某个结果达成共识就不可逆转,即共识是最终结果
概率算法:随着时间的推移,共识结果被推翻的可能性越小
PBFT算法
-
核心理论:n>=3f+1,n是系统总的服务节点数,f是故障的节点数
-
过程:请求,预准备,交互,序号确认,回复
-
优点:
- 节能
- 吞吐量高,节点数适当时交易延时极低,PBFT无需等待确认
- 分叉几率很低
- 主节点并不具备很大权限
- 节点之间不需要互相信任
-
缺点:
- 不能防止女巫攻击。女巫攻击是指一个用户恶意伪造多个客户来达成共识。POW是通过巨大的金钱消耗来增加伪造一个新账户的难度
- 不能解决数据库事务管理的问题
非强一致性共识算法POW机制
- 通过算力的随机性竞争记账的方式选出一个节点,来记录一个区块的交易信息
- Pow共识机制
- 通过复杂计算自我验证合法性
- 验证成功后通知其他节点
- 其他节点确认即可
- 无法被篡改
- 工作量证明
- 最长合法链
- 弊端
- 节点数和算力值逐渐失配
- Pow太浪费资源
Pos权益证明
的金钱消耗来增加伪造一个新账户的难度
- 不能解决数据库事务管理的问题
非强一致性共识算法POW机制
- 通过算力的随机性竞争记账的方式选出一个节点,来记录一个区块的交易信息
- Pow共识机制
- 通过复杂计算自我验证合法性
- 验证成功后通知其他节点
- 其他节点确认即可
- 无法被篡改
- 工作量证明
- 最长合法链
- 弊端
- 节点数和算力值逐渐失配
- Pow太浪费资源
Pos权益证明