V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
psych0
V2EX  ›  Bitcoin

请教一个关于比特币方程组的问题;搜了一圈也没找到答案。

  •  
  •   psych0 · 2020-06-08 10:51:16 +08:00 · 631 次点击
    这是一个创建于 1637 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请教一个问题:比特币需要人们去找的那个特解的方程组是只有一组(不会变化)的吗?如果是的话,这个方程组是什么样的?方程组解的总个数是怎么估算(或确定)出来的?

    感谢!
    3 条回复    2020-06-09 17:37:24 +08:00
    acess
        1
    acess  
       2020-06-09 13:28:58 +08:00
    这种问题很不招人待见……很容易受到“先去读白皮书”这种嘲讽……

    答案很简单,没有什么方程组,也没有什么特解。

    每个区块不都可以算出自己的哈希值么?挖矿有个“难度要求”,必须不断地暴力试错,试到这个哈希值小于规定值,这样才算你挖到了(这就是所谓的“难题”)。这个时候,你就有权拿到新发行的比特币(也叫 block subsidy )和手续费两部分奖励。这个奖励是通过 coinbase 交易记录的,矿工(矿池)先打包好别人的交易,然后据此写好 coinbase 交易,再去暴力试错(也就是挖矿),挖到了就全网广播出去,别的矿工看到了,验证通过,就会跟着你挖出来的区块继续延续下去。

    这里的难度要求也是动态调整的,比特币用的办法就是每 2016 个区块重新调整一次难度,根据之前的出块速度来评判,如果出块速度太快,表示难度偏低,就相应地调高难度,反之亦然。(这里理论上也存在一个问题,就是 time warp attack,因为出块时间只能靠矿工自己写进去,所以理论上矿工可以在时间戳上撒谎——但是这种攻击仍然需要超过 50%的算力)
    注意这个动态调整是一种游戏规则,是每一个节点自发地去遵守的,而不是靠某个权威服务器去强制执行的——其实不仅是难度调整,比特币的所有规则都是这样,包括 2100 万总量上限、给出有效数字签名才能转走币等等,都是这样的,如果有人不遵守规则,那网络中的每一个诚实的节点都会排斥他,把他踢出网络。

    因为每个区块都包含上一个区块的哈希值,所以每挖到一个新区块,就自然而然地相当于重新出了一道新的难题,之前暴力试错得到的答案不能套用到新的难题身上。
    比特币用的双 SHA256 哈希,哈希值有 256bit 呢,2^256 这个数字相当之大,(只要 SHA256 仍然安全)不用担心会碰巧出现跟以前一样的难题,可以认为这是不可能的。


    另外,即使是在计算同一道题的过程中,也是不存在“进度”这个概念的,无论你暴力试错挖了多久,都不表示你距离成功挖到矿更近一步。这和扔骰子是一个道理,(考虑骰子均匀的情况下)即使因为你走了狗屎运,一连扔出 6 次都没有一个 6,也不代表你第 7 次就有更高的概率能扔出 6 。
    psych0
        2
    psych0  
    OP
       2020-06-09 14:53:09 +08:00
    @acess 非常非常感谢你的耐心解答。是我才学疏浅了。我确实查找了一些资料,及看了一些相关的视频,但确实没有去认真学习“白皮书”。

    可能也正因为如此,让我对所看到的资料没有一个很正确的理解,导致问出了这样一个“愚蠢”的问题。以后一定注意。

    再次,非常感谢你的耐心解答和建议!
    acess
        3
    acess  
       2020-06-09 17:37:24 +08:00
    @psych0 我其实没有说你……说实话我当时读白皮书也不是很懂。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:34 · PVG 20:34 · LAX 04:34 · JFK 07:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.