挖矿中如何保证每个人的历史收益不会因为份额降低而变少
最近在做游戏有个模块跟挖矿有关,回头看了一下寿司挖矿,这里有个小的金融相关问题,每个小时金矿产出 1000 克黄金,
- A 在 10 点钟投入 10 台机器挖,此时矿场数据是,每台机器每小时产出 100 克黄金。
- B 在 12 点种投入 10 台机器一起挖,因为矿坑就那些黄金,不会因为机器增加而增加产出,此时矿场数据是,每台机器每小时产出 50 克黄金。
现在就是存在一个问题,怎么保障 A 矿工的历史收益?B 投入机器之前 A 就在了,不能在 B 加入后 A 在 10 点至 12 点时的产出就减少了吧。
首先,
- 记录 矿场每机器分红 0 克、最后分红时间为当前时间 10 点,给用户用 Double-entry Accounting 记账
- A 在 10 点钟投入机器时
- 记 用户 A 投入机器数 10
- 更新 矿场每机器分红 0 克 = 原矿场每机器分红 + (当前时间 10 点 - 最后分红时间 10 点)* 1000 / 所有机器数量 10
- 更新 最后计算分红时间 11 点
- 更新 用户 A 负债 为 机器数 10 * 矿场每机器分红 = 0 克
- B 在 12 点钟投入机器时
- 记 用户 B 投入机器数 10
- 更新 矿场每机器分红 200 克 = 原矿场每机器分红 + (当前时间 12 点 - 最后分红时间 10 点)* 1000 / 所有机器数量 10
- 更新 最后计算分红时间 12 点
- 更新 用户 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 克
搞定 食碗面 ~
后面又想了一下感觉跟基金净值是差不多的。