拿到激励计划优秀应用奖的秘诀

近日,星云团队公布了星云激励计划实施细则,其中包括激励计划评选算法设计。优秀DApp将通过算法评出。为了帮助大家更好地理解此次活动的初衷,以及更明确该如何操作,特别邀请星云科研团队负责人范学鹏为大家解读该智能合约排名算法。本解读将分两期连载。

激励计划想作弊?排名算法实例了解一下

文 / 范学鹏

 

广义地来说,优秀的DApp可能需要考虑很多因素,如DApp的交互是否流畅、DApp的设计是否充满了艺术感、或者DApp是否能够解决实际的问题。从技术的角度评价一个DApp在这些方面是否优秀,是十分武断且充满争议的。因此,一种直觉的、且被广泛接受的做法是认为“优秀的”DApp即“流行的”DApp。

 

计算智能合约的流行度

对于一个DApp,本算法结合不同帐户地址的重要性,考察一个DApp被不同帐户地址数调用的情况,从而判断一个DApp的优秀程度。简单来说,一个DApp被越多不同的帐户地址调用,则其排名越靠前。

 

考虑下图对应的DApp,该Dapp被三个帐户地址调用,我们可以简单的认为该智能合约的流行度为3,因为每个帐户地址对智能合约贡献了一个流行度。

 

然而,一个帐户地址可能调用多个不同的智能合约,这就使得帐户地址对智能合约的流行度贡献是不相同的。让我们重新思考一下所谓的“流行度”,事实上,我们对流行度的计算,是在计算一个智能合约能吸引多少用户的注意力。对上图而言,如果一个用户的注意力为1,那么该智能合约一共吸引了3个注意力。

 

然而,一个用户的注意力是有限的,当一个帐户调用了n个智能合约的时候,则每个智能合约能够吸引到的注意力为仅为1/n。这是直观的,因为一个人的时间和精力是有限的,当一个人一天只需要做一件事的时候,可以付出全部时间和精力,而当一个人需要做n件事的时候,对每件事所付出的精力和时间平均只能为1/n。

 

如下图所示,帐户地址A,B分别调用两个不同的智能合约,则其对每个智能合约的流行度贡献,则降为½,因此对于智能合约S_1而言,其流行度为½ + ½ + 1 = 2, 对于智能合约S_2,其流行度为½ + ½ = 1。

 

让我们考虑一下更一般的情况,即一个帐户地址可能调用多个智能合约,每个智能合约也可能调用多次,这时该如何计算呢?一个直观的办法是将用户的注意力按照调用次数均分,每个智能合约获得相应调用次数的注意力,即贡献度。这一过程用数学的语言描述,即,

 

1) 构建二分图,一边节点是普通地址,一边节点是合约。

2) 对合约u和普通地址v,计算二者之间的边权:

 

 

其中

是普通地址v直接或间接调用合约v的次数

 

3) 计算合约ν分数

 

计算帐户地址的重要度

 

如果你足够细心,可能已经意识到,在前文的计算中,我们有一个假设条件,即每个帐户是一样的,帐户之间没有区别。而在最后的数学描述中,我们给出了一个参数Pu,这是因为每个帐户地址的重要性,是不尽相同的。对于帐户重要性的考量,在每个系统中都有不一样的考虑,这与一个系统的设计哲学相关。在比特币为代表的、采用PoW算法的系统来说,会认为一个有着强大算力的帐户或节点更重要;而对于使用EOS等系统来说,会认为一个持有大量代币的帐户更为重要。在星云中,我们认为一个频繁使用星云网络的帐户地址更为重要,这是因为我们坚信,对星云网络的频繁使用,才能最终使得星云成为一个有价值的公链。因此,我们对帐户地址的重要度考虑主要基于“该用户是否频繁使用星云链的交易网络”这一事实。

 

 

我们考虑如下的两个帐户地址在历史中的转账行为,其中A发生了多笔转账,且拥有大量的帐户余额,而帐户地址B仅仅在一笔入账之后,则不再有任何活动记录,且其余额较小。我们可以认为帐户地址A比B有更高的重要性。

 

对帐户地址重要性的考虑,是十分复杂的,一定程度上,这与Nebulas Rank的考虑是类似的。对于一个帐户地址v,其重要性的计算公式如下:

 

 

其中Sv为该帐户地址在一段时间内余额的中位数,Rv为该帐户地址的流通性描述。参数a, b, c, d, μ,λ为根据实际情况调整的参数。

 

该公式的解读可以分为两部分

1.帐户地址的余额部分,这一因素的引入主要是为了反作弊的考虑,即增加作弊成本。如果想要达到作弊的效果,则需要持有一定的存款,而存款是无法作弊的。同时,为了减少帐户余额过多的影响,我们引入了(S_v * a/(S_v+b))这一公式,这一公式的曲线如下图所示。

即,帐户余额无限多时,该公式的取值无限趋紧与a,而曲线的“弯曲度”由b定义。当b越大时,曲线越平缓,反之,则越陡峭。这体现在实际中,及在什么样的余额附近,开始区分重要性。

 

2. 帐户地址的流通性,这一因素的引入是为了在星云启动阶段各个帐户的活跃度,我们认为一个帐户在不停的做转入转出时,其对启动阶段的星云而言,重要性更高,因此,R_v的计算公式如下:

 

 

其中,x为帐户的转入金额,y为帐户的转出金额,该函数的为一个曲面,如下:

在该函数中,当转入转出值相等时取得最大值,即最大程度增加了流通性。

需要注意的是,Rv的值虽然会随着余额的增加而增加,但是由于引入了类似余额部分的上限限制,所以,实际上Rv的影响是有限的。

实际情况分析和作弊处理请见下期解读。

 

关于星云链

星云链是新一代区块链公链,致力于构建可持续升级的良性生态。星云链具有三大理念:

 

 价值尺度:独创的区块链价值发现体系

星云指数(Nebulas Rank)衡量区块链世界多维度的数据价值。

 

◆ 自进化:避免硬分叉的自进化能力

星云原力(Nebulas Force)提供快速迭代、无需硬分叉的升级能力。

 

◆ 原生激励:前瞻性的激励和共识机制

星云激励(Nebulas Incentive)奖励对生态有贡献的开发者和用户。

 

星云链1.0鹰星云版具备以太坊所有功能,是比以太坊更优秀的区块链公链之选:

◆ 面向开发者友好,支持使用JavaScript编写智能合约和DApp,更易上手;

◆ 唯一使用LLVM的区块链公链,性能优越,采用并发技术,交易处理能力达到2000TPS,系统更加安全稳定,可扩展性强,且具备智能合约调用和协议升级能力。

 

详情请咨询:

官网:https://nebulas.io
Github:https://github.com/nebulasio/go-nebulas
Slack:https://nebulasio.herokuapp.com
Telegram中文群:https://t.me/nebulascn
Twitter:https://twitter.com/nebulasio

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回顶部