区块链|区块链应用如何实现资金盘分红

目前大多数去中心化应用都具有分红功能,因为分红能够帮助应用吸引新用户加入,增强老用户粘性。不同于不断抬高售价的简单资金盘功能,分红功能实现比较复杂。本文主要讲解目前流行的资金盘分红功能,以及如何实现。
什么是分红
分红就是通过已投入的资金来对后流入资金的收取红利。一般会定义分红比例,每笔流入资金会拿出分红比例的金额最为分红,放入分红池。这笔资金由当时所有已有资金平均分配。这样,先投入的资金,除了获得应用本身提供的价值为,还可以源源不断的获得后来资金的红利,越早投入收益越大,极大地提高了用户加入的积极性。一个典型的例子就是EOS曾经的现象级应用 - 像素大师。
为什么分红实现困难
应用可以接受多个用户的资金,每个用户可以多次投入资金。每笔投资都应平均分配给当时已存的资金,用户的每笔投资享受的红利开始时刻都不相同。下面举例说明这个过程。
应用APP具有分红功能,分红比例为10%。用户1,用户2,用户3分别调用应用APP各投入3笔资金。资金投入顺序及每次分红计算如下表所示,粗体数字表示每笔资金投入后计算的用户数据。

次序 用户 投入金额 累计投入金额 分红金额 用户1累计投入额 用户2累计投入额 用户3累计投入额 用户1本次分红额 用户2本次分红额 用户3本次分红额
1 1 100 100 10 100 0 0 10 0 0
2 2 100 200 10 100 100 0 5 5 0
3 3 200 400 20 100 100 200 5 5 10
4 2 100 500 10 100 200 200 2 4 4
5 3 300 800 30 100 200 500 3.75 7.5 18.75
6 1 200 1000 20 300 200 500 6 4 10
7 3 250 1250 25 300 200 750 6 4 15
8 2 250 1500 25 300 450 750 5 7.5 12.5
1500 150 42.75 37 70.25
由上表可见,用于用户A投入资金较早,虽然他的投入金额比用户B少,但却得到更多的分红金额。
当用户数众多,交易频繁时,计算每笔交易分红变得非常困难。即使在中心化系统中,完成它也需要耗费很多资源,更不要说要在去中心化的区块链应用中实现。目前区块链操作无法支持复杂运算,否则会严重影响出块速度和系统响应。
如何实现分红
【区块链|区块链应用如何实现资金盘分红】实现区块链应用分红关键有两点
  1. 变推为拉 - 采用拉代替推模式,让用户主动提取分红,而非应用发放分红给用户。
  2. 考虑每笔投入 - 针对每笔投入资金计算全局分红,而不计算每个用户分红。但由于每笔金额只能享受它后面资金的分红,这里的重点是需要扣除它前面的全局分红值。
具体算法如下
  1. 定义总投入金额total_amount,分红比例profit_percent,以及总分红金额profit_amount
  2. 定义单位分红值profit_per_amount,即profit_amount / total_amount的单位分红额度。
  3. 定义用户投入金额user_amount,此值基于用户,每个用户的可能都不同。
  4. 定义用户的分红扣除金额user_profit_mask, 此值基于用户,每个用户的可能都不同。
  5. 每次用户投入资金后,假设投入资金为amount1,做如下操作
    5.1 计算总投入金额,total_amount = total_amount + amount1
    5.2 计算总分红值,profit_amount = profit_amount + amount1 * profit_percent
    5.3 计算本次投入的扣除分红值,
    user_profit_mask = user_profit_mask + amount1 * user_profit_mask
    5.4 计算单位分红值,profit_per_amount = profit_per_amount + profit_amount / total_amount
    5.5 计算用户投入金额,user_amount = user_amount + amount1
  6. 用户提取分红时,做如下操作
    6.1 计算用户分红值,user_profit_amount = user_amount * profit_per_amount - user_profit_mask
    6.2 如果值大于0,将其转账给用户,同时更新分红扣除值,
    user_profit_mask = user_profit_mask + user_profit_amount
根据上面例子计算结果如下表所示,红色表示每笔资金投入后计算的用户数据
次序 用户 投入金额 累计投入金额 分红金额 单位分红值 用户1累计投入额 用户2累计投入额 用户3累计投入额 用户1扣除分红额 用户2扣除分红额 用户3扣除分红额
1 1 100 100 10 0.10000000 100 0 0 0 0 0
2 2 100 200 10 0.15000000 100 100 0 0 10 0
3 3 200 400 20 0.20000000 100 100 200 0 10 30
4 2 100 500 10 0.22000000 100 200 200 0 30 30
5 3 300 800 30 0.25750000 100 200 500 0 30 96
6 1 200 1000 20 0.27750000 300 200 500 51.5 30 96
7 3 250 1250 25 0.29750000 300 200 750 51.5 30 165.375
8 2 250 1500 25 0.31416667 300 450 750 51.5 104.375 165.375
用户1分红 42.75 用户2分红 37 用户3分红 70.25
从上表可以看出,每笔资金只需计算和投入用户相关的数据,最终结果完全正确。

    推荐阅读