如果是央行发布的数字货币 , 签名出去 。会存在什么问题? 数字货币就是文件,我可以直接复制 ,可以完成 double spending attack

如果央行给数字货币加上编号,维护一个数据库,记录编号和归属者的关系。 如果开始花费,那么就是修改归属关系,可以防范 double spending attack 。- 会存在什么问题? 可以实践,但是是一个中心化的方案,每一个交易都需要央行参与。

那么如何设计一个脱离央行的数字化货币的方案。

  • 如何解决货币什么时候发布? 谁发布?
  • 如何解决 double spending attack

区块链的结构可以完成这个货币在谁手上

比特币交易

上图,存在连接交易的hash指针,还存在说明币的来源的hash 指针(为了防范 double spending),其他节点会回溯来源位置,

A给B发起交易过程

B的地址是B的公钥计算出来,但是A如何知道B的地址? 其实是第一个第三方提供,比如扫描一个支持比特币支付的二维码。

B需要知道A的公钥,甚至所有节点都需要A的公钥,为了验证这个交易: 如果是A自己说自己的公钥,那么就存在一个安全风险了。

一笔交易需要说明输入和输出: 输入:币的来源和A的公钥 - A公钥的hash 和 币的来源需要匹配上 输出: 交易完成记录

交易结构

Block Header

  • version
  • hash of previouse block header - 知道在区块链的位置
  • merkle root hash
  • target - 挖矿 使用 H(bolck header) <= target
  • nonce - 4 byte 随机数

Block body

transaction list

全节点:保存了全部交易信息 轻节点:只保存了 block header 信息 - 大部分节点

账本分布式共识

如果每一个节点都可以记录区块链内容,那么如何保证唯一性? 即账本内容需要获取分布式共识 - distribated consensus

如何假设大部分节点都是好的,存在少数存在恶意的节点? 那么直接投票呢? 每一个节点都参与计算和投票。 =》 任何基于投票的方案,首先需要确定谁有投票权 ,既然一个账户都是一个公私钥对,那么可以直接 sybil attack , 所以简单的直接投票不可行。

比特币选择算力的计算力投票,而不是按照账户数量投票,即 比特币的共识机制是依靠算力来投票 。 H(block header) <= target

如果一个新的节点,插入到中间位置了(判断double spending 只会验证一个分支) , 那么可以这样操作么? 虽然这样做交易是合法的,但是不是在最长合法链,比特币规定接受的新节点,必须要在扩展最长合法链 longest valid chain

那如果出现两个等长的分叉呢?同时希望插入新的节点:如果在这个新的节点后,还存在继续扩展新的节点,这样才会认为是合法的,也就是会观察一下这两个节点,看看哪一个会胜出,丢失 orphan block , 那么失败的分叉,就会失去铸币权了。

比特币系统中发行新的比特币的唯一途径是计算后可以获取到铸币权 block reward ; 协议规定 21 万比特币之后协议就需要减半 ,一开始每一个区块发布 50 个比特币。(比特币系统设计的平均出块时间是10分钟,即到达21万平均是4年)

综上,一个节点是不是得到认可,即需要依靠hash rate 的速度。

在寻找一个合法的nonce的过程 , 就是一个 mining 的过程

参考

04-BTC-协议_哔哩哔哩_bilibili