第一部分:
q
z
=
(
q
/
p
)
z
q_z = (q/p)^z
q z = ( q / p ) z
已知
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个区块
当资产为
−
x
-x
− x 块时,赌徒会止损(
x
>
z
x>z
x > z ),即赌徒不能忍受损失
x
x
x ;相当于当攻击者发现已经落后诚实结点x个区块后,不再进行攻击。
当资产为
0
0
0 时,赌徒会收手;相当于攻击者目前区块高度与诚实结点一样,攻击成功。
赌徒赌赢的概率是
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的概率赌输:
第一回合赌赢,第二回合赌徒的本钱为
−
z
+
1
-z+1
− z + 1 ,后面基于本钱
−
z
+
1
-z+1
− z + 1 攻击成功的概率为
q
−
z
+
1
q_{-z+1}
q − z + 1 ;这种情况的概率为
q
∗
q
i
−
1
q*q_{i-1}
q ∗ q i − 1
第二回合赌输,第二回合赌徒的本钱为
−
z
−
1
-z-1
− z − 1 ,后面基于本钱
−
z
−
1
-z-1
− z − 1 攻击成功的概率为
q
−
z
−
1
q_{-z-1}
q − z − 1 ;这种情况的概率为
(
1
−
q
)
∗
q
i
−
1
(1-q)*q_{i-1}
( 1 − q ) ∗ q i − 1
这是一个二阶的数列,相当于解方程
x
=
q
x
2
+
(
1
−
q
)
x=qx^2+(1-q)
x = q x 2 + ( 1 − q ) ,解得
x
1
=
1
x_1=1
x 1 = 1 ,
x
2
=
1
−
q
q
x_2=\frac{1-q}{q}
x 2 = q 1 − q 。
注意:
q
0
=
1
q_0=1
q 0 = 1 :如果攻击者与诚实结点高度差异为0,那么攻击成功
q
−
∞
=
0
q_{-\infin}=0
q − ∞ = 0 :如果攻击者落后诚实结点
∞
\infin
∞ 个区块,攻击者放弃攻击,攻击失败。如何理解上面的表述?即攻击者在追赶的过程中无论落后多少个区块也不会放弃攻击
当
x
1
=
x
2
x_1=x_2
x 1 = x 2 时,即
q
=
1
2
q=\frac{1}{2}
q = 2 1 ,
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 ) ) ( x 1 ) − z = A + B ( − z ) 又因为
q
0
=
1
q_0=1
q 0 = 1 且
q
−
∞
=
0
q_{-\infin}=0
q − ∞ = 0 ,所以
q
z
=
1
q_z=1
q z = 1 。
当
x
1
≠
x
2
时
,
{x_1}\neq{x_2}时,
x 1 ̸ = x 2 时 ,
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 ( x 1 ) − z + B ( x 2 ) − z = A + B ( q 1 − q ) − z
当
q
<
1
2
q<\frac{1}{2}
q < 2 1 时,
q
−
∞
=
0
q_{-\infin}=0
q − ∞ = 0 且
q
0
=
1
q_0=1
q 0 = 1 =>
A
=
0
,
B
=
1
A=0,B=1
A = 0 , B = 1 =>
q
−
z
=
(
1
−
q
q
)
−
z
q_{-z}=(\frac{1-q}{q})^{-z}
q − z = ( q 1 − q ) − z
当
p
>
1
2
p>\frac{1}{2}
p > 2 1 时,
q
−
∞
=
0
q_{-\infin}=0
q − ∞ = 0 且
q
0
=
1
q_0=1
q 0 = 1 =>
A
=
1
,
B
=
0
A=1,B=0
A = 1 , B = 0 =>
q
z
=
1
q_z=1
q z = 1
综上所述:
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 = { ( q 1 − q ) − z = ( 1 − q q ) z , 1 , q < 2 1 q ≥ 2 1
进行变换:
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 = { ( p q ) z , 1 , q < p q ≥ 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 = ( T p ) t 攻击结点挖x个区块所花时间t满足
x
=
(
q
T
)
t
x = (\frac{q}{T})t
x = ( T q ) t
因此,
x
=
q
p
z
x = \frac{q}{p}z
x = p q z
所以,攻击者暗地里挖的区块个数满足
λ
=
q
p
z
\lambda=\frac{q}{p}z
λ = p q z 的泊松分布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 ! λ x e x p ( − λ ) ∗ { ( p q ) z − x , 1 , x ≤ z x > z = 1 − x = 0 ∑ z x ! λ x e x p ( − λ ) ( 1 − ( p q ) z − x )