比特币矿池挖矿的奖励系统分析(一)

7 minute read Published: 2019-10-22

来自论文:Analysis of Bitcoin Pooled Mining Reward Systems

这一篇介绍两种基于打分的方法:Slush 法和几何法。

基于打分的方法

Slush 法

Slush Pool 在比例法的基础上改造而来,主要是为了抗 pool-hopping,但实际上也没完全解决。

具体算法:每个矿工在每一轮中的每个 share 有一个分数 \(s=e^{\dfrac{t}{c}}\),越到一轮的后期,分数越大。每一轮的奖励按分数平分。

在比例法中,前期的 share 天然就比后期的 share 值钱(因为每一轮中,share 越多,那 share 的价值就越被稀释,而实际每个 share 的成本是一样的)。slush 法的打分补偿了这个不均衡的过程(分数指数增长,反过来就是前面 share 的分数指数衰减)。其中 \(c\) 是常数,用来控制分数的增长速度,\(c\) 越小,分数增长越快,矿工收益的方差越大,受 pool-hopping 的影响越小。

缺点:

几何法

几何法是受 Slush 法启发发明的方法。创新点在于矿池收 2 种手续费,一个固定的,一个可变的。

算法步骤:

矿池收费为 \(fB + c\lparen 1-f \rparen B\),剩下的 \(\lparen 1-c \rparen \lparen 1-f \rparen B\) 分给矿工。

因为每一个新 share 的分数是上一个的 \(r\) 倍,这会导致 \(s\) 成指数增长,老 share 的分数成指数衰减。这一轮第 \(I\) 个 share 的分数为 \(r^{I-1}pB\), \(c\) 越大,衰减越慢。

假如 \(p\)、\(B\) 固定,一轮最终有 \(N\) 个 share,则 \(s=r^N\),矿工 \(k\) 的收益可进行如下变形:

注意最后两个等式,这相当于这一轮总的分数是 \(\sum_{i=-\infin}^{N} \lparen r^{i-1} pB \rparen\),在所有矿工提交之前,矿池自己有了一个分数 \(\sum_{i=-\infin}^{0} \lparen r^{i-1} pB \rparen = \dfrac{pB}{r-1}\),所有矿工总的分数是 \(\sum_{i=1}^{N} \lparen r^{i-1} pB \rparen\)。

基于这种方法,矿工每个 share 的收益期望为 \(\lparen 1-c \rparen \lparen 1-f \rparen pB\),方差近似为 \(\dfrac{{\lparen pB \rparen}^2}{2c+p}\)(这是 \(c \isin \lparen 0,1 \rparen\) 时计算得到的方差),这是单独挖矿时的 \(\dfrac{1}{2cD+1}\) 倍。矿池每个块手续费的期望为 \(\lparen c+f-cf \rparen pB\)。如果 \(c \rarr 0\) ,相当于只有出块的 share 获得奖励(因为此时 \(r \rarr \infin \) ,每个新 share 分数指数增加,相对于最后那个出块的 share 得分 \({\infin}^{N-1}pB\),前面的所有 share 的分数之和相对都微乎其微了),方差也就和单独挖矿时一样了。

如果 \(c+f-cf\) 不变,\(c\) 增大 \(f\) 减小,则矿池方差变大,矿工方差减小,这时只要 \(f\) 为正,矿池就不会亏损。如果 \(c\) 继续增大,导致 \(f\) 为负,就相当于矿池补贴矿工。如果 \(c \rarr 1\),\(f \rarr -\infin \),则相当于 PPS 方法。

在实现上,\(s\) 指数增大可能会导致数值溢出,有 2 种方法可以解决:

  1. 定期缩小分数。令 \(S_k /= s\),再令 \(s=1\)

  2. 用指数运算

    • 选定 \(f\) 和 \(c\),\(f\) 为固定的手续费率,\(c\) 为可变费率

    • 在每轮的开始,令 \(s=0\),对于矿工 \(k\),令他在这轮的分数 \(S_k = -\infin\) 或者一个非常小的负数。

    • 令 \(r=\ln{\lparen 1-p+\dfrac{p}{c} \rparen }\),\(p=\dfrac{1}{D}\),难度调整时,\(r\) 会改变

    • 当矿工 \(k\) 提交 share 时,\(S_k = s + \ln{\lparen e^{\lparen S_k - s \rparen } + pB \rparen }\) ,\(s += r\)

    • 出块则支付 \(\dfrac{\lparen 1-f \rparen \lparen e^{r}-1 \rparen e^{S_k - s}}{p}\)