一种区块链智能合约排序方法与流程

文档序号:14474903阅读:1528来源:国知局
一种区块链智能合约排序方法与流程

本发明涉及区块链技术,尤其涉及一种区块链智能合约排序方法。



背景技术:

当前区块链技术被认为是继蒸汽机、电力、互联网之后的下一代颠覆性的核心技术。如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网彻底改变了信息传递的方式,那么区块链作为构造信任的机器,将可能彻底改变整个人类社会价值传递的方式。

区块链技术(blockchaintechnology,bt)是一种互联网数据库技术,其特点是去中心化、公开透明,允许每个人均可参与数据库记录。区块链的基本概念包括:交易(transaction),一次操作,导致账本状态的一次改变,如添加一条记录;区块(block),记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识;链(chain),由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录。

如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中所有交易内容导致状态改变的结果进行确认。

假设数据库是一本账本,读写数据库就可以看做一种记账的行为,区块链技术的原理是在一段时间内由一部分人来记账,然后将账本的这一页信息发给整个系统里的其他所有人。这也就相当于改变数据库所有的记录,发给全网的其他每个节点,所以区块链技术也称为分布式账本(distributedledger)技术。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。而所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。

为了更好的建立区块链应用的生态环境,我们提出面向智能合约开发者的开发者激励协议(developerincentiveprotocol,dip),以使智能合约的开发者,尤其是优秀智能开发者通过获得某个形式如代币的方式获得奖励。所述智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上述执行这些承诺的协议。

在物理上,智能合约的载体是计算机可识别并运行的计算机代码。比特币脚本语言是一种命令式的、基于栈的编程语言,由于它是非图灵完备的,在应用上存在一定的局限性。以太坊是全世界第一个实现图灵完备的智能合约的区块链系统,使用的编程语言是solidity、serpent,使得应用开发者们可以高效快速地开发各式各样的应用程序。智能合约代码发布到区块链上后,无需中介的参与即可在区块链自动执行。

然而,智能合约质量的高低,目前没有很好的评价办法。此外,现有基于智能合约的区块链产品,目前所采用的排序方法比较简单,如ethplorer.io按照合约被调用次数进行排序,etherscan.io使用合约交易的总金额进行排序等。按照调用次数排序的做法,很容易被操纵,因为区块链上申请新的账户没有任何成本,调用合约的成本可以忽略不计,这样伪造一个什么功能都没有的合约,可以很容易把排名刷上去。而按照交易总金额进行排序的做法,一样容易被控制,如构造一个合约,在两个账户间转账,循环调用多次就可很容易地把交易总金额刷上去,因而可使排名能被伪造的很靠前。

由此可见,容易被操纵的排序方法使用场景会很受局限,比如用排名来给优秀合约的开发者发放奖励,如果排名很操纵,就会有很大的经济损失。



技术实现要素:

有鉴于此,本发明的主要目的在于提供一种能够客观地评价智能合约质量,并且避免排序结果被操纵的区块链智能合约排序方法。

为达到上述目的,本发明的技术方案是这样实现的:

一种区块链智能合约排序方法,该方法包括如下步骤:

a、进行账户排名的步骤;具体为:根据各个节点在交易网络中的重要程度,得到每个账户的排名结果;

b、进行智能合约排名的步骤;具体包括:b1、根据上述的账户排名结果,取前n个账户,按排名先后分配投票权值;b2、定义一预设周期的活跃地址,即最近一预设周期内调用过智能合约c的所有地址的集合;b3、对智能合约c,将所述预设周期的活跃地址中所有账户的投票权值相加,得到所述智能合约的分数。

其中,步骤a所述根据各个节点在交易网络中的重要程度,得到每个账户的排名结果的过程,包括:

a1、利用交易网络构建模块根据历史交易数据构建有向的带权交易网络,该网络中每个节点代表一个用户地址,网络中一条连接及其权值代表两个地址之间的交易强度;

a2、根据上述有向的带权交易网络利用地址排名模块执行预设的排名算法进行地址排序,给交易网络中的每个节点进行重要程度评分。

其中,步骤b1所述按排名先后分配投票权值,具体为:排第1的账户投票权值为n,第2的权值为n-1,依次类推。

步骤b2所述预设周期为周,所述预设周期的活跃地址为周活跃地址waa。

步骤b3所述得到的智能合约的分数scorec,如公式(1)所示:

scorec=∑k∈waa(c)wk(1)

其中:k代表账户;waa(c)代表合约c的周活跃用户;wk代表账户k的权重。

步骤b3之后进一步包括:

b4、按照所述的分数从高到低给出所述智能合约的排名结果。

较佳地,进一步包括:按所述账户排名、智能合约排名的次序列出区块链智能合约的排序结果。

本发明的区块链智能合约排序方法,具有如下有益效果:

