前日发布了此次星云激励计划智能合约排名算法详解第一篇,介绍了排名算法的主要参数。本期星云科研团队负责人范学鹏将继续为大家解读智能合约排名算法,介绍实际情况分析和作弊处理。
文 / 范学鹏
实际情况分析
让我们来考虑以下几个场景,以检验上述排名算法会给出怎样的结果。
1.一个正常的买家或卖家
对于正常的买家或卖家,其在交易网络中可能只有转出或转入记录,例如卖家在线下将商品交付给买家,买家则在星云链上向卖家支付一定的星云币。我们认为此类用户连接了星云链的线上与线下,对于星云网络是有一定贡献的,因为我们给予此类用户一定的贡献度。由计算公式可以知道,当in或out为0时,Rv的值是随着in或out的数量缓慢增长的,且有一定的上限。
2.持有大量财富、但没有交易需求的帐户
对于拥有大量财富,但没有交易需求的帐户,星云链认为其并没有实际的使用交易网络,即in和out都为0,因此其贡献度为0,即排名算法所给出的分值为0。
3.拥有大量交易记录的交易所
对于拥有大量交易记录的交易所,会同时持有一定量的余额及大量的交易记录。一般而言,其在一定时间内的in,out是平衡的,此时星云会给予其最大的排名分值。
作弊?
帐户的重要度会直接影响智能合约的排名,从而影响此次活动中的收益,因此作弊是在所难免的。
在此次活动中,我们一定程度上增加了作弊的成本,但是并不能完全防止作弊。我们更愿意从另一个角度思考作弊。首先,我们假设每个帐户背后的用户都是理性的,即、总是想获利的,而不是试图不计回报的作弊者,如果一个用户试图作弊,需要投入大量的时间和金钱,但是却不能得到任何回报,我们认为这类用户是不会长期存在的,而这类用户的短暂的出现,并不能影响整体的公平性;其次,从博弈论的角度来看,我们认为在一定范围内,应该使得作弊者的行为是有利于星云链的发展的,这正如搜索引擎与针对搜索引擎的优化技术一样(Google v.s. SEO)。
假设一个用户试图在此次活动中作弊,结果会怎么样呢?首先,需要创建大量的帐户地址,并在帐户地址之间进行转账交易;然后需要用这些帐户地址调用该用户所创造的智能合约。为了简化讨论,让我们假设某用户有1000个NAS,该用户可以选择创建2个帐户,每个帐户500个NAS,并在帐户之间进行转账,然后用这两个帐户调用相应的智能合约;类似的该用户可以创建4个帐户,10个帐户,甚至1000个帐户。为了方便计算,我们可以假设前述的a、b、c、d、μ、λ的值均为1,因此,我们可以计算出最终该智能合约的分值为如下所示:
账户数 |
每个帐户的NAS数 |
智能合约的分值 |
1000 |
1 |
333.333333333 |
200 |
5 |
151.515151515 |
100 |
10 |
86.5800865801 |
20 |
50 |
19.4137060765 |
10 |
100 |
9.8517314418 |
4 |
250 |
3.97611152198 |
2 |
500 |
1.99401397006 |
正如我们所预料的,当用户创建了更多的帐户时,可以有效的提高智能合约的分值。但是,如果我们调整一下各个参数的取值呢?例如a = 10, b = 1000, c = 1, d = 1, μ = 1, λ = 1,此时该智能合约的分值如下:
账户数 |
每个帐户的NAS数 |
智能合约的分值 |
10001 |
1 |
6.66000666001 |
200 |
5 |
9.04568068747 |
100 |
10 |
9.42951438001 |
20 |
50 |
9.42951438001 |
10 |
100 |
9.04568068747 |
4 |
250 |
7.98403193613 |
2 |
500 |
6.66000666001 |
可以看到,随着用户创建的账户数的增加,智能合约的分值出现了下降的趋势。也就是说,在合适的参数下,在用户的持有NAS数量一定的情况下,通过创建小号,并将NAS平分给这些小号,能够获得的收益如下图所示:
也就是说,毫无节制的创建小号,并不能增加收益!因此,在已知各个参数的情况下,用户会选择有节制的作弊,从而保证整个系统的公平性。
更进一步的,各个参数的调整,是根据实际情况决定的。假设用户对于参数的取值是未知的,在这种情况下,用户采用一定的作弊措施是有一定风险的。例如,对于另外一组参数(b调整为100000),a = 10, b = 100000, c = 1, d = 1, μ = 1, λ = 1,此时该智能合约的分值如下:
账户数 |
每个帐户的NAS数 |
智能合约的分值 |
1000 |
1 |
0.0666660000067 |
200 |
5 |
20.0909045456818 |
100 |
10 |
0.0952285723809 |
20 |
50 |
0.0989604207797 |
10 |
100 |
0.0994030844777 |
4 |
250 |
0.0995515204006 |
2 |
500 |
0.0994030844777 |
通过对比,不难发现,在b=1时,用户的最佳策略是1000个帐户,在b=1000时,用户的最佳策略是创建20~100个帐户,而在b=100000时,最佳策略是创建4个帐户。在不知道具体参数的情况下,贸然创建更多的帐户,试图提高智能合约的最终评分,是充满风险的。做为例子,可以考虑一下该用户创建了4个帐户,此时,由于其不知道具体的参数,因此无法判断是否需要进一步创建更多的帐户以提高最终的分值,而盲目的创建更多分值,可能导致其最终分值开始下降。
综上所述,我们认为用户存在作弊的可能性,但是作弊将会是十分节制的,并不会影响整个活动的公平性。那么为什么在此次的活动中,我们允许有节制地创建小号的行为,而不是绝对的公平公正呢?这一方面是为了增加活动的趣味性与挑战,另一方面,也是为了更好地测试星云主网。
关于星云链
星云链是新一代区块链公链,致力于构建可持续升级的良性生态。星云链具有三大理念:
◆ 价值尺度:独创的区块链价值发现体系
星云指数(Nebulas Rank)衡量区块链世界多维度的数据价值。
◆ 自进化:避免硬分叉的自进化能力
星云原力(Nebulas Force)提供快速迭代、无需硬分叉的升级能力。
◆ 原生激励:前瞻性的激励和共识机制
星云激励(Nebulas Incentive)奖励对生态有贡献的开发者和用户。
星云链1.0鹰星云版具备以太坊所有功能,是比以太坊更优秀的区块链公链之选:
◆ 面向开发者友好,支持使用JavaScript编写智能合约和DApp,更易上手;
◆ 唯一使用LLVM的区块链公链,性能优越,采用并发技术,交易处理能力达到2000TPS,系统更加安全稳定,可扩展性强,且具备智能合约调用和协议升级能力。