【本文原发时间:2025年10月25日】
问题描述
比特币是一种新型货币。随着比特币价格上涨,比特币“挖矿”这一概念走入大众视野。什么是比特币“挖矿”呢?简单来说,“挖矿”就是在许多数字中,通过暴力枚举的手段逐一尝试,找到一个满足一定数学关系要求的数字。一个数字成功与否是纯随机的,因为我们无法通过数学算法算出这个数字,也无从得知找到该数字的任何线索,只能利用暴力方法,一个一个地尝试,直到恰巧找到这个幸运数字满足要求。因此,每个数字输入后,计算结果刚好满足要求的概率都是相同的。尝试每个数字是否符合要求都要让计算机计算一段时间,且时间是相同的。
找寻这个幸运数字很困难。这是因为,这个数字的可能范围非常大,有$2 ^ {256}$(约为$1.15 \times 10 ^{77}$)个可能。根据2025年10月的数据,整个世界上每秒大概尝试了$10^{21}$次数字,而比特币系统设定平均过约10分钟(尝试了约$6 \times 10^{23}$次)才能出现一个成功的数字,因此尝试一次成功概率约为$\frac{1}{6 \times 10^{23}}$,极低。
虽然困难,但由于谁猜对了数字,比特币系统就会给谁发放价值不菲的比特币作为奖励,因此随着比特币价格的上涨,越来越多的人涌入尝试幸运数字的行列。这个尝试数字以试图成功获取奖励的动作就是“挖矿”,因为“矿”就是这个数字,或者说比特币系统的奖励。这些人就被称为“矿工”。由于挖矿是完全的暴力枚举游戏,而尝试某一数字是否符合要求是需要计算时间的,因此矿工希望自己计算机的算力更加强大,这样可以在相同时间尝试更多数字,提高自己找到这个幸运数字的概率。因此矿工们购置大量的专业计算设备,以提高他们的电脑的计算能力。具体而言:由于每个数字是否成功的概率是相等的,而计算时间也是一样的,因此找到幸运数字的概率就近似与你的算力成正比。
比特币系统规定,整个比特币系统在平均约10分钟会诞生一个幸运数字(无论是谁找出的)。因此,假如你的算力占整个世界上所有矿工的比例为p,那么你平均10/p分钟会找到一个幸运数字,你的平均挖矿速率为0.1p个/min。因为找到幸运数字的概率与你的算力成正比。
问题内容
假如一个比特币矿工的算力占全网(所有矿工)的比例为r。现在我们来思考下列问题:
-
他在1分钟内挖到k个区块的概率是多少?提示:$ \lim_{x\rightarrow \infty}\left( 1+\frac{1}{x} \right) ^x=e $
-
假设全球的矿工们分为了两大阵营A和B,他们的算力比例分别是p和q,p<q,当然p+q=1.现在他们分别自己开始同时挖矿。起初B比A多挖了d个区块(挖到一个区块的意思就是找到了一个正确数字)。给A足够长的时间,那么A能在某时刻追平B阵营挖矿个数(即:A能比B多挖d个区块)的概率是多少?
假设全球的矿工们分为了两大阵营A和B,他们的算力比例分别是p和q,p<q。现在A、B阵营进行挖矿比赛,A和B同时开始挖矿(起初二者都没有挖矿),比赛时间无限长。我们定义:若在某时刻出现A比B挖矿个数相同或更多的情景,则A有权宣布获胜,比赛立刻结束。在比赛大屏幕上显示B已经挖矿的个数,但不告诉A的挖矿个数。
注意:只要A挖矿个数等于或超过B,A就可以宣布其获胜,比赛结束,但A可以不在一追平B时就宣布胜利。B无权宣布比赛获胜(即若在无限长时间内A无法宣布获胜,则B获胜)。
现在大屏幕上显示z个,则A获得比赛的胜利的概率是多少?给出求和表达式即可,并计算p=0.1, z=2时的概率。
问题解答
问题1:
每次挖矿都可以看作一个随机、独立的尝试,就像掷骰子一样,掷一次骰子就是找一个数字进行运算,掷到特定的点数(如6)就是该数字符合要求,挖矿成功。掷骰子是一个二项分布。但是挖矿中,成功概率p极低,而一个矿工尝试次数n非常大,因此一定时间内的成功次数k就可以看作一个实验次数n非常大而成功概率p非常小的二项分布。我们具体看看:
假如一个矿工算力占全网比例为r,即平均挖矿速率为0.1r个/min。在这1分钟内,假设他尝试了n个数字,每个数字成功的概率为p。那么他恰好成功找到k个数字的概率,由二项分布:
$$ P\left( X=k \right) =C_{n}^{k}p^k\left( 1-p \right) ^{n-k} $$并且,n非常大,p非常小,但是他在1分钟内找到正确数字的期望值是确定的,为0.1r,也就是二项分布的期望np。现在我们令$\lambda =np=0.1r$,且让n趋向于无穷,将p用$\lambda$代换,有:
$$ p\left( X=k \right) =\lim_{n\rightarrow +\infty}\frac{n!}{k!\left( n-k \right) !}\frac{\lambda ^k}{n^k}\left( 1-\frac{\lambda}{n} \right) ^{n-k} $$提出含有$\lambda$、k的常数,并利用极限:$\lim_{x\rightarrow \infty}\left( 1+\frac{1}{x} \right) ^x=e$,我们将得到:
$$ P\left( X=k \right) =\frac{\lambda ^k}{k!}e^{-\lambda} $$这就是矿工在1分钟内,挖到k个区块(找到k个正确数字)的概率。如果时间是10分钟,只需将$\lambda$改为r,因为10分钟内,矿工找到正确数字个数的期望为r。
问题2:
现在阵营A落后B d个区块。A和B现在同时开始挖矿。由于算力与挖矿成功的概率成正比,因此下一个区块究竟由A还是B挖出,取决于A与B的算力比例p和q,即有p的概率下一个区块是A挖出的,q的概率是由B挖出的。我们用$P_i$表示在A落后B i个区块的情况下,A追平B的概率。此时,若下一个区块由A挖出(概率为p),则最后追平的概率为$P_{i-1}$;但是如果下一个区块由B挖出(概率为q),则最后追平的概率为$P_{i+1}$。这样我们有:
$$ P_i=p·P_{i-1}+q·P_{i+1},\ i\geq 1 $$其中,当i=0时,追平成功,即$P_0=1$. 当$i=+\infty$时,$P_{+\infty}=0 $ ,这是因为当落后无穷个区块时,因为p<q,所以差距只会越来越大,即使给无限的时间。 求解此关系式(利用特征根法,或$ \left( 1-p \right) P_i+p·P_i=p·P_{i-1}+q·P_{i+1},\,\,i\geq 1 $ 得到$Q_i=P_i-P_{i+1}\left( i\ge 1 \right) $ 成等比数列等方法)可得:
$$ P_i=\left( \frac{p}{q} \right) ^i,i\geq 0 $$也就是说,当落后i个区块时,阵营A想要追平,概率就是上面的$P_i$。
问题3: 现在B已经挖出z个区块,不同的是在此期间A也在挖(他俩是同时开始的),设A挖出了k个。A要赢,当然$k \geq z$就赢了,即只要在这段时间内A挖矿个数$\geq z$,则A胜利。这种情况概率记为$P_1$。但是如果 $k \lt z$ ,则A也还有希望,就是利用无穷的时间去“追平”这差距的z-k个区块,这种情况概率记为$P_2$。注意:可能有$k \geq z$,因为在大屏幕显示z时,A完全可以不急于宣布胜利,满足题目“看到显示z的条件下,最终A获胜”的要求。
对于$P_1$,也就是在B挖出z个区块的时间内,求解A挖出区块的个数为k的概率。利用第一问,我们有:$ P_1=\sum_{k=z}^{\infty}{\frac{\lambda ^k}{k!}}e^{-\lambda} $ ,其中λ是在这段时间内,A挖出区块个数的期望,即$ \lambda =z·\frac{p}{q} $ 。只要在这段时间内A比B挖的多,A就胜利,即满足“现在大屏幕上显示z个”的条件下A胜利。
对于$P_2$,首先A挖出区块k个,概率为第一问的$ P\left( X=k \right) $ ;对于这落后的z-k个区块,A有无穷时间去追平,追平的概率就是第二问求解的当d=z-k的概率$ \left( \frac{p}{q} \right) ^{z-k} $ 。因此,$ P_2=\sum_{k=0}^{z-1}{\frac{\lambda ^k}{k!}e^{-\lambda}}·\left( \frac{p}{q} \right) ^{z-k} $ 。
则:$ P=P_1+P_2 $ 。
为便于求值,利用概率和为1,上式变形为:
$$ P=1-\sum_{k=0}^z{\frac{\lambda ^k}{k!}e^{-\lambda}\left( 1-\left( \frac{p}{q} \right) ^{z-k} \right)} $$当p=0.1,z=…时,P=…
1,≈20.46% 2,≈5.10% 3,≈1.32% 4,≈0.35% 5,≈0.091% 6,≈0.024%
当p=0.01, z=2时,P≈0.05%。
(注:这实际就是在求解攻击者发起双花攻击的成功概率。z=2对应1个确认数下,双花攻击成功的概率,因为该问题实际上是追平而非“超过”,需要多一个区块才能成功双花攻击。)
【参考资料】见我与Gemini对话和比特币白皮书第11节。