1)该区块链智能合约排序方法,采用预设的具有天然抗攻击性的排名算法,如leaderrank算法,以此得到的账户排名不易伪造。取前n个账户来投票,高排名用户共同选择的智能合约将获得较高的排名,操纵个别高排名用户对排名影响不大。因此从账户排名和合约排名两部分都具有较高的抵抗操纵的能力。

2)该区块链智能合约排序方法,借助投票的逻辑,类似于协同过滤,更多数人信赖的智能合约具有更高的排名,比单独统计调用次数和交易总金额更为合理,因此排序结果也更为可信。

附图说明

图1为本发明实施例区块链智能合约排序方法流程图;

图2为为本发明实施例用于交易网络系统的鼓励函数曲线示意图。

具体实施方式

下面结合附图及本发明的实施例对本发明区块链智能合约排序方法作进一步详细的说明。

图1为本发明实施例区块链智能合约排序方法流程图。

如图1所示,该区块链智能合约排序方法主要包括如下步骤:

步骤11:进行账户排名的步骤。

具体过程为:根据各个节点在交易网络中的重要程度,得到每个账户的排名结果。

所述进行账户排名的过程,包括如下步骤:

步骤111:利用交易网络构建模块构建带权交易网络的步骤。

具体如下:根据历史交易数据构建有向的带权交易网络,该网络中每个节点代表一个用户地址,网络中一条连接及其权值代表两个地址之间的交易强度。

为了提高伪造账户的成本,在构造的交易网络中使用专门针对交易网络设计的衰减机制来提高伪造账户的成本,对于任意一个交易周期,交易地址边权权值的衰减为由两个部分衰减系数的叠加来确定(参考图2)。其中,第一部分为币龄,一个账户在周期内币龄越大,该账户就越难伪造,衰减系数就越小;第二部分由一个鼓励函数曲线构成,该曲线由两个正态分布叠加生成。

如图2所示,其中横轴表示账户收入金额占总流通金额(收入金额和支出金额总和),纵轴表示衰减比例。

该机制鼓励多花钱的人和适度存钱的人,前者可以刺激经济体的流动性,后者则是大多数理性人的消费习惯。而对于几乎不花钱和有导钱嫌疑的“月光族”,我们将给予大幅度衰减。

上述的衰减机制可以很好地、真实反映实际的交易强度。

步骤112:利用地址排名模块执行预设的排名算法进行地址排序的步骤。

根据步骤111中生成的交易网络,执行预设的排名算法进行排序,给交易网络中的每个节点进行重要程度评分。其中预设的排名算法为leaderrank,该算法首先在交易图中添加ground节点,记为g,编号n+1。然后建立ground节点和其他每个节点的双向链接,并赋予链接权值。所述leaderrank算法的计算过程与pagerank算法基本相同,可以理解为求马可夫链的稳定状态。所不同的是,添加了ground节点之后,不再需要考虑pagerank的dampingfactor。即按相应计算公式构造矩阵h后,进行迭代计算直至收敛为止,最后去掉ground节点的评分即可得到交易图各点重要程度的得分。

采用leaderrank算法可以较好地满足对价值尺度的定义和算法的性质,其赋权机制可以增大攻击难度,因此能够更好地满足可信性的要求。

综上,虽然区块链网络中一个人可能零成本拥有多个账户,但是在排序后,筛选出来的高排名用户具有较强的真实性,不易伪造。上述的地址排名结果,可以用于本发明智能合约的投票和智能合约的排名。

步骤12:进行智能合约排名的步骤。

具体过程为:根据上述的账户排名结果,取前n个账户,按排名先后分配投票权值,排第1的账户投票权值为n,第2的权值为n-1,依次类推。

然后,借助周活跃用户的概念,定义一预设周期的活跃地址,所述预设周期为周,该预设周期的活跃地址即为周活跃地址(weeklyactiveaddresses,waa),意即最近一周内调用过智能合约c的所有地址的集合。

在本实施例中,对于合约c,其周活跃地址中所有账户的投票权值之和即为该合约的分数scorec,如公式(1)所示,最后按照所述的分数从高到低给出智能合约的排名结果。

scorec=∑k∈waa(c)wk(1)

其中:k代表账户;waa(c)代表合约c的周活跃用户;wk代表账户k的权重,见公式(2):

wa=max{x+1-nr(a),0}(2)

其中:wa代表用户a的投票权值;x表示选取账户排名前topx的账户,nr(a)表示账户排名结果。

例如:假设x=10,有合约c,在近一周时间内,排名在集合[1,5,6,10,15,20]的用户调用过此合约。

那么这些用户的投票权值分别为:w1=10,w5=6,w6=5,w10=1,w15=0,w20=0。因此,合约c的得分为22。由此,即可给出所有合约排序。

步骤13:按所述账户排名、智能合约排名的次序列出区块链智能合约的排序结果。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1