zoukankan      html  css  js  c++  java
  • BitCoin工作原理

    1.加密货币

    公共账本-信任+加密算法=加密货币
    BitCoin是第一个被是实现出来的加密货币。

    首先理解比特币是什么,在考虑要不要买入?(人人都想一夜暴富,美哉)

    2.发送、接收、创造比特币的时候电脑在干什么?

    这里写图片描述
    和现实货币而言,加密货币的支柱并不是验证交易的银行系统,而是一个巧妙地、去中心化的、无需信任的验证系统。原理就在于密码学里的数学。

    3.协议(Protocol)和账本

    • 协议:

      (1)任何人卡都可以在账本上添加新行
      (2)每月用真金白银结算
      (3)只有有签名的交易才有效。
      (4)不可超支,确保不会出现欠下巨款的情况

    对于协议,能不能找到一个协议,来决定是否接收交易,并决定交易顺序,使得你可以放心相信,世界上遵守同一个协议的所有人,手上的账本和你的一模一样?
    从大体上来看,比特币给出的方案是哪个账本上的计算量大,就信任哪一个账本。这涉及到了所谓的密码哈希函数。
    如果我们把计算工作量作为信任的基础,那么我们可以让交易欺诈和账本不一致的情形的计算力成本高到不行。
    - 账本
    通过一个公开的正本记录交易的信息,使用电子签名保证交易的真实性。

    • 电子签名:
      所有人都生成一个“公钥-私钥对”(public key-secret key),不一样的信息会生成完全不同的签名,而且生成签名的函数的结果取决于信息本身以及你的私钥,私钥保证只有你可以给出那个签名。
      信息能改变签名这个性质,就确保了其他人不能单单把你的签名,复制伪造到另一条信息里。
      另一个配套的函数,用于验证签名是否正确,这时候就用到了公钥,函数会返回true/false,来表明这个用于验证的签名,是否是用公钥对应的私钥来获得的。
      这里写图片描述

    在不知道秘钥的情况下,几乎完全不可能找出正确的签名。
    公钥是公开的,所哟谁都可以检查。

    虽然有了电子签名,可以保证没有伪造,但是还是可以复制粘贴一条相同的交易信息到账本上,因为签名和信息的组合还是正确的,这样的话这条交易信息也会被认为是真实的,怎么办?
    要解决这个问题,我们可以规定,当你签署一则交易时,信息还必须包含这笔交易独有的某种ID号。这样的话,账本的每一个新的记录,都需要全新的签名。

    加密货币的实体是一个账本,而货币的实体是交易的记录。

    • 哈希函数
      这种函数的输入可以是任意信息或者文件,具体是什么不重要,他的是输出值是固定长度的比特串。这个输出就叫做信息的“哈希值”或者“摘要”。它们是故意设计的杂乱无章,但不是随机,因为对于同一个输入,输出值是固定的。例如SHA256函数
      逆向计算是不可行的!

    4.比特币工作原理

    比特币创始论文的核心想法,是让所有人信任工作量最大的账本。

    • 工作原理:
      首先把账本割分成“区块”,每一个区块包含了一个交易列表,加上工作量证明,也就是那个特殊的数字,使得整个区块的哈希值开头有很多个0。
      这里写图片描述

    只有发款人签名后,交易才算有效。同样的,区块有了工作量证明,才能被认为是有效的。
    还有,为了给这些区块一些标准的顺序,我们要求区块的标头,要包含前一个区块的哈希值。
    这里写图片描述
    这样子,要是你修改了之前的区块,或者互换了两个区块,那就会改变接下来的区块,同时也改变了哈希值,也就改变了下一块区块。 这就需要重做所有的计算工作了,也就是找到新的特殊数字,使得哈希值开头0的个数是一个约定的数字。

    正因为所有的区块都串成了一条链,所以我们一般不把它叫做账本,而是“区块链”(block chain)。

    这个新协议的一部分是,我们允许所有人都参与建造区块。即是说,他们都可以听到交易广播,把他们收集成区块,然后做许多的计算工作,找到特殊的数字,使得区块的哈希值开头有约定的数量的0。他们一旦找到这个数,就广播发现了新的区块。为了奖励区块发现者的所有工作,当他整理出区块时,我们允许他在最上面加上一笔很特殊的交易。让他凭空得到一些金钱。这叫做“区块奖励”。这并不需要遵守认可交易与否的准则。因为它不是从其他人那里来的,所以不需要签名。
    这也意味着,每一个新的区块,都会给经济添加新的虚拟货币。

    建造区块,一般叫做“挖矿”,因为这个过程需要许多工作量,而且也给经济注入了一些新的货币。当你听说或者读到“矿工”时,他们做的其实是,接收交易信息,建造区块,把区块广播出去,然后得到新的钱作为奖励。

    我们协议中关键的一点是:
    当你接收到两条不同的区块链时,其中交易信息相冲突时,你只保留最长的,也即是包含的工作量最大的那一条。如果长度相同,那么就坐等新的区块,使得其中一条更长。
    虽然没有中心权威,所有人也都各自记录区块链,但假如所有人都同意说,认可工作量最大的区块链,那么我们就有办法达成去中心化的共识。

    5.比特币和其他加密货币的主要思想

    这里写图片描述

    中奖时间:
    这里写图片描述
    比特币里所有的钱,归根到底都来自区块奖励。

    有一个网站,Block Explorer(方便你查询整个比特币区块链)

    补充一些有意思的:
    原始的比特币论文:https://bitcoin.org/bitcoin.pdf

    Block explorer网站:https://blockexplorer.com/

    Michael Nielsen的博客帖子:https://goo.gl/BW1RV3
    (它能帮你很好地了解交易具体是怎样的,这是这个视频里没提到过的内容。)

    CuriousInventor的视频:https://youtu.be/Lx9zgZCMqXE

    Anders Brownworth的视频:“>https://youtu.be/☆160oMzblY8

    以太坊白皮书:https://goo.gl/XXZddT
    - 矿难
    矿工挖比特币都不再是单独挖了(单独挖可能一百年都挖不到一个奖励),他们会把算力集中在一起形成一个算力池,算力池首先爆块的概率高很多,得到的奖励根据算力大小加权分给成员。这样大家得到收益就比较持续稳定了。这个收益可以说是根电费成正比的,比如消耗1度电能挖到0.0001个比特币,当比特币价格暴跌(比如跌倒5000)的时候,一度电的成本(比如1元)比收益(0.0001*5000=0.5元)都高了,那矿工就不愿意开机啦。这就是所谓的矿难。(那矿难有啥好处呢,当然是矿难时矿工们就会甩卖显卡来回血啦,所以说一方矿难,八方点赞了)

  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387029.html
Copyright © 2011-2022 走看看