-
核心概念:
- 比特币的发行:由挖矿决定(
coinbase铸币权) - 防止双花攻击(
double spending)
- 比特币的发行:由挖矿决定(
-
BTC系统中每个交易都包含输入和输出两部分,然后由转账人签名:
- 输入部分要说明币的来源和发起转账人的公钥
- 为防止有人冒名顶替,用自己的公私钥对进行对他人账户章BTC的转移,需要比对在coinbase中的获得铸币权人的公钥哈希和当前公钥(拼接当前节点输入和上一个节点的输出,组成
bitcoin script,运行无误即通过)
- 为防止有人冒名顶替,用自己的公私钥对进行对他人账户章BTC的转移,需要比对在coinbase中的获得铸币权人的公钥哈希和当前公钥(拼接当前节点输入和上一个节点的输出,组成
- 输出部分要给出收款人公钥的哈希(即收款人的账户地址)
- 输入部分要说明币的来源和发起转账人的公钥
-
两种哈希指针
- 一种是指向前一个区块头的哈希指针
- 另一种是指向前面某个交易的指针,即用来指明币的来源
-
block header中包含的主要的域:
- 版本:protocol version
- 指向上一个节点的哈希指针:hash of previous block header
- 区块体中交易数据的根哈希值:merkel root hash
- 挖矿相关:
- 目标难度:
target- mining puzzle:
H(block header) <= target - 目标难度的编码:nBits
- mining puzzle:
- 随机数:
nonce
- 目标难度:
-
分布式共识:
distributed consensus- 不可能结论:
FLP theorem:在一个异步的(asynchronous)系统里,(网络传输迟延没有上限就叫异步系统),即使只有一个成员是有问题的(faulty),也不可能取得共识CAP theorem:任何一个分布式系统,这三个性质中(Consistency、Availability、Partition tolerance)最多只能满足两个
- 著名协议
Paxos
- 不可能结论:
-
比特币中的共识协议:
- 投票:需要检验membership
- 按照账户投票:难以防范女巫攻击
Sybil attack- 联盟链,membership准入要求,
hyperledger fabric
- 联盟链,membership准入要求,
- 按照算力投票:寻找nonce,解mining puzzle
- 争夺记账权:
- 获得记账权的节点有权利发布下一个区块。其他节点收到这个区块之后,要验证该区块的合法性
- 铸币交易
block reward:50BTC -> 25BTC -> 12.5BTC -> 6.25BTC -> ...(每隔21万个区块奖励减半,即大约四年)
- 具体验证方式:
- 验证block header:
- 检查nBits域设置的是否符合比特币协议中规定的难度要求
- 检查该不等式是否成立
- 检查block body:
- 验证交易列表中每个交易是否都合法
- 合法的签名
- 以前没有被花过
- 验证交易列表中每个交易是否都合法
- 验证block header:
- 争夺记账权:
- 按照账户投票:难以防范女巫攻击
- 最长合法链:
- 分叉攻击
Forking attack - 隐式同意
implicit consent:在认可的最长合法链上继续挖矿 - 确认时间:六个区块之后(10分钟出一个块,大概一小时)
- 分叉攻击
- 希望获得共识的内容:账本的一致性
- 投票:需要检验membership