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

最近在做游戏有个模块跟挖矿有关,回头看了一下寿司挖矿,这里有个小的金融相关问题,每个小时金矿产出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 克

搞定 食碗面 ~

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

Comments