区块链相关知识6
资料
一、拜占庭将军问题
9位将军攻打一座城市,如何使9位将军命令一致,即如何达成共识(一致性)?
拜占庭容错:若叛徒数大于1/3,则拜占庭将军问题不可解。
传统解决方案
口头协议or书面协议
PBFT
实用拜占庭容错算法。
大意:收到命令的将军去询问其他将军收到的命令。
区块链解决方案
每个将军都维护一个数据库,数据库中记录了所有将军的决定。
二、比特币技术
节点
全节点:网络路由节点,完整区块链,钱包,矿工
区块生成速度
平均生成时间为10分钟,每2016个区块调整一次,各节点根据链上信息自己调整,快了就增加难度,慢了就降低难度。反正全网节点选择最长链上的且难度最大的区块作为新区块。
比特币总量
一开始每个区块奖励50btc,每210000个区块奖励减半,总共210000x(50+25….) = 2100万块。
矿工的收益除了铸币交易,还来自交易费。
区块容量
一个区块1M,最大交易数为2400笔(也有说2700的,利用率110%)。
如今完整区块链的大小为151GB。
容量——使用率——交易费。
交易
交易结构:
- 版本
- 输入数量
- 输入
- 输出数量
- 输出(btc数量+加密脚本)
- 时钟时间
交易的基本单位:UTXO,未经使用的一个交易输出
Merkle树
什么是Merkle树
Merkle树是一种哈希二叉树,用于快速查找和检验大规模数据完整性
构建Merkle树
假设有ABCD四个交易,则Merkle根为Hash(Hash(Hash(A)+Hash(B))+Hash(Hash(C)+Hash(D))),依次子节点为H(A+B)和H(C+D),然后是四个叶节点H(A), H(B), H(C), H(D)。
叶节点必为偶数个,若为奇数则复制最后一个节点。
疑惑
- 由输入减去输出得到交易费,具体是怎么给的,另外算交易吗?
- 新增的交易会不会影响当前区块的打包,开始计算Merkle树后会不会改变包含交易?
- 交易转账的地址有没有被包含在交易中,怎么和UTXO一起使用?
- 交易池的作用?
- 不停让别人验证会不会造成攻击?
- 区块中会保存Merkle树吗,如果没有那该怎么验证交易?
由公钥生成比特币地址。