美文网首页
初始比特币(3.28)

初始比特币(3.28)

作者: lqsss | 来源:发表于2018-03-28 11:32 被阅读0次

    去中心化

    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

    相关文章

      网友评论

          本文标题:初始比特币(3.28)

          本文链接:https://www.haomeiwen.com/subject/hlxqcftx.html