比特币白皮书(阅读总结)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyxyong/article/details/77771155

比特币白皮书

比特币钱包的使用

  1. 比特币钱包(Electrum)
  2. 简化的支付确认SPV (Simplified Payment Verification):

  3. 比特币单位换算关系如下:

    • 1比特币(Bitcoins,BTC)
    • 0.01比特分(Bitcent,cBTC)
    • 0.001毫比特(Milli-Bitcoins,mBTC)
    • 0.000001微比特(Micro-Bitcoins,μBTC或uBTC)
    • 0.00000001聪(satoshi)(基本单位)
  4. 交易(transactions), 一枚电子货币的实质:

    • 1 是一串数字签名
      • 每一位所有者通过对前一次交易下一位拥有者的公钥签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾;
      • 电子货币发送给下一位拥有者后, 收款人通过对签名进行校验,就能够验证该链条的所有者。
      • 该过程的问题在于,收款人将难以检验,之前的某位所有者,是否对这枚电子货币进行了双重支付。
      • 我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。
      • 从逻辑上看,为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。为了确保某一次交易是不存在的,那么唯一的方法就是获悉之前发生过的所有交易。
      • 如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布(publicly announced),我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现.
  5. 时间戳服务器(Timestamp server)

    • 时间戳服务器通过对以区块存形式存在的一组数据实施随机散列而加上时间戳,并将该时间戳进行广播。
    • 该时间戳能够证实特定数据某特定时间是确定存在的。
      • 因为只有在此时刻存在了,才能获取相应的随机散列值。
    • 每个时间戳应该将前一个时间戳纳入其随机散列值中, 每一个随后的时间戳都对前一个时间戳进行增强,这样就形成了一个链条。
  6. 工作量证明:

    • 为了在点对点的基础上构建一组分散化的时间戳服务器,所以在进行随机散列运算时,工作量证明机制引入了对某一个特定值的扫描工作。
      • 例如: SHA-256下,随机散列值以一个或多个0开始。那么随着0的数目的上升, 找到这个解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。
    • 在区块中补增一个随机数(Nonce),这个随机数要使得该给定区块的随机散列值出现了所需的那么多个0
    • 由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。
    • 另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(the proof-of-work difficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。
  7. 比特币网络的运转:

    • 新的交易向全网进行广播;
    • 每一个节点都将收到的交易信息纳入一个区块中;
    • 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
    • 当一个节点找到了一个工作量证明,它就向全网进行广播;
    • 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
    • 其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值。
    • 所谓“新的交易要广播”,实际上不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果一个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求。
  8. 激励

    • 每个区块的第一笔交易进行特殊化处理(奖励交易),该交易产生一枚由该区块创造者拥有的新的电子货币。
      • 1 增加了节点支持该网络的激励;
      • 2 并在没有中央集权机构发行货币的情况下,提供了一种将电子货币分配到流通领域的一种方法。
    • 另外一个激励的来源则是交易费(transaction fees)。
    • 激励系统也有助于鼓励节点保持诚实。
      • 当攻击节点的算力高于诚实节点的算力时:
        • 要么将其用于诚实工作产生新的电子货币;
        • 或者将其用于进行二次支付攻击。
        • 会发现,按照规则行事、诚实工作是更有利可图的。因为该等规则使得他能够拥有更多的电子货币,而不是破坏这个系统使得其自身财富的有效性受损。
  9. 回收硬盘空间

    • 不含交易信息的区块头(Block header)大小仅有80字节
    • 回收硬盘空间的时机:
      • 最近的交易已经被纳入了足够多的区块之中,那么就可以丢弃该交易之前的数据,以回收硬盘空间。
      • 为了同时确保不损害区块的随机散列值,交易信息被随机散列时,被构建成一种Merkle树(Merkle tree)[7] 的形态,使得只有根(root)被纳入了区块的随机散列值。通过将该树(tree)的分支拔除(stubbing)的方法,老区块就能被压缩。而内部的随机散列值是不必保存的。
  10. 简化的支付确认 SPV:

    • 描述 : 在不运行完整网络节点的情况下,也能够对支付进行检验。
      • 实现方式 : 一个用户需要保留最长的工作量证明链条的区块头的拷贝,它可以不断向网络发起询问,直到它确信自己拥有最长的链条,并能够通过merkle的分支, 通向它被加上时间戳并纳入区块的那次交易。
      • 节点想要自行检验该交易的有效性原本是不可能的,但通过追溯到链条的某个位置,它就能看到某个节点曾经接受过它,并且于其后追加的区块也进一步证明全网曾经接受了它。
  11. 价值的分割与组合:
    • 为了使得价值易于组合与分割,交易被设计为可以纳入多个输入和输出。
    • 一般而言是某次价值较大的前次交易构成的单一输入,或者由某几个价值较小的前次交易共同构成的并行输入,但是输出最多只有两个:一个用于支付,另一个用于找零(如有)。
    • 需要指出的是,当一笔交易依赖于之前的多笔交易时,这些交易又各自依赖于多笔交易,但这并不存在任何问题。因为这个工作机制并不需要展开检验之前发生的所有交易历史。
  12. 隐私;
    • 传统隐私保护方式:因为试图向可信任的第三方索取交易信息是严格受限的。
    • 比特币的保护方式:
      • 比特币将交易信息向全网进行广播,就意味着这样的方法失效。
      • 但是隐私依然可以得到保护:将公钥保持为匿名。公众得知的信息仅仅是有某个人将一定数量的货币发所给了另外一个人,但是难以将该交易同特定的人联系在一起。
      • 风险(暴露隐私):作为额外的预防措施,使用者可以让每次交易都生成一个新的地址,以确保这些交易不被追溯到一个共同的所有者。但是由于并行输入的存在,一定程度上的追溯还是不可避免的,因为并行输入表明这些货币都属于同一个所有者
        • 此时的风险在于,如果某个人的某一个公钥被确认属于他,那么就可以追溯出此人的其它很多交易。
  13. 计算

    • 攻击节点算力高于诚实节点,快速的制造替代性区块链。
      • 产生的后果:最多是更改他自己的交易信息,并试图拿回他刚刚付给别人的钱。
      • 不能办到的事情:
        • 1 凭空创造价值;
        • 2 掠夺本不属于攻击者的货币。
        • 原因: 这是因为节点将不会接受无效的交易,诚实的节点永远不会接受一个包含了无效信息的区块。
    • 提前预防方案:收款人生成了新的一对密钥组合,然后只预留一个较短的时间将公钥发送给付款人。
      • 可以防止以下情况:付款人预先准备好一个区块链然后持续地对此区块进行运算,直到运气让他的区块链超越了诚实链条,方才立即执行支付。
  14. 结论

    • 预设出:一种不需要信用中介的电子支付系统。
    • 实现方案:
      • 1 通用的电子货币的电子签名原理,为所有权提供了强有力的控制。
        • 缺憾:但是不足以防止双重支付。
      • 2 一种采用工作量证明机制的点对点网络来记录交易的公开信息。

没有更多推荐了,返回首页