# 挖矿中如何保证每个人的历史收益不会因为份额降低而变少

Original: <https://lifelonglearn.ing/guaranteed-liquidity-mining-history-gains>

Author: [奶爸](https://lifelonglearn.ing/users/3b04650c-8231-499b-8ef0-381fc4d7efb0)

Published: 2021-11-18T04:49:45Z

Updated: 2026-09-27T06:57:43Z

Version: 1

最近在做游戏有个模块跟挖矿有关，回头看了一下寿司挖矿，这里有个小的金融相关问题，每个小时金矿产出1000克黄金，

* A 在 10 点钟投入 10 台机器挖，此时矿场数据是，每台机器每小时产出 100 克黄金。
* B 在 12 点种投入 10 台机器一起挖，因为矿坑就那些黄金，不会因为机器增加而增加产出，此时矿场数据是，每台机器每小时产出 50 克黄金。

现在就是存在一个问题，怎么保障 A 矿工的历史收益？B 投入机器之前 A 就在了，不能在 B 加入后 A 在 10 点至 12 点时的产出就减少了吧。

首先，

1. 记录 矿场每机器分红 0 克、最后分红时间为当前时间 10 点，给用户用 **Double-entry Accounting** 记账
2. A 在 10 点钟投入机器时
   1. 记 用户A 投入机器数 10
   2. 更新 矿场每机器分红 0 克 = 原矿场每机器分红 + （当前时间 10 点 - 最后分红时间 10 点）\* 1000 / 所有机器数量 10
   3. 更新 最后计算分红时间 11 点
   4. 更新 用户A负债 为 机器数10 \* 矿场每机器分红 = 0 克
3. B 在 12 点钟投入机器时
   1. 记 用户B 投入机器数 10
   2. 更新 矿场每机器分红 200 克 = 原矿场每机器分红 + （当前时间 12 点 - 最后分红时间 10 点）\* 1000 / 所有机器数量 10
   3. 更新 最后计算分红时间 12 点
   4. 更新 用户B负债 为 机器数10 \* 矿场每机器分红 = 2000 克

然后假设 A 跟 B 都在 14 点钟时来矿上提取自家分红

* 首先更新 矿场每机器分红 300 克 = 原矿场每机器分红200克 + （当前时间 14 点 - 最后分红时间 12 点）\* 1000 / 所有机器数量 20
* 更新 最后计算分红时间 14 点
* A 矿主分红 3000克 = 机器数量 10 \* 矿场每机器分红 300 克 - 用户A负债
  * 更新用户 A 负债 3000 克 = 机器数量 10 \* 矿场每机器分红 300 克
* B 矿主分红 1000克 = 机器数量 10 \* 矿场每机器分红 300 克 - 用户B负债 2000 克
  * 更新用户 B 负债 3000 克 = 机器数量 10 \* 矿场每机器分红 300 克

然后假设 A 跟 B 都在 18 点钟时又来矿上提取自家分红

* 首先更新 矿场每机器分红 500 克 = 原矿场每机器分红 300克 + （当前时间 18 点 - 最后分红时间 14 点）\* 1000 / 所有机器数量 20
* 更新 最后计算分红时间 18 点
* A 矿主分红 2000克 = 机器数量 10 \* 矿场每机器分红 500 克 - 用户A负债 3000 克
  * 更新用户 A 负债 5000 克 = 机器数量 10 \* 矿场每机器分红 500 克
* B 矿主分红 2000克 = 机器数量 10 \* 矿场每机器分红 500 克 - 用户B负债 3000 克
  * 更新用户 B 负债 5000 克 = 机器数量 10 \* 矿场每机器分红 500 克

搞定 食碗面 ～

后面又想了一下感觉跟基金净值是差不多的。
