学习笔记《区块链技术与应用》第三天 网络 难度
比特币网络工作原理 The BitCoin Network
application layer: BitCoin BlockChain
network layer: P2P Overlay Network
simple, robust, but not efficient
flooding 洪泛
每个节点维护一个等待上链的集合。如果区块链已经包含某个交易,就可以从集合里删除这个交易。
越大的区块越慢,比特币有1MB大小的限制,带宽是瓶颈。
best effort
如何通过nonce调整挖矿速度
H(blockheader)<=targetH(block header)<=targetH(blockheader)<=target
比特币使用的哈希算法为SHA-256,整个22562^{256}2256
difficulty={difficult_1_target}/{target} 挖矿难度与target成反比,系统内算力越来越强,出块速度越来越快。
51% attack:假设有很多个分叉,善意节点的算力会被分散,恶意节点就可以集中攻击一个分叉。
以太坊的出块时间为15秒,因此设计一个新的协议ghost。
orphan block也给予奖励uncle reward
2016个区块调整难度。
2016 *10min / 60min / 24h = 14days
target = target * (actual time / expected time)
expected time = 2 weeks
actual time = time spent mining the last 2016 blocks
每次最大调整范围为4倍:比如2weeks之后 最大8weeks 最小0.5week
- 如何让所有矿工同时调整阈值?写在代码里,自动调整。
挖矿难度 Hash Rate
全节点
- 一直在线
- 完整信息
- 内存维护UTXO集合
- 监听交易 验证每个交易合法性
- 决定哪些交易会被打包到区块
- 监听其他矿工挖出来的区块,验证其合法性
- 挖矿
- 决定沿着哪条链,默认最长
- 当出现等长分叉,选择哪个,默认最先
轻节点
- 不是一直在线
- 不用保存整个区块链信息,只保存每个header。 大小相差1000倍
- 不用保存全部交易,只保存自己相关交易
- 无法验证大多数合法性,只能检验与自己相关的合法性
- 无法检测网上发布的区块正确性
- 可以验证挖矿难度只是用header信息
- 只能检测哪个是最长链,步子回到哪个是最长合法链
挖矿
CPU -> GPU -> ASIC(Application Specific Integrated Circuit)
mining puzzle
merge mining:
单个矿工 -> 矿池
miner(ASIC)只负责计算hash,pool manager负责其他全节点工作
矿池为了解决收入不稳定。
on demand computing 按需计算
on demand mining 按需挖矿