特性
去中心化。
这意味着没有中心的服务器,不受某个人的控制,整个系统直接由用户端的电脑构成。这样的技术难度是非常大的,并不像手机 App 或是小网站一样,你想发布就发布,这需要有人来跟你一起玩。
数据防篡改。
所有交易记录全量保存,并公开给所有的人,而且还被加密和校验。并不是数据不能被篡改,而是数据被篡改的成本非常大。(有人借此说区块链的不可篡改可以解决人类的信任问题,这个并不一定。)
固定的发行量。
不会像国家中央银行那样乱印钞票,造成通货膨胀。
此外:
(1)提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。
(2)区块链的存储基于分布式数据库;数据库是区块链的数据载体,区块链是交易的业务逻辑载体;区块链按时间序列化区块数据,整个网络有一个最终确定状态;区块链只对添加有效,对其他操作无效;交易基于非对称加密的公私钥验证;区块链网络要求拜占庭将军容错;共识算法能够“解决”双花问题。
分布式一致性算法简介
拜占庭错误
伪造信息恶意响应的情况称为拜占庭错误,对应的节点是拜占庭节点;
一般把出现故障但不会伪造信息的情况称为“非拜占庭错误”。
拜占庭容错系统研究中的三个重要理论:CAP、FLP 和 DLS。
CAP在网络发生阻断(partition)时,你只能选择数据的一致性(consistency)或可用性(availability),无法两者兼得,在一致性、可用性和分区容忍性上只能三选两
FLP在异步环境中,如果节点间的网络延迟没有上限,只要有一个恶意节点存在,就没有算法能在有限的时间内达成共识
DLS在部分同步(partially synchronous)的网络环境中(即网络延迟有一定的上限,但我们无法事先知道上限是多少),协议可以容忍最多 1/3 的拜占庭故障(Byzantine fault)。
在异步(asynchronous)网络环境中,具确定性质的协议无法容忍任何错误,但这篇论文并没有提及 randomized algorithms 在这种情况可以容忍最多 1/3 的拜占庭故障。
在同步(synchronous)网络环境中(网络延迟有上限且上限是已知的),协议可以容忍 100% 的拜占庭故障。
分布式系统问题
一致性问题 任意节点的提案能够在约定的协议下被其他所有节点所认可。这里的认可表示所有节点对外呈现的信息一致。
可终止性问题 系统必须在有限的时间内给出一致性结果。
合法性问题 提案必须是系统内的节点提出的。
分布式系统的原理:
FLP原理:不存在一个通用的共识算法可以解决所有的拜占庭错误;
CAP原理:一致性、可用性、分区容忍性三者选择两个作为强化的点,另外一个必然被弱化。
分布式一致性算法、共识算法
经典的分布式一致性算法
Raft强leader的一致性算法,Paxos提供不同场合不同类型的一致性算法。
以上不提供拜占庭容错算法。
PBFT要求所有节点共同维护一个状态。适合联盟链等对性能要求较高的场合。
区块链共识算法
工业成熟度的PoW,容错阈值是50%,作弊节点占全网节点的比例。
PoX类的算法通过概率选择记账者降低了潜在的提案者,延长了最终一致性的时间。
Pow Proof of Work
区块链网络设计使用的算法思路:一个是限制一段时间内整个网络中出现提案的个数(增加提案成本),另外一个是放宽对最终一致性确认的需求,约定好大家都确认并沿着已知最长的链进行拓宽。PoW 共识机制是一种简单粗暴的共识算法,它不要求高质量的 P2P 网络资源,它可以为公链提供稳定有效的记账者筛选机制。
共识机制
业务吞吐量、交易速度、不可篡改性、准入门槛,最为关键的技术要素之一。
POW工作机制
计算资源是决定记账权的唯一因素
计算难度是区块链为了控制产生答案的速度
Pow的激励机制
解决双花攻击:广播的内容分为两种,第一种是Transacton,第二种是区块,也就是信封。
所有记账节点都会遵循两条规则:
一、一个代币如果已经被花费,会被标记为已花费,如果再次接收到这个代币被花费的请求,记账节点会拒绝打包这个交易;二、如果同时接收到两个信封,这两个信封中的两笔交易出现了一个代币被花费两次的情况,这是我们所说的分叉(fork),那么会选择挖矿难度较大的那个信封。
工作量证明就是为了下面几件事。
提高对数据篡改的成本。
提高网络中有不同声音的成本。
解决分歧
PoW 也有几个非常严重的问题。
越来越中心化地记账。
越来越跑不动。
PoW 共识最大的缺点是非常消耗计算资源,耗电耗能源
比特币
区块链技术
真正的数据。
自己的地址(或是 ID)。
前一个数据块的地址。
工作量证明共识机制
比特币的几个问题
交易成本上升。
个人无法参与
社区的利益纷争。
步骤
公开记账、创建创世区块、交易、打包Transaction、广播交易
比特币哈希算法
Version,Previous Block Hash,Merkle Root,Timestamp,Difficulty Target 和 Nonce 这六个数据字段是区块链的区块数据协议头
一般的挖矿流程如下
(1)从网络上取得之前的区块信息。
(2)从 " 待记账区 " 中获取一组交易数据(有优先级,比如成长时间、矿工小费等)。
(3)形成区块头(计算 Merkle Root 并设计记账时间 Timestamp 等)。
(4)开始穷举 Nonce,来计算区块头的 hash 值。如果前面有 18 个零(小于 Target),那么记账成功。如果没有,则从第一步重新开始。
(5)一旦某矿工成功打包一个区块,他就会告诉其他矿工。收到消息的矿工会停下手上的工作,开始验证,验证通过后,广播给其他矿工。
以太坊Merkle Root树
一个是用来做交易 hash 的 Merkle Root。
一个是用来表示状态 State 的。
还有一个是用来做交易收据的。
UTXO(Unspent Transaction Output)
需要进行交易处理
公链以及联盟链,依赖的核心技术
P2P 网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。
P2P 网络协议是所有区块链的最底层模块,负责交易数据的网络传输和广播、节点发现和维护。
在经典分布式计算领域,我们有 Raft 和 Paxos 算法家族代表的非拜占庭容错算法,以及具有拜占庭容错特性的 PBFT 共识算法。
在区块链领域,哈希算法是应用得最多的算法。哈希算法具有抗碰撞性、原像不可逆、难题友好性等特征
p2p网络
资源定位:节点发现、局域网穿透
资源获取:节点交互协议
几个常用名词
全节点是一个独立节点,可以自己验证交易并且可以挖矿的节点。
自私挖矿是指矿工先通过较大算力积累优势,挖出多的块的同时不广播,等别人广播一个新区块的时候,自己一下广播2个甚至更多区块,让别人一直处于被分分叉的状态,自己成为矿霸,可以形成100%出块率。
双花攻击就是指一个币可以花费两次,属于数据库一致性问题。
重放攻击与传统it的重放不同,是指硬分叉的两条链的交易都是合法的,可以在a生成交易后去b上去花费。
pos
proof of stake权益证明
包含了多个变种实现
币龄:币数量乘以天数
缺陷:币发行 币龄与时间相关 用户还是倾向于囤积代币
哈希与加密算法
哈希算法 散列算法 h=HASH(X|z)
四个特性:原像不可逆;难题友好性;发散性;抗碰撞性
非对称加密算法