出块是稀有而随机的事件。因此,矿池需要一些方法,将开出区块的价值公平分配给矿池上的矿工。
我们矿池的收益系统,能确保每个矿工在出新块后,都能按其算力比例获得相应大小的收益。算力大的比算力小的收入更多。
计分算力(Scoring Hash Rate)
在我们矿池,用户参与矿池挖矿的能力由计分算力这一指标衡量。它反映的是用户在最近几小时内的工作量。您可以把矿池的计分算力理解为,当所有用户连接到矿池时的所有矿机总算力的指数移动平均(Exponential Moving Average, EMA,参见 维基百科 EMA )。移动平均平滑并消除了算力短期升降的影响,使报酬结果的计算更稳定公平(具体算法请见下)。
例如:每当开出一个新块,如果用户的计分算力是整个矿池的1%,用户将收到1%个区块的报酬。如果用户有0.031%的算力,用户将收到0.031%的区块的报酬。非常简单。
矿池对每次开出新块时您的收益计算方法如下:
区块值 包含区块收益和区块中包含的交易手续费。
用于计算的 计分算力 是指自某个区块被发现时的算力。它们反映当前区块发现前的挖矿历史。
下图中显示计分算力在用户开始或停止挖矿后的升降。(有效算力蓝线,计分算力黄线):
而下面这个图会看起来更像是一个真实矿工。因为矿工的有效算力在实时变化:
收益计算方法的重点
使用计分算力来计算收益的重要性:
- 在任何时候让用户都可以看到算力变化趋势,并预计用户将得到的收益。
- 收益完全独立于每轮挖矿。唯一重要的是用户计分算力的大小。
- 在用户开机挖矿约1.5小时后,计分算力将达到您的实际算力水平并趋于保持稳定。然后它将保持稳定。
- 只要用户的矿机是连接好并正常工作的,它将保持稳定。
- 当用户关闭矿机,计分算力将开始下降,并会在1.5小时后趋近于0。
- 当有其他矿机连接到矿池时,用户的计分算力不会变化,但矿池的总算力会上升。出块奖励的蛋糕看似分得更小了,但总算力上升后能分的蛋糕变得多了(出块更频繁),反之亦然。从统计学上长期来看对用户来说没有区别。
背后的数学原理
让我们从基本概念和定义开始,描述矿池的报酬和其他一些价值到底是怎样被计算的。步步为营,有趣的细节还在后面。
份额(Shares)
当矿机连接到矿池,矿池会给矿机分派计算任务——计算有特定属性的哈希值(计算输出必须比由难度值确定的限值低)。
而满足要求的哈希值,将会被作为工作量证明(Proof of work, PoW)发送回矿池。矿机工作量的单位则由份额(Share)表示。
假如矿机提交了1个难度为 d 的哈希(工作量证明),矿池就会记 d 个份额。 每当一个新的份额被系统记录时,系统会生成会一个对应的时间戳并用于之后的份额计算。 在此为方便理解和简化公式,我们特意把每个份额 s ,看作是当难度为 1 时提交的一份工作量证明。
时间处理
当矿机提交份额(或当区块 b 被开出)时,函数 τ" s="s 能告诉我们当前的时间值。时间值在某些稳定的时间点以秒计时(例如:当开始在矿池挖矿)。 这个时间值仅被用于衡量两个事件之间的时间。 例如,某次提交份额的时间和某个时候的时间 t0 的时间差 ,可以写作 τ(s) − t0 ,衡量时间差对份额的价值计算非常重要。
份额价值计算——计分值(Score)
每个(用于报酬计算的)份额价值都随时间降低——新份额比老份额更有价值。这就能激励用户在矿池长期稳定地挖矿,而不是在不同矿池间不断切换。一旦用户断开矿池连接,他的份额就会开始贬值。
给定某个时刻的份额的具体值,由 计分函数 c 定义。 它能计算出份额 s 在时间为 t0 时的计分值,如下所示
此处的 λ 是一个无量纲的系统参数 。λ 定义某个份额的计分值随时间贬值的快慢。λ 越大,老份额相比新份额的贬值速度就越慢。矿池当前的 λ 参数被设定为1200。
(对于熟悉计分系统的Slush Pool矿池老用户来说,老系统和现在的计分系统的关键区别在于,计分值不再和每轮挖矿的开始相关,而是由份额提交时间与任意给定时间 t0 的关系定义。这从而显著地改变了收益计算,消除了计算收益时用到的每轮的概念)。
继续往下看。设集合 U 为矿池的所有用户,集合 Su(t0) = {s0, s1, ... } 为用户 U 在直到时间 t0 前提交的所有有效份额。更正式的写法如下
故某个用户 U (小u)在时间 t0 时的计分值,可以用这个用户在时间 t0 时或在 t0 之前提交的份额总量的总计分值得来:
从技术上讲,矿池在单独地为每个矿机计算计分值,用的也是同等的算法。
全池的计分总值 C̅ 是在某个给定时间所有用户的计分值总和:
收益计算
当区块 b 在时间 τ(b) 被开出,并确定它的价值为 V(b) 时,矿池就会为每个用户 u 计算收益 Ru ( f 指矿池费率):
对算法感兴趣的朋友,连续计分系统(Continuous Scoring System)的完整收益公式如下:
其他值的计算
当您查看矿池网页用户后台的仪表板时,还会注意到矿池为您计算的一些其他值。
预计收益值(Estimated Reward),它假设一个区块价值是6.25个比特币,并估算用户 u 在时间 t0 如果开出区块的预计收益:
用户贡献值(User's contribution) 占矿池的百分比的定义为
最后,用户 u 在时间 t0 的 计分算力 H 的计算不会进行平均,而是直接由之前的计分值函数得出(单位哈希每秒,h/s):
当然,全池总算力 H̅ 也就是所有用户的计分算力总和: