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

2020-06-08 10:51:16 +08:00
 psych0
请教一个问题:比特币需要人们去找的那个特解的方程组是只有一组(不会变化)的吗?如果是的话,这个方程组是什么样的?方程组解的总个数是怎么估算(或确定)出来的?

感谢!
477 次点击
所在节点    Bitcoin
3 条回复
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
2020-06-09 14:53:09 +08:00
@acess 非常非常感谢你的耐心解答。是我才学疏浅了。我确实查找了一些资料,及看了一些相关的视频,但确实没有去认真学习“白皮书”。

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

再次,非常感谢你的耐心解答和建议!
acess
2020-06-09 17:37:24 +08:00
@psych0 我其实没有说你……说实话我当时读白皮书也不是很懂。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/679621

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX