区块链相关知识6

资料

github区块链项目

一文弄懂区块链

一、拜占庭将军问题

9位将军攻打一座城市,如何使9位将军命令一致,即如何达成共识(一致性)?

拜占庭容错:若叛徒数大于1/3,则拜占庭将军问题不可解。

传统解决方案

口头协议or书面协议

PBFT

实用拜占庭容错算法。

大意:收到命令的将军去询问其他将军收到的命令。

区块链解决方案

每个将军都维护一个数据库,数据库中记录了所有将军的决定。

二、比特币技术

节点

全节点:网络路由节点,完整区块链,钱包,矿工

区块生成速度

平均生成时间为10分钟,每2016个区块调整一次,各节点根据链上信息自己调整,快了就增加难度,慢了就降低难度。反正全网节点选择最长链上的且难度最大的区块作为新区块。

比特币总量

一开始每个区块奖励50btc,每210000个区块奖励减半,总共210000x(50+25….) = 2100万块。

矿工的收益除了铸币交易,还来自交易费。

区块容量

一个区块1M,最大交易数为2400笔(也有说2700的,利用率110%)。

如今完整区块链的大小为151GB。

容量——使用率——交易费。

交易

交易结构:

  1. 版本
  2. 输入数量
  3. 输入
  4. 输出数量
  5. 输出(btc数量+加密脚本)
  6. 时钟时间

交易的基本单位: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)。

叶节点必为偶数个,若为奇数则复制最后一个节点。

疑惑

  1. 由输入减去输出得到交易费,具体是怎么给的,另外算交易吗?
  2. 新增的交易会不会影响当前区块的打包,开始计算Merkle树后会不会改变包含交易?
  3. 交易转账的地址有没有被包含在交易中,怎么和UTXO一起使用?
  4. 交易池的作用?
  5. 不停让别人验证会不会造成攻击?
  6. 区块中会保存Merkle树吗,如果没有那该怎么验证交易?

由公钥生成比特币地址。