Skip to content

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

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

Commenting as a guest. A nickname is required; email is optional. Only new comments posted after verifying your email and signing in will appear on your profile. Existing guest comments will not be linked automatically.

Share article

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

Email X

View original ↗