非对称加密体系方案

使用非对称加密体系,央行发行货币,使用私钥加密,每个人可以用公钥验证真伪。

缺点

  • 双重支付问题(double spending attack)

中心化方案

央行发行货币,每个货币有唯一ID,维护一个数据库,每次交易都要记录交易过程,以验证所花的货币在支付人手中。

缺点

  • 中心化方案,维护成本高

去中心化方案

待解决问题

  1. 谁来发放货币?
  2. 怎么防范双重支付问题

发放货币

通过“挖矿(mining)”实现,具体之后再细说

双重支付问题

通过区块链这一数据结构解决

交易过程

A向B转账

  1. A需要知道B的地址(由平台提供,比特币本身并不提供)
  2. B(或者其他所有节点)需要知道A的公钥(用于验证)

转账方的公钥应该与其资产来源的公钥相一致

比特币中的交易是输入和输出两个脚本,验证合法性时是将货币来源的输入脚本和输出脚本合并在一起来,通过是否能顺利执行来判断是否合法

比特币区块构成

Block header

  • version
  • hash of previous block header
  • Merkle root hash
  • target(挖矿的目标地址)Hash(blocker header)<=target
  • nonce

仅取header的hash,因为Merkle root hash 已经能够保证body的正确性

Block body

  • transaction list 交易列表

比特币中的共识协议 Consensus in BintCoin

每个账本的内容要取得分布式共识 distributed consensus

节点

full node

保存所有信息,需要验证每一个节点

light node

只保存block header,轻节点没办法独立验证交易的合法性

假设

系统中大多数节点是正常的,仅部分为恶意节点

投票可以吗?

谁可以投票呢?(membership问题)

比特币可不经过系统同意产生账户,那可以通过产生大量的新账号来进行投票以压倒正确方

比特币的投票

使用运算能力来投票

只有找到nonce的节点(由其他节点去判断难度和正确性以及其他的header内容)才有权利去发布下一个节点

仅插在区块链后面的区块才是合法的

若两个节点同时获得记账权,则可能会产生分叉,比特币中其他节点仅接收最先接收到的那一个。

比特币中怎么算是认可?

若节点在新节点之后继续延伸,则认为其是合法的

分叉会在系统中存在一段时间,过一段时间后有了一个新块,连接到了A块后面,则B块就被淘汰了,A块成为了最长合法链。

争夺记账权的动力

block reward

争夺到记账权的节点可以发行一定量的货币,这也是比特币唯一产生途径。

能造多少呢?

最开始是50个比特币,21万个区块之后,数量减半