已知
p p p = probability an honest node finds the next block
q q q = probability the attacker finds the next block
q − z q_{-z} q−z = probability the attacker will ever catch up from z blocks behind
注: p + q = 1 p + q = 1 p+q=1
求攻击者在落后z个区块的情况下被攻击者追上的概率。
分析:
这个问题可以等价于赌徒问题,赌徒(攻击者)本钱为 − z -z −z;相当于目前落后z个区块
赌徒赌赢的概率是 q q q,那么赌徒的本钱为-z时,赌徒攻击成功的概率为
q − z = q ∗ q − z + 1 + ( 1 − q ) ∗ q − z − 1 q_{-z}= q*q_{-z+1}+(1-q)*q_{-z-1} q−z=q∗q−z+1+(1−q)∗q−z−1
目的是资产达到i,我们来看第一回合赌局,有两种可能,以q的概率赌赢,以1-q的概率赌输:
这是一个二阶的数列,相当于解方程 x = q x 2 + ( 1 − q ) x=qx^2+(1-q) x=qx2+(1−q),解得 x 1 = 1 x_1=1 x1=1, x 2 = 1 − q q x_2=\frac{1-q}{q} x2=q1−q。
注意:
当 x 1 = x 2 x_1=x_2 x1=x2时,即 q = 1 2 q=\frac{1}{2} q=21,
q − z = ( A + B ( − z ) ) ( x 1 ) − z = A + B ( − z ) q_{-z}=(A+B(-z))(x_1)^{-z} = A+B(-z) q−z=(A+B(−z))(x1)−z=A+B(−z)
又因为 q 0 = 1 q_0=1 q0=1且 q − ∞ = 0 q_{-\infin}=0 q−∞=0,所以 q z = 1 q_z=1 qz=1。
当 x 1 ≠ x 2 时 , {x_1}\neq{x_2}时, x1̸=x2时,
q − z = A ( x 1 ) − z + B ( x 2 ) − z = A + B ( 1 − q q ) − z q_{-z}=A(x_1)^{-z}+B(x_2)^{-z} = A+B(\frac{1-q}{q})^{-z} q−z=A(x1)−z+B(x2)−z=A+B(q1−q)−z
综上所述:
q − z = { ( 1 − q q ) − z = ( q 1 − q ) z , q < 1 2 1 , q ≥ 1 2 q_{-z} = \begin{cases} (\frac{1-q}{q})^{-z}=(\frac{q}{1-q})^{z}, & q<\frac{1}{2} \\ 1, & q \geq \frac{1}{2} \end{cases} q−z={ (q1−q)−z=(1−qq)z,1,q<21q≥21
进行变换:
q − z = { ( q p ) z , q < p 1 , q ≥ p q_{-z} = \begin{cases} (\frac{q}{p})^{z}, & q<p \\ 1, & q \geq p \end{cases} q−z={ (pq)z,1,q<pq≥p
当我们发起一笔交易tx在T1时被广播,而攻击者同时在T1做双花攻击。在T2时tx被主链上z个区块支持。
那么我们需要猜测攻击者在从T1时刻到T2时刻,暗地里挖了多少个块?
假设是泊松过程,T为一段长时间,在间隔T内,诚实结点挖了p个,攻击者挖了q个。
诚实结点挖z个区块所花时间t满足 z = ( p T ) t z = (\frac{p}{T})t z=(Tp)t
攻击结点挖x个区块所花时间t满足 x = ( q T ) t x = (\frac{q}{T})t x=(Tq)t
因此,
x = q p z x = \frac{q}{p}z x=pqz
所以,攻击者暗地里挖的区块个数满足 λ = q p z \lambda=\frac{q}{p}z λ=pqz的泊松分布P(x)。所以攻击者攻击成功的概率为
P ( 攻 击 成 功 ) = ∑ x = 0 + ∞ P ( x ) ∗ q − z ( z − x ) = ∑ x = 0 + ∞ λ x e x p ( − λ ) x ! ∗ { ( q p ) z − x , x ≤ z 1 , x > z = 1 − ∑ x = 0 z λ x e x p ( − λ ) x ! ( 1 − ( q p ) z − x ) P(攻击成功) = \sum_{x=0}^{+\infin} P(x)*q_{-z}(z-x) = \sum_{x=0}^{+\infin} \frac{ {\lambda}^{x}{exp(-\lambda)}}{x!} * \begin{cases} (\frac{q}{p})^{z-x}, & x\leq z \\ 1, & x > z \end{cases}=1-\sum_{x=0}^{z} \frac{ {\lambda}^{x}{exp(-\lambda)}}{x!}(1-(\frac{q}{p})^{z-x}) P(攻击成功)=x=0∑+∞P(x)∗q−z(z−x)=x=0∑+∞x!λxexp(−λ)∗{ (pq)z−x,1,x≤zx>z=1−x=0∑zx!λxexp(−λ)(1−(pq)z−x)