学习笔记《区块链技术与应用》第二天 共识机制
如何发行一个一个虚拟币?
人民币如何发行?
人民银行印制——防伪(密钥)——发布(公钥)——使用(没法花两次——双花攻击 double spending attack)
数字货币就是文件,可以复制,可以双花。
改进:1. 唯一编号,2. 所属检查
去中心化:
- 谁来发布货币
- 怎么防范double spending attack
Create Coin -> A(10) 铸币交易(Coinbase tx)(凭空发行)
↑ A -> B(5) signed by A
↑ A -> C(5) signed by A
输入部分:说明来源+公钥
输出部分:验证Hash+收款人的公钥Hash地址
B->C(2) singed by B
B->D(3) singed by B
C->E(1) singed by C
两种Hash point: 1. Linked block 2. coin from(防止双花)
一次交易:(私钥签名,公钥验证,我收到交易我验证)
A的签名+B的地址(account)
A需要B的地址,B需要A的公钥
再谈Block header, Block body
Block header:
- version
- hash of previous block header (只取header不管body)
- Merkle root hash
- target
- nonce
H(block header) <= target
Block body:
- transaction list
- full node (fully validating node): 全节点(保存所有信息,可以验证交易)
- light node (无法独立验证交易合法性)(系统中大多数是轻节点)
每个账户都可以发起交易并广播给所有节点,谁来决定哪些交易可以写入区块?按照什么顺序?唯一性如何保证?
- distributed consensus 分布式共识
- distributed hash table 分布式hash表
- impossibility result 不可能结论
- FLP asynchronous, faulty,异步系统中一个成员有问题就不能取得共识。
- CAP theorem, 最多只能同时满足两个
- consistency 一致性
- availability 可用性
- Partition tolerance 容错
比特币中的共识协议
Consensus in BitCoin
任何基于投票的方案首先确认谁有投票权membership。
基于节点投票问题:sybil attach女巫攻击,大量产生可投票的攻击节点。
基于算例投票:
H(block header) <= target
不停的尝试nonce,找到符合要求nonce,整个节点获得记账权,写入下一个区块的权利(记账权),其他节点收到后验证合法性(验证block header nBits是否正确,查nonce是否符合<target, 所有header都符合要求,验证body交易偶读合法1 签名,2无双花问题)
- 最长合法链longest valid chain
- forking attack 分叉攻击
- 等长的临时分叉会存在一段时间,直到其中一个抢先一步找到下一个区块则变为合法。短的链会被丢弃orphan block
比特币系统两个问题
谁有权发行货币
如何验证合法性
mining 挖矿