初始比特币(3.28)

2018-03-28  本文已影响0人  lqsss

去中心化

  1. 信任
    我们现在的钱存储在银行,银行具备保证“我手中(收到)的货币数量不可被更改+只有我的授权才能支付”的能力。
    银行通过技术手段保证了这些!在银行系统存储了所有账户余额的表单:
我们的钱变成了存储在服务器里的一堆数据

我们最初能用纸质的钱交换商品,源于人们对人民币的信任,我们将钱放入银行,变成了看不见的数据,是我们对政府银行的信任。

比特币采用了一种特殊的去中心化的账本存储方案

  1. 存储
    方案:所有加入比特币网络的电脑上,都会存储一样的账本,由于账本存储在网络的各个节点上,其中一个节点出现问题,还是可以从其他节点获取数据。

A->B 5.0BTC,最初进行这比转账处理的节点,就要把这个处理的情况传播给邻近的其他节点,依次传播......直到网络上的所有节点都被更新了。

  1. 实现支付授权(非对称加密)
    在这种没有中央保证的去中心化情况下,如何保证支付的安全性呢?
    这里就要谈到密码学中的非对称加密!
  1. 公钥加密,私钥解密
  2. 私钥签名,公钥验证

账单

FROM(谁发送的,包括两部分)inputs
Previous tx: 你要花的这笔钱的那个账单的id, 也就是说,你花的任何一笔钱都应该有人转给你过,需要出示那个账单的
idscriptSig: 你对这笔交易的签名,就是把单子用你的私钥做hash,只有你能做这个hash

TO(谁接受,包括两部分)outputs
Value: 要发多少
scriptPubKey: 对方的公钥,比特币账户就是一段公钥

我们先看inputs:
A->B转账 5.0 BTC

  1. A需要转出的5个BTC,必须从其他账单转给A总和>=5.0才可以交易
  2. A需要用私钥进行签名,来证明其他账单的收益人是A本人
  3. inputs是多笔之前的交易账单总和。如果账单加起来超过5.0,则多余的发送给自己(以自己的公钥作为output)

outputs:

  1. 需要对方的公钥,指定此笔转账的受益人是谁。

如何保证转账人是否有足够的余额

我们可以看到,每一个账单都根据交易序号,来查找input里引用的账单,通过私钥生成的hash来验证(那些账单里的公钥地址是否为A),验证inputs和outputs金额之和相等。

要是引用的过去的账单曾经使用过 怎么办?
无效!

  1. 每当一张账单生效时,inputs里引用的账单就标注为 used。
  2. 账单生效前,对inputs里的引用账单交易序号txn检验,在未使用的账单里检索,如果查询到,则校验成功
  3. 随着每次新交易的产生,这个索引会不断更新

安全性

区块链

区块链结构

  1. block:比特币系统在进行交易存储的时候,会将交易分组打包存储
  2. 链:区块与区块之间通过prev(上一个block的hash值)连接在一起

上一个区块的hash值+一堆交易清单+Nonce变量

生成区块链

  1. 交易发生后进入计算机内存,进行基本验证(inputs里的是否是未被支付过的交易)。如果验证成功,就会躺在内存的有效交易池中等待被装入区块中(未确认交易)。这比交易发生后,也会在全网广播,周边的计算机节点接到这比交易后,这放入内存,验证,等待打包进区块。
  2. 在整个系统中负责发起记账动作的节点会从内存的有效交易池中,抽取近千笔交易,进行打包。打包时,会将上一个区块的Hash值也加入包中。
  3. 对整个包球Hash值,这个Hash值就是block的特征参数
  4. 该节点生成区块后,该节点会发起一次全网记账。(新区块)本节点->周边节点->周边的周边,直到全网都收到这个信息。当周边的节点收到这个信息后,将新区块数据记录到本地的电脑中,以确保本地的区块链数据为最新的数据。

安全性证明

  1. 伪造最近一笔交易,不可能,每一笔交易都追溯到之前的交易
  2. 那么伪造之前所有的交易,如果修改了历史的某个交易,那么它的hash就会变化,而接下来的区块也会随之改变,一直影响后面

双重支付风险与防控机制

背景

背景:交易的顺序不可控,在全网广播的过程中,交易到达节点的顺序无法控制。
比如A->B 5.0BTC,A又发起A->A 5.0BTC 。一部分节点收到A->B,拒绝后收到的A->A,一部分节点收到A->A,拒绝A->B。
那么此时整个网络节点分为 A,B两大派,A派和B派都会组装一个区块,接到整个区块链的最后,比特币系统区块链就分叉了,那么以哪条为准呢?
规则:以最长的链为准

如果含有A->A的区块链比较长的话,A->B就被放弃了。比如:A->B5.0BTC,被认为无效交易。结果B寄出了物品,而却没有收到钱。称为“双花”风险。

为了解决这个问题,比特币系统就要想出一种办法,让Alice不能轻易的制造出更长的链条。

解决

让所有的节点计算一道很难的谜题,只有找到答案的节点才有权组装新的区块,并发起一次记账动作。

标准:就是让新区块的Hash值小于一个目标值
每个节点在组包时,根据上一个block的hash值,交易清单,Nonce变量得出。而Nonce在不断变化,Hash值也随之改变

image.png

注意:需要控制谜题的难度,因为不断有新的节点加入到比特币网络中,这样就可能在段时间内算出满足的Hash值。于是比特币系统需要调整难度。

Proof of Work(PoW)

上面通过计算满足条件的Hash值,来确立哪个节点有记账的权利,叫做工作量证明。
上面Alice如果想实现双重支付,就必须比其他节点算的快。如果A控制了整个系统的51%的节点,制造出更长的链条。

其他

矿工

矿工的工作就是用来计算出满足条件,并争取组装区块及发起全网记账。每次解出的节点就会被奖励一定数量的比特币。整个过程就像矿工在挖矿一样。
当挖出一个block,系统奖励矿工比特币,这笔账单没有inputs,只有outputs记录了矿工的公钥地址,到时候矿工通过私钥就可以取出来用。

比特币的总量

2100W定值。挖矿奖励的金额是递减的,每四年减半一次。


image.png
上一篇 下一篇

猜你喜欢

热点阅读