54
Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 4 v1.0.2 1

Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

Embed Size (px)

Citation preview

Page 1: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

Nebulas 星云链技术书基于价值尺度的区块链操作系统及搜索引擎

Nebulas Team

2018 年 4 v102

1

摘要

特币和以太坊系统分别给区块链世界带来ldquo去中化现rdquo和ldquo智能合约rdquo技术如今区块链技术及产

业已经取得了长的发展和繁荣各种应场景商业需求层出不穷随之来的我们发现已有的区块

链技术已经不能满益增长的户需求总的来说区块链技术临着价值尺度缺失我进化及态

建设三的挑战

本介绍了星云链的技术架构设计意图构建个能够量化价值尺度具备进化能并能促进区块

链态建设的区块链系统主要内容包括

bull 定义价值尺度的星云指数 Nebulas Rank(NR) (sect2)通过综合考虑链中各个账户的流动性及传播性

NR 试图为每个账户建个可信可计算及可复现的普适价值尺度刻画可以预见在 NR 之上

通过挖掘更纵深的价值星云链的平台上将会涌现更多更丰富的应

bull 持核协议和智能合约链上升级的星云原 Nebulas Force(NF) (sect3)帮助星云链及其上的应

实现我进化动态适应社区或市场变化从使得星云链及应将会有更快的发展速度和更的

存潜开发者亦能够通过星云链构建更丰富的应并进快速迭代

bull 开发者激励协议 Developer Incentive Protocol(DIP) (sect4)为了更好地建区块链应态环境星

云链将通过星云币(NAS)来激励为态助的优秀应开发者促进星云链更加丰富多元的价值沉

bull 贡献度证明共识算法 Proof of Devotion(PoD) (sect5)从星云链态健康由发展出发星云链提出了

共识算法的三个重要指标即快速不可逆和公平性PoD 通过融合 PoS 和 PoI 的优势结合星云

链中的价值尺度在保证快速和不可逆的前提下率先加了公平性的考量

bull 去中化应的搜索引擎 (sect6)基于我们所定义的价值尺度星云链构建了个针对去中化应的

搜索引擎帮助户在海量区块链应中找到符合户期望及应场景的应

2

1 简介 6

11 区块链技术简介 6

12 商业和技术挑战 6

13 星云链设计原则 7

2 Nebulas Rank 星云指数 9

21 星云指数总体设计 9

22 交易图 10

23 排名算法 12

24 抵抗操纵 12

25 相关作 18

3 Nebulas Force 19

31 NVM 星云链虚拟机 19

32 核协议的升级设计 21

33 智能合约的升级设计 23

331 图灵完备的智能合约编程语 23

332 合约可升级 24

4 DIP 开发者激励协议 27

41 设计标 27

42 DIP 奖励分配算法 27

43 实验结果 28

44 作弊分析 28

5 PoD 贡献度证明共识算法 30

51 设计标 30

52 常共识算法的缺陷 30

53 PoD 算法设计 30

531 新区块产 30

532 验证者集合更迭 31

533 共识过程 31

534 分叉选择 32

535 投票规则 32

54 PoD 经济分析 33

541 激励分析 33

542 作弊分析 33

3

6 区块链搜索引擎 37

61 简介 37

62 搜索基础架构 37

63 趋势榜单 39

64 关键词搜索 39

65 相似智能合约搜索 39

7 基础服务及开发具 40

71 域名服务 40

72 闪电络 40

73 开发者具 41

8 星云链代币 NAS 42

9 总结 43

附录 A 星云链账号地址设计 49

A1 户账户地址 49

A2 智能合约地址 49

附录 B 相似智能合约搜索 50

附录 C 书版本更新志 54

4

术语表(按字母排序)

BFT Byzantine Fault Tolerant拜占庭容错算法

DIP Developer Incentive Protocol开发者激励协议

NF Nebulas Force星云原

NNS Nebulas Name Service星云链域名服务

NR Nebulas Rank星云指数排名

NVM Nebulas Virtual Machine星云链虚拟机

PoD Proof of Devotion贡献度证明

PoI Proof of Importance重要度证明

PoS Proof of Stake股权证明

PoW Proof of Work作量证明

SCR Smart Contract Rank智能合约贡献度排名

SCS Smart Contract Score智能合约贡献度评分

WAA Weekly Active Addresses周活跃地址

5

1 简介

11 区块链技术简介

2008 年 10 31 中本聪(Satoshi Nakamoto)提出了特币 [38] 的设计书从此我们迎来了

个有区块链的世界特币作为区块链的太初应践了其作为ldquo个去中化电现系统rdquo的初衷

特币的产不依赖于任何机构是根据特定算法依靠量计算产保证了特币络分布式记账

系统的致性以太坊 Ethereum [10] 更进步为我们提供了个可以运具有图灵完备性的代码的通

区块链框架区块链是以特币和以太坊为代表的数字加密货币体系的核撑技术通过运数据加

密时间戳分布式共识和经济激励等段在节点需互相信任的分布式系统中实现去中化信的点

对点交易协调与协作从解决中化机构普遍存在的成本低效率和数据存储不安全等问题

需要说明的是区块链技术本不是个全新的技术创新是作为系列技术的组合 (包括点对点通

讯密码学块链数据结构等) 产的模式创新

12 商业和技术挑战

以区块链技术为代表的去中化主治理的系统正在引起越来越多的重视和研究当前全球区块

链项已经超过 2000 个全球加密数字资产总体价值达到 900 亿美元区块链数字资产领域的户群

也正在快速增加从 2013 年初的全球 200 万户到 2017 年初的 2000 万户我们认为在 2020 年

左右全球区块链数字资产户会达到或超过 2 亿在 2025 年前后全球户有望达到 10 亿规模

随着区块链技术的普及越来越多区块链技术之上的应场景被挖掘出来区块链技术的应场景已经

从最初的数字化货币本逐步扩展到更多的场景及户群体中例如以以太坊为代表的社区在区块链技

术中引智能合约的概念Ripple 则使区块链技术实现了全球的结算系统随着应场景的多样化

户对区块链技术的诉求也益增加我们已经看到很多挑战

价值尺度的缺失 我们认为区块链世界需要个普适的价值尺度来衡量户和智能合约的价值上

层应可以在这个普适的价值尺度上结合场景挖掘更深层次的价值这将带来更多的商业模式的创新

就像 Google 在互联世界的兴起样

区块链系统的升级 不同于普通软件的版本迭代区块链系统由于其天的去中化特性法强制

户升级其客户端及协议因此区块链系统中的协议升级往往会引发区块链ldquo硬分叉rdquo或ldquo软分叉rdquo从造成

巨的损失这更进步限制了区块链系统的应场景以特币为例社区关于区块扩容今仍然存在

巨的争议导致特币协议进化缓慢区块容量严重不出现过近 100 万笔交易在交易池等待被写

区块户很多时候不得不额外付昂的ldquo交易加速费rdquo严重损害体验性能另外从以太坊的ldquo硬分叉rdquo

来看虽然暂时解决了 The DAO 问题但是产了 ETH 和 ETCldquo重资产rdquo和社区分裂的ldquo副作rdquo

区块链应态环境的建 随着区块链上各种应 (DApp) 的快速增长良好的态环境是提

户体验的根本所在这包括户如何在海量的区块链应中检索期望的 DApp如何激励开发员为

户提供更多的 DApp以及如何帮助开发员更快的构建更好的 DApp以以太坊为例基于以太坊的

6

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 2: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

摘要

特币和以太坊系统分别给区块链世界带来ldquo去中化现rdquo和ldquo智能合约rdquo技术如今区块链技术及产

业已经取得了长的发展和繁荣各种应场景商业需求层出不穷随之来的我们发现已有的区块

链技术已经不能满益增长的户需求总的来说区块链技术临着价值尺度缺失我进化及态

建设三的挑战

本介绍了星云链的技术架构设计意图构建个能够量化价值尺度具备进化能并能促进区块

链态建设的区块链系统主要内容包括

bull 定义价值尺度的星云指数 Nebulas Rank(NR) (sect2)通过综合考虑链中各个账户的流动性及传播性

NR 试图为每个账户建个可信可计算及可复现的普适价值尺度刻画可以预见在 NR 之上

通过挖掘更纵深的价值星云链的平台上将会涌现更多更丰富的应

bull 持核协议和智能合约链上升级的星云原 Nebulas Force(NF) (sect3)帮助星云链及其上的应

实现我进化动态适应社区或市场变化从使得星云链及应将会有更快的发展速度和更的

存潜开发者亦能够通过星云链构建更丰富的应并进快速迭代

bull 开发者激励协议 Developer Incentive Protocol(DIP) (sect4)为了更好地建区块链应态环境星

云链将通过星云币(NAS)来激励为态助的优秀应开发者促进星云链更加丰富多元的价值沉

bull 贡献度证明共识算法 Proof of Devotion(PoD) (sect5)从星云链态健康由发展出发星云链提出了

共识算法的三个重要指标即快速不可逆和公平性PoD 通过融合 PoS 和 PoI 的优势结合星云

链中的价值尺度在保证快速和不可逆的前提下率先加了公平性的考量

bull 去中化应的搜索引擎 (sect6)基于我们所定义的价值尺度星云链构建了个针对去中化应的

搜索引擎帮助户在海量区块链应中找到符合户期望及应场景的应

2

1 简介 6

11 区块链技术简介 6

12 商业和技术挑战 6

13 星云链设计原则 7

2 Nebulas Rank 星云指数 9

21 星云指数总体设计 9

22 交易图 10

23 排名算法 12

24 抵抗操纵 12

25 相关作 18

3 Nebulas Force 19

31 NVM 星云链虚拟机 19

32 核协议的升级设计 21

33 智能合约的升级设计 23

331 图灵完备的智能合约编程语 23

332 合约可升级 24

4 DIP 开发者激励协议 27

41 设计标 27

42 DIP 奖励分配算法 27

43 实验结果 28

44 作弊分析 28

5 PoD 贡献度证明共识算法 30

51 设计标 30

52 常共识算法的缺陷 30

53 PoD 算法设计 30

531 新区块产 30

532 验证者集合更迭 31

533 共识过程 31

534 分叉选择 32

535 投票规则 32

54 PoD 经济分析 33

541 激励分析 33

542 作弊分析 33

3

6 区块链搜索引擎 37

61 简介 37

62 搜索基础架构 37

63 趋势榜单 39

64 关键词搜索 39

65 相似智能合约搜索 39

7 基础服务及开发具 40

71 域名服务 40

72 闪电络 40

73 开发者具 41

8 星云链代币 NAS 42

9 总结 43

附录 A 星云链账号地址设计 49

A1 户账户地址 49

A2 智能合约地址 49

附录 B 相似智能合约搜索 50

附录 C 书版本更新志 54

4

术语表(按字母排序)

BFT Byzantine Fault Tolerant拜占庭容错算法

DIP Developer Incentive Protocol开发者激励协议

NF Nebulas Force星云原

NNS Nebulas Name Service星云链域名服务

NR Nebulas Rank星云指数排名

NVM Nebulas Virtual Machine星云链虚拟机

PoD Proof of Devotion贡献度证明

PoI Proof of Importance重要度证明

PoS Proof of Stake股权证明

PoW Proof of Work作量证明

SCR Smart Contract Rank智能合约贡献度排名

SCS Smart Contract Score智能合约贡献度评分

WAA Weekly Active Addresses周活跃地址

5

1 简介

11 区块链技术简介

2008 年 10 31 中本聪(Satoshi Nakamoto)提出了特币 [38] 的设计书从此我们迎来了

个有区块链的世界特币作为区块链的太初应践了其作为ldquo个去中化电现系统rdquo的初衷

特币的产不依赖于任何机构是根据特定算法依靠量计算产保证了特币络分布式记账

系统的致性以太坊 Ethereum [10] 更进步为我们提供了个可以运具有图灵完备性的代码的通

区块链框架区块链是以特币和以太坊为代表的数字加密货币体系的核撑技术通过运数据加

密时间戳分布式共识和经济激励等段在节点需互相信任的分布式系统中实现去中化信的点

对点交易协调与协作从解决中化机构普遍存在的成本低效率和数据存储不安全等问题

需要说明的是区块链技术本不是个全新的技术创新是作为系列技术的组合 (包括点对点通

讯密码学块链数据结构等) 产的模式创新

12 商业和技术挑战

以区块链技术为代表的去中化主治理的系统正在引起越来越多的重视和研究当前全球区块

链项已经超过 2000 个全球加密数字资产总体价值达到 900 亿美元区块链数字资产领域的户群

也正在快速增加从 2013 年初的全球 200 万户到 2017 年初的 2000 万户我们认为在 2020 年

左右全球区块链数字资产户会达到或超过 2 亿在 2025 年前后全球户有望达到 10 亿规模

随着区块链技术的普及越来越多区块链技术之上的应场景被挖掘出来区块链技术的应场景已经

从最初的数字化货币本逐步扩展到更多的场景及户群体中例如以以太坊为代表的社区在区块链技

术中引智能合约的概念Ripple 则使区块链技术实现了全球的结算系统随着应场景的多样化

户对区块链技术的诉求也益增加我们已经看到很多挑战

价值尺度的缺失 我们认为区块链世界需要个普适的价值尺度来衡量户和智能合约的价值上

层应可以在这个普适的价值尺度上结合场景挖掘更深层次的价值这将带来更多的商业模式的创新

就像 Google 在互联世界的兴起样

区块链系统的升级 不同于普通软件的版本迭代区块链系统由于其天的去中化特性法强制

户升级其客户端及协议因此区块链系统中的协议升级往往会引发区块链ldquo硬分叉rdquo或ldquo软分叉rdquo从造成

巨的损失这更进步限制了区块链系统的应场景以特币为例社区关于区块扩容今仍然存在

巨的争议导致特币协议进化缓慢区块容量严重不出现过近 100 万笔交易在交易池等待被写

区块户很多时候不得不额外付昂的ldquo交易加速费rdquo严重损害体验性能另外从以太坊的ldquo硬分叉rdquo

来看虽然暂时解决了 The DAO 问题但是产了 ETH 和 ETCldquo重资产rdquo和社区分裂的ldquo副作rdquo

区块链应态环境的建 随着区块链上各种应 (DApp) 的快速增长良好的态环境是提

户体验的根本所在这包括户如何在海量的区块链应中检索期望的 DApp如何激励开发员为

户提供更多的 DApp以及如何帮助开发员更快的构建更好的 DApp以以太坊为例基于以太坊的

6

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 3: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

1 简介 6

11 区块链技术简介 6

12 商业和技术挑战 6

13 星云链设计原则 7

2 Nebulas Rank 星云指数 9

21 星云指数总体设计 9

22 交易图 10

23 排名算法 12

24 抵抗操纵 12

25 相关作 18

3 Nebulas Force 19

31 NVM 星云链虚拟机 19

32 核协议的升级设计 21

33 智能合约的升级设计 23

331 图灵完备的智能合约编程语 23

332 合约可升级 24

4 DIP 开发者激励协议 27

41 设计标 27

42 DIP 奖励分配算法 27

43 实验结果 28

44 作弊分析 28

5 PoD 贡献度证明共识算法 30

51 设计标 30

52 常共识算法的缺陷 30

53 PoD 算法设计 30

531 新区块产 30

532 验证者集合更迭 31

533 共识过程 31

534 分叉选择 32

535 投票规则 32

54 PoD 经济分析 33

541 激励分析 33

542 作弊分析 33

3

6 区块链搜索引擎 37

61 简介 37

62 搜索基础架构 37

63 趋势榜单 39

64 关键词搜索 39

65 相似智能合约搜索 39

7 基础服务及开发具 40

71 域名服务 40

72 闪电络 40

73 开发者具 41

8 星云链代币 NAS 42

9 总结 43

附录 A 星云链账号地址设计 49

A1 户账户地址 49

A2 智能合约地址 49

附录 B 相似智能合约搜索 50

附录 C 书版本更新志 54

4

术语表(按字母排序)

BFT Byzantine Fault Tolerant拜占庭容错算法

DIP Developer Incentive Protocol开发者激励协议

NF Nebulas Force星云原

NNS Nebulas Name Service星云链域名服务

NR Nebulas Rank星云指数排名

NVM Nebulas Virtual Machine星云链虚拟机

PoD Proof of Devotion贡献度证明

PoI Proof of Importance重要度证明

PoS Proof of Stake股权证明

PoW Proof of Work作量证明

SCR Smart Contract Rank智能合约贡献度排名

SCS Smart Contract Score智能合约贡献度评分

WAA Weekly Active Addresses周活跃地址

5

1 简介

11 区块链技术简介

2008 年 10 31 中本聪(Satoshi Nakamoto)提出了特币 [38] 的设计书从此我们迎来了

个有区块链的世界特币作为区块链的太初应践了其作为ldquo个去中化电现系统rdquo的初衷

特币的产不依赖于任何机构是根据特定算法依靠量计算产保证了特币络分布式记账

系统的致性以太坊 Ethereum [10] 更进步为我们提供了个可以运具有图灵完备性的代码的通

区块链框架区块链是以特币和以太坊为代表的数字加密货币体系的核撑技术通过运数据加

密时间戳分布式共识和经济激励等段在节点需互相信任的分布式系统中实现去中化信的点

对点交易协调与协作从解决中化机构普遍存在的成本低效率和数据存储不安全等问题

需要说明的是区块链技术本不是个全新的技术创新是作为系列技术的组合 (包括点对点通

讯密码学块链数据结构等) 产的模式创新

12 商业和技术挑战

以区块链技术为代表的去中化主治理的系统正在引起越来越多的重视和研究当前全球区块

链项已经超过 2000 个全球加密数字资产总体价值达到 900 亿美元区块链数字资产领域的户群

也正在快速增加从 2013 年初的全球 200 万户到 2017 年初的 2000 万户我们认为在 2020 年

左右全球区块链数字资产户会达到或超过 2 亿在 2025 年前后全球户有望达到 10 亿规模

随着区块链技术的普及越来越多区块链技术之上的应场景被挖掘出来区块链技术的应场景已经

从最初的数字化货币本逐步扩展到更多的场景及户群体中例如以以太坊为代表的社区在区块链技

术中引智能合约的概念Ripple 则使区块链技术实现了全球的结算系统随着应场景的多样化

户对区块链技术的诉求也益增加我们已经看到很多挑战

价值尺度的缺失 我们认为区块链世界需要个普适的价值尺度来衡量户和智能合约的价值上

层应可以在这个普适的价值尺度上结合场景挖掘更深层次的价值这将带来更多的商业模式的创新

就像 Google 在互联世界的兴起样

区块链系统的升级 不同于普通软件的版本迭代区块链系统由于其天的去中化特性法强制

户升级其客户端及协议因此区块链系统中的协议升级往往会引发区块链ldquo硬分叉rdquo或ldquo软分叉rdquo从造成

巨的损失这更进步限制了区块链系统的应场景以特币为例社区关于区块扩容今仍然存在

巨的争议导致特币协议进化缓慢区块容量严重不出现过近 100 万笔交易在交易池等待被写

区块户很多时候不得不额外付昂的ldquo交易加速费rdquo严重损害体验性能另外从以太坊的ldquo硬分叉rdquo

来看虽然暂时解决了 The DAO 问题但是产了 ETH 和 ETCldquo重资产rdquo和社区分裂的ldquo副作rdquo

区块链应态环境的建 随着区块链上各种应 (DApp) 的快速增长良好的态环境是提

户体验的根本所在这包括户如何在海量的区块链应中检索期望的 DApp如何激励开发员为

户提供更多的 DApp以及如何帮助开发员更快的构建更好的 DApp以以太坊为例基于以太坊的

6

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 4: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

6 区块链搜索引擎 37

61 简介 37

62 搜索基础架构 37

63 趋势榜单 39

64 关键词搜索 39

65 相似智能合约搜索 39

7 基础服务及开发具 40

71 域名服务 40

72 闪电络 40

73 开发者具 41

8 星云链代币 NAS 42

9 总结 43

附录 A 星云链账号地址设计 49

A1 户账户地址 49

A2 智能合约地址 49

附录 B 相似智能合约搜索 50

附录 C 书版本更新志 54

4

术语表(按字母排序)

BFT Byzantine Fault Tolerant拜占庭容错算法

DIP Developer Incentive Protocol开发者激励协议

NF Nebulas Force星云原

NNS Nebulas Name Service星云链域名服务

NR Nebulas Rank星云指数排名

NVM Nebulas Virtual Machine星云链虚拟机

PoD Proof of Devotion贡献度证明

PoI Proof of Importance重要度证明

PoS Proof of Stake股权证明

PoW Proof of Work作量证明

SCR Smart Contract Rank智能合约贡献度排名

SCS Smart Contract Score智能合约贡献度评分

WAA Weekly Active Addresses周活跃地址

5

1 简介

11 区块链技术简介

2008 年 10 31 中本聪(Satoshi Nakamoto)提出了特币 [38] 的设计书从此我们迎来了

个有区块链的世界特币作为区块链的太初应践了其作为ldquo个去中化电现系统rdquo的初衷

特币的产不依赖于任何机构是根据特定算法依靠量计算产保证了特币络分布式记账

系统的致性以太坊 Ethereum [10] 更进步为我们提供了个可以运具有图灵完备性的代码的通

区块链框架区块链是以特币和以太坊为代表的数字加密货币体系的核撑技术通过运数据加

密时间戳分布式共识和经济激励等段在节点需互相信任的分布式系统中实现去中化信的点

对点交易协调与协作从解决中化机构普遍存在的成本低效率和数据存储不安全等问题

需要说明的是区块链技术本不是个全新的技术创新是作为系列技术的组合 (包括点对点通

讯密码学块链数据结构等) 产的模式创新

12 商业和技术挑战

以区块链技术为代表的去中化主治理的系统正在引起越来越多的重视和研究当前全球区块

链项已经超过 2000 个全球加密数字资产总体价值达到 900 亿美元区块链数字资产领域的户群

也正在快速增加从 2013 年初的全球 200 万户到 2017 年初的 2000 万户我们认为在 2020 年

左右全球区块链数字资产户会达到或超过 2 亿在 2025 年前后全球户有望达到 10 亿规模

随着区块链技术的普及越来越多区块链技术之上的应场景被挖掘出来区块链技术的应场景已经

从最初的数字化货币本逐步扩展到更多的场景及户群体中例如以以太坊为代表的社区在区块链技

术中引智能合约的概念Ripple 则使区块链技术实现了全球的结算系统随着应场景的多样化

户对区块链技术的诉求也益增加我们已经看到很多挑战

价值尺度的缺失 我们认为区块链世界需要个普适的价值尺度来衡量户和智能合约的价值上

层应可以在这个普适的价值尺度上结合场景挖掘更深层次的价值这将带来更多的商业模式的创新

就像 Google 在互联世界的兴起样

区块链系统的升级 不同于普通软件的版本迭代区块链系统由于其天的去中化特性法强制

户升级其客户端及协议因此区块链系统中的协议升级往往会引发区块链ldquo硬分叉rdquo或ldquo软分叉rdquo从造成

巨的损失这更进步限制了区块链系统的应场景以特币为例社区关于区块扩容今仍然存在

巨的争议导致特币协议进化缓慢区块容量严重不出现过近 100 万笔交易在交易池等待被写

区块户很多时候不得不额外付昂的ldquo交易加速费rdquo严重损害体验性能另外从以太坊的ldquo硬分叉rdquo

来看虽然暂时解决了 The DAO 问题但是产了 ETH 和 ETCldquo重资产rdquo和社区分裂的ldquo副作rdquo

区块链应态环境的建 随着区块链上各种应 (DApp) 的快速增长良好的态环境是提

户体验的根本所在这包括户如何在海量的区块链应中检索期望的 DApp如何激励开发员为

户提供更多的 DApp以及如何帮助开发员更快的构建更好的 DApp以以太坊为例基于以太坊的

6

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 5: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

术语表(按字母排序)

BFT Byzantine Fault Tolerant拜占庭容错算法

DIP Developer Incentive Protocol开发者激励协议

NF Nebulas Force星云原

NNS Nebulas Name Service星云链域名服务

NR Nebulas Rank星云指数排名

NVM Nebulas Virtual Machine星云链虚拟机

PoD Proof of Devotion贡献度证明

PoI Proof of Importance重要度证明

PoS Proof of Stake股权证明

PoW Proof of Work作量证明

SCR Smart Contract Rank智能合约贡献度排名

SCS Smart Contract Score智能合约贡献度评分

WAA Weekly Active Addresses周活跃地址

5

1 简介

11 区块链技术简介

2008 年 10 31 中本聪(Satoshi Nakamoto)提出了特币 [38] 的设计书从此我们迎来了

个有区块链的世界特币作为区块链的太初应践了其作为ldquo个去中化电现系统rdquo的初衷

特币的产不依赖于任何机构是根据特定算法依靠量计算产保证了特币络分布式记账

系统的致性以太坊 Ethereum [10] 更进步为我们提供了个可以运具有图灵完备性的代码的通

区块链框架区块链是以特币和以太坊为代表的数字加密货币体系的核撑技术通过运数据加

密时间戳分布式共识和经济激励等段在节点需互相信任的分布式系统中实现去中化信的点

对点交易协调与协作从解决中化机构普遍存在的成本低效率和数据存储不安全等问题

需要说明的是区块链技术本不是个全新的技术创新是作为系列技术的组合 (包括点对点通

讯密码学块链数据结构等) 产的模式创新

12 商业和技术挑战

以区块链技术为代表的去中化主治理的系统正在引起越来越多的重视和研究当前全球区块

链项已经超过 2000 个全球加密数字资产总体价值达到 900 亿美元区块链数字资产领域的户群

也正在快速增加从 2013 年初的全球 200 万户到 2017 年初的 2000 万户我们认为在 2020 年

左右全球区块链数字资产户会达到或超过 2 亿在 2025 年前后全球户有望达到 10 亿规模

随着区块链技术的普及越来越多区块链技术之上的应场景被挖掘出来区块链技术的应场景已经

从最初的数字化货币本逐步扩展到更多的场景及户群体中例如以以太坊为代表的社区在区块链技

术中引智能合约的概念Ripple 则使区块链技术实现了全球的结算系统随着应场景的多样化

户对区块链技术的诉求也益增加我们已经看到很多挑战

价值尺度的缺失 我们认为区块链世界需要个普适的价值尺度来衡量户和智能合约的价值上

层应可以在这个普适的价值尺度上结合场景挖掘更深层次的价值这将带来更多的商业模式的创新

就像 Google 在互联世界的兴起样

区块链系统的升级 不同于普通软件的版本迭代区块链系统由于其天的去中化特性法强制

户升级其客户端及协议因此区块链系统中的协议升级往往会引发区块链ldquo硬分叉rdquo或ldquo软分叉rdquo从造成

巨的损失这更进步限制了区块链系统的应场景以特币为例社区关于区块扩容今仍然存在

巨的争议导致特币协议进化缓慢区块容量严重不出现过近 100 万笔交易在交易池等待被写

区块户很多时候不得不额外付昂的ldquo交易加速费rdquo严重损害体验性能另外从以太坊的ldquo硬分叉rdquo

来看虽然暂时解决了 The DAO 问题但是产了 ETH 和 ETCldquo重资产rdquo和社区分裂的ldquo副作rdquo

区块链应态环境的建 随着区块链上各种应 (DApp) 的快速增长良好的态环境是提

户体验的根本所在这包括户如何在海量的区块链应中检索期望的 DApp如何激励开发员为

户提供更多的 DApp以及如何帮助开发员更快的构建更好的 DApp以以太坊为例基于以太坊的

6

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 6: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

1 简介

11 区块链技术简介

2008 年 10 31 中本聪(Satoshi Nakamoto)提出了特币 [38] 的设计书从此我们迎来了

个有区块链的世界特币作为区块链的太初应践了其作为ldquo个去中化电现系统rdquo的初衷

特币的产不依赖于任何机构是根据特定算法依靠量计算产保证了特币络分布式记账

系统的致性以太坊 Ethereum [10] 更进步为我们提供了个可以运具有图灵完备性的代码的通

区块链框架区块链是以特币和以太坊为代表的数字加密货币体系的核撑技术通过运数据加

密时间戳分布式共识和经济激励等段在节点需互相信任的分布式系统中实现去中化信的点

对点交易协调与协作从解决中化机构普遍存在的成本低效率和数据存储不安全等问题

需要说明的是区块链技术本不是个全新的技术创新是作为系列技术的组合 (包括点对点通

讯密码学块链数据结构等) 产的模式创新

12 商业和技术挑战

以区块链技术为代表的去中化主治理的系统正在引起越来越多的重视和研究当前全球区块

链项已经超过 2000 个全球加密数字资产总体价值达到 900 亿美元区块链数字资产领域的户群

也正在快速增加从 2013 年初的全球 200 万户到 2017 年初的 2000 万户我们认为在 2020 年

左右全球区块链数字资产户会达到或超过 2 亿在 2025 年前后全球户有望达到 10 亿规模

随着区块链技术的普及越来越多区块链技术之上的应场景被挖掘出来区块链技术的应场景已经

从最初的数字化货币本逐步扩展到更多的场景及户群体中例如以以太坊为代表的社区在区块链技

术中引智能合约的概念Ripple 则使区块链技术实现了全球的结算系统随着应场景的多样化

户对区块链技术的诉求也益增加我们已经看到很多挑战

价值尺度的缺失 我们认为区块链世界需要个普适的价值尺度来衡量户和智能合约的价值上

层应可以在这个普适的价值尺度上结合场景挖掘更深层次的价值这将带来更多的商业模式的创新

就像 Google 在互联世界的兴起样

区块链系统的升级 不同于普通软件的版本迭代区块链系统由于其天的去中化特性法强制

户升级其客户端及协议因此区块链系统中的协议升级往往会引发区块链ldquo硬分叉rdquo或ldquo软分叉rdquo从造成

巨的损失这更进步限制了区块链系统的应场景以特币为例社区关于区块扩容今仍然存在

巨的争议导致特币协议进化缓慢区块容量严重不出现过近 100 万笔交易在交易池等待被写

区块户很多时候不得不额外付昂的ldquo交易加速费rdquo严重损害体验性能另外从以太坊的ldquo硬分叉rdquo

来看虽然暂时解决了 The DAO 问题但是产了 ETH 和 ETCldquo重资产rdquo和社区分裂的ldquo副作rdquo

区块链应态环境的建 随着区块链上各种应 (DApp) 的快速增长良好的态环境是提

户体验的根本所在这包括户如何在海量的区块链应中检索期望的 DApp如何激励开发员为

户提供更多的 DApp以及如何帮助开发员更快的构建更好的 DApp以以太坊为例基于以太坊的

6

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 7: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

DApp 总数已经数万个试想如果区块链世界中的 DApp 接近苹果 App Store 应总量规模的话如

何发现并找到户期望的 DApp 就是个很问题

13 星云链设计原则

对上述机遇和挑战我们要设计个基于价值激励的进化区块链系统具体来说我们有以下设计

原则

bull 公正的排名算法定义价值尺度

我们认为区块链世界需要个普适的价值尺度于衡量区块链底层简单数据的价值发现信息的

更维度信息从探索并挖掘区块链世界的更价值类似 Google 的 PageRank [9][46]我们也

提出区块链世界的 NR(Nebulas Rank星云指数) (见 sect2) 算法综合考虑了区块链上的资流动性

以及资传播的速度度和深度给区块链户做公正的排名NR 是星云链赋予区块链世界的价

值尺度来帮助开发者结合场景有效衡量区块链中各个户智能合约DApp 的重要性NR

有巨的商业潜可以在搜索推荐告等领域当中

bull 区块链系统及应的我进化

我们认为个良态的区块链系统及其上的应应该能够实现我进化在较少外部涉的情况下

实现更快的计算更强的系统及更好的体验我们将这种我进化的能称之为 NF(Nebulas Force

星云原) (见 sect3)在星云链的系统架构中通过在区块结构上的良好设计基础协议将会成为链上

数据的部分并通过链上数据的追加实现基础协议的升级对于星云链中的应(智能合约)星云

链通过在智能合约底层存储持状态变量可跨合约访问的设计完成智能合约的升级具备我升级

进化能的星云链未来其它的公有链具有更快的发展速度和更的存潜同时使得开发者

对漏洞能够更快的响应和升级避免客事件给户带来巨的损失

bull 区块链应态环境的建设

在星云链中我们提出了基于账户贡献度的 PoD(见 sect5) 算法利 NR 的价值尺度评估找出对态

贡献度较的账户平等地赋予记账资格遏制记账权被垄断并且融合 PoS 中的经济惩罚防公

链被恶意破坏为态由发展助既能保证较快的共识速度又能 PoS 和 PoI 更抗作弊对

区块链态的发展有良好的促进作

在星云链中我们提出向智能合约和 DApp 开发者的 DIP(Developer Incentive Protocol 开发者

激励协议) (见 sect4)DIP 的核思想是对社区贡献度的智能合约或 DApp 的开发者给予他们相应

的开发者激励激励由记账负责写区块

基于 Nebulas Rank 机制星云链进步包含了搜索引擎 (见 sect6)以帮助户更好的探索区块链中

的价值应

考虑到以太坊已经有巨的态是个常成功的公有区块链平台星云链希望尽可能的借鉴以太坊

等其他区块链系统的优秀设计从智能合约编程上完全兼容以太坊使得基于以太坊开发的产品能够零成

本的迁移到星云链上

基于上述设计原则我们试图构建个基于价值尺度的区块链操作系统及搜索引擎本书详细描述

了星云链中关于技术的细节其中 sect2描述了种可能的价值尺度及其算法 Nebulas Ranksect3描述了星云

7

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 8: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

链的我进化能 Nebulas Force sect4sect5sect6sect7描述了星云链在建设区块链应态圈的的设计和构想

最后sect8描述了星云链的代币 NAS

8

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 9: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

2 Nebulas Rank 星云指数

21 星云指数总体设计

当前区块链技术和态已具有相当规模但是们对其认识还处于扁平化阶段尚不存在个合理的

式去评估链上实体(例如户地址)的价值因此我们试图在区块链世界提出个普适的价值尺度通过

对链上为的挖掘利将每个实体(户地址)的重要程度量化为 Nebulas Rank 的指标形式Nebulas

Rank 旨在实现双重标

bull 作为原的价值尺度Nebulas Rank 可以成为诸多基础场景的核算法如共识算法 (见 sect5)开发

者激励 (见 sect4) 和区块链搜索引擎 (见 sect6)等等

bull Nebulas Rank 可以启发们对区块链的态现状定义更多样化的价值尺度同时产更深层次差

异化和结构化的认识进在商业决策和研究活动中有明确的向

基于上述标我们为 Nebulas Rank 定义了三重价值尺度

bull 流动性即交易的频次和规模是 Nebulas Rank 的第个考量维度本质上来看融是通过资本

流动推动社会资源的有效配置推动经济发展的社会活动区块链构建了个价值络更多的交易

数量更的交易规模产更的流动性更的流动性又进步提升了交易数量交易规模从

进步强化了它们的价值形成了个完整的正向反馈机制

bull 传播性即资产流动的度和深度是 Nebulas Rank 的第个考量维度在社交络中的传播性

即信息的传播速度度和深度是络质量和户增长的关键指标我们在区块链世界将会看到同

样的模式强传播性意味着资产流动的度和深度会提区块链世界的资产质量提升资产规模

bull 互操作性是 Nebulas Rank 的第三个考量维度在互联的早期我们只有简单的站孤的信息

现在络上的各种平台信息开始相互调数据孤岛逐渐被打破这趋势可以被理解为识别更

维度信息的过程我们认为区块链世界也会遵循同样的发展规律但其过程速度会更快户的资产

智能合约和 DApp 之间的信息会越来越丰富维信息间的互操作会越来越频繁因此更好的互操作

性将会变得越来越重要

我们选择使链上的交易记录作为 Nebulas Rank 算法的数据来源因为相于现实世界区块链世界

的ldquo踪rdquo更为清晰和可信链上的交易数据忠实地记录了户之间的每笔转账以及每次对ldquo智能合约rdquo的调

情况然根据交易数据设计算法并易事因为相于现实世界区块链世界的交易具有天然的匿名

性同时数据量规模更为庞因此我们试图为 Nebulas Rank 刻画如下的性质

bull 可信实体如果要提的价值必须付出定的成本这样可以确保算法的结果能够甄选出真正

具有较价值的户在共识算法和开发者激励等场景下可信的结果励户诚实地贡献

以实现正向反馈另可信的结果提供了有意义的户分层结果能提供更好的决策基础

bull 可计算作为基础字段Nebulas Rank 的结果应该以最快最直接的式提供因此其实现需要较低

的计算复杂度

bull 可复现由于共识算法和开发者激励等场景的需要Nebulas Rank 需要保证在所有客户端的计算结

果完全致

9

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 10: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

接下来我们设计 Nebulas Rank 的基本框架先我们图的形式表现交易记录在交易图的基本定

义中每个节点代表个实体每条边代表实体之间的转账为 [57]交易图表现了转账为导致资产流

动的性质有助于表上述价值尺度中流动性和传播性的概念同时图的形式也能便刻画合约之间的

互操作性得到图之后便可以复杂络的中性测度来对重要络节点进排名对 Nebulas Rank 的情

景我们采 LeaderRank [14][32]并取得 Google 的 PageRank 和 NEM [39] 的 NCDAwareRank 更

好的排名效果

22 交易图

本节介绍如何从交易数据构造交易图

先 对于任何个时刻 t0我们记录时间 [t0 minus T t0] 内 (般情况下T 是值为个的常量)所

有区块包含的个户之间的有效交易记录其中每笔交易记录可以表成个 4-元组 (s r a t)s 是

转出地址r 是转地址a 是交易额t 是这笔交易的区块时间并且我们定义任何个交易是有效

的当且仅当 a gt 0 和 s = r因[t0 minus T t0] 内所有的有效交易记录可以表成个 4-元组的集合

Θ(t0) = (s r a t) | t0 minus T le t le t0 and a gt 0 and s = r (1)

基于 Θ(t0)我们可以构造有向加权简单图 G = (VEW )其中V E 和 W 分别表节点集合有

向边集合和边的权值集合V 中的每个节点都代表个账户的地址E 中的每条有向边代表两个户之间

的交易关系我们定义以下公式合并对应交易的最 K 个额作为权值 we

we =

Ksumi=1

ai st ai isin Ae (2)

其中 Ae 是个由所有在 Θ(t0) 出现的从 s 到 r 的交易的额 a 组成的有序集合

Ae = ai | e = (s r) and (s r ai t) isin Θ(t0) and (ai ge aj foralli le j) (3)

另外记 N = |V |M = |E|其中 || 表集合的范数因总共有 N 个地址和 M 条有效交易

在下中为了表述便利所有节点都以个 1 到 N 之间的整数来表

接着对每个节点根据其在 [t0 minus T t0] 的转转出记录计算它的ldquo币龄rdquo记作 Cv根据转转出

的额总量根据图1所的ldquo励函数rdquo计算出每个节点励值 Ev1最后使标节点的 Cv 和 EV 对边

权进衰减

最后取整个交易图的最弱连通分将分之外的节点删除被删除的节点不参与后的排名默

认赋予最低的重要性分数

上述构造交易图的式有助于实现 sect21定义的ldquo可信rdquo性质具体效果见 sect24的讨论

我们收集了 Ethereum 主链从 3629091(约 2017 年 5 1 )到 3800775(约 2017 年 5 31 )

共 171 684 条区块交易数据按照本节介绍的式构造了交易图(T 为 30 天K = 2)可视化结果如

图2所1励函数可以表为两个正态分布的线性加和形式在转出额为零时以及转出额少于转额的某点取得最值

10

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 11: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

图 1 励函数

图 2 交易图(部分节点)可视化节点对应地址的交易规模(资流流出)越其节点的出度越图直

径越可以看出很多已知交易所地址和量其他地址有转账交互但也有部分参与规模交易的地址份未知其

还有待挖掘

11

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 12: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

23 排名算法

本节介绍如何在构造的交易图中进节点重要性排名

我们采 LeaderRank [14][32] 作为核算法根据 LeaderRank 的算法在交易图中添加编号 0 的背

景节点并且建背景节点 0 和其他任何节点 i 之间的双向边(1 le i le N)我们定义每条与背景节点

相关的有向边的权值如下

wi0 = α(maxsum

wji =0

wji minussum

wij =0

wij 0+ λC) foralli isin [1 N ] (4)

w0i = β(sum

wim =0

wim + microC) foralli isin [1 N ] (5)

其中C 表集合 wij |wij = 0 0 le i j le N 的中位数α β γ 和 micro 都是参数

上述赋权式可以理解为度更的节点接收了更多来背景节点的边权值ldquo净流rdquo(即度减出

度)更的节点向背景节点输出了更强的链接

LeaderRank 的计算过程和 PageRank 基本相同可以理解为求马可夫链的稳定状态所不同的是添

加了背景节点之后不再需要考虑 PageRank 的 damping factor[9][46]并且所有节点天然地就具有少许

出度按 (7) 构造矩阵 H 后进如 (6) 所的迭代(初始值设置见 (8))直收敛为最后去掉背

景节点的评分即为交易图各点重要程度得分 P lowast

P t+1 = H times P tP 1 = [01

N1

N

1

N]T (6)

hij =w(ji)sumk w(jk)

(7)

forallv isin V P lowastv larr P lowast

v +P lowastG

N(8)

我们认为LeaderRank 可以较好地满 sect21定义的价值尺度和算法性质

bull LeaderRank 可以理解为在资流动络动态平衡状态下通过每点的流量这契合了 Nebulas Rank

的ldquo流动性rdquoldquo传播性rdquo和ldquo互操作性rdquo等尺度

bull (5) 和 (4) 所定义的赋权机制可以加攻击难度(见 sect24的讨论)更好地满ldquo可信rdquo性质

bull LeaderRank 的计算可以迭代式完成由于络的稀疏性矩阵运算复杂度不能够满ldquo可计

算rdquo和ldquo可复现rdquo的性质

24 抵抗操纵

可信性即抵抗操纵的能是 Nebulas Rank 最重要同时也是最具挑战的标部分恶意操纵的段

有以下种

1 环形转账攻击者沿环形拓扑让同笔资不断流过对应的边以提边权

12

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 13: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

2 向其他任意账户转钱提出度并且提资流出的传播性

3 控制多个账户形成独分伪造中节点

4 频繁同权威交易所账户交易多次在交易所账户中取取出同笔资获得较好的络结构位置

Nebulas Rank 通过以下个机制可以弱化操纵效果

bull 由于设置了长为 T 的滑动时间窗攻击者法在短期内迅速提的排名

bull 因为边权由最的次交易额决定在个环状拓扑内的多次转账不能限提各边权值同时

从 sect22采集的数据看有 91 的双只进了或两次交易因此 K 取 2 可以最限度保留边的

强度信息同时抵抗环形转账攻击

bull 为了获得更ldquo币龄rdquo户需要让资在的账户内ldquo停留rdquo段时间进拖慢攻击者的交易速度

bull 为了获得最的ldquo励值rdquo如图1所账户需要在当前周期内转出额多于收或者只转出少于收

半的额因此伪造资流动时攻击者的本会因各个账户的储蓄效应迅速衰减

bull 由于取了最弱联通分伪造的独分会被视为噪声过滤清除从 sect22采集的数据看交易图

有 453 285 个节点970 577 条边有 1 169 个弱分其中最弱分有 449 746 个节点占全体

节点的 992次弱分有 133 个节点仅占全体节点的 003因此取最弱联通分可以最

限度保留络正常成分并且过滤噪声数据

bull 相对于 PageRank 和 NCDawareRank [43] 等页排名算法(5) 和 (4) 所定义的赋权机制对低度

的节点评分偏向ldquo保守rdquo即低度的节点获得来背景节点的链接更弱在区块链交易图中低收

节点更容易被伪造频繁向其他任意地址转账也并不能提收因此使 Nebulas Rank 的法

可以提升操纵难度

接下来基于 2017 年 5 份 Ethereum 的交易图(见 sect22)我们展系列结论

先我们列出 Nebulas Rank 排名部分地址如表1所2可以看出交易所账户以及部分交易吞吐

量较地址的排名较为靠前

2备注来源 Etherscan [16]

13

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 14: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

表 1 Nebulas Rank 排名前 10 名及部分其他地址

排名 地址 Nebulas Rank 备注 转出额 (Ether) 转额 (Ether)

10x267be1c1d684f78cb4f

6a176c4911b741e4ffdc00449275 Kraken_4 321423206 35000800

20xd4c5867cec094721aab

c3c4d0fd2f2ac7878c79a0093798 5800000 10094700

30x027beefcbad782faf69f

ad12dee97ed894c685490049277 QuadrigaCX 20744011 6560640

40x0ee4e2d09aec35bdf08

083b649033ac0a41aa75e0046831 5646500 6008796

50xc257274276a4e539741

ca11b590b9447b26a80510037628 107110593 143410672

60xa53e0ca7d246a764993

f010d1fde4ad01189f4e60033488 776468 320100

70xf259e51f791e9ed26e8

9b6cae4a7c6296bfbd0b80033481 330700 773130

80xf195cac8452bcbc836a

4d32cfb22235af4ac1e9c0026343 1086387 231569

90x94435d12c51e19d5b5c

8656763f9069d37791a1a0024970 1293858 1585890

100x7580ba923c01783115d

79975d6a41b3d38eff8d50021670 26300000 36479349

160xcafb10ee663f465f9d10

588ac44ed20ed608c11e0004995 Bitfinex_1 36000000 143585840

510xd94c9ff168dc6aebf9b

6cc86deff54f3fb0afc330000868 yunbi_1 117922474 120253953

640x70faa28a6b8d6829a4b

1e649d26ec9a2a39ba4130000590 Shapeshift 5250181 65193349

14

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 15: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

接着对交易额和 Nebulas Rank 的关系由于区块链交易可以理解为ldquo资交换rdquo类型的络流

根据 Borgatti [5] 的研究作节点的度即邻接边权值之和是适于此类络的个合适的中性测

度以每个节点为中思考度即交易吞吐额(转转出额的和)是节点跳局部信息的体现直

接反映了对应地址的历史资流量因此应该作为衡量排名算法的基准交易额与 Nebulas Rank 的关系

如图3所没有节点能够以较低的交易额获取靠前排名交易额较的节点也要满定条件才能

取得的排名这可以致印证 Nebulas Rank 的可信性

图 3 Nebulas Rank vs 交易额横坐标为 Rank 值纵坐标为交易额均为对数形式图中斜线代表交易

额和 rank 值成正例的情况好的算法应该使得数据点尽可能少地落在斜线的右下以免低交易吞吐额的节点取

得好的重要性排名

在之前的部分通过简单的分析可以推断本节开始所述的前三种攻击式各都可以被特定的处理

段有效过滤掉因此最后我们只需仿真最后类攻击攻击者选定某权威交易所节点在排名计算周

期内创造 X 次环形交易每次交易时攻击者先经由某新建地址向交易所节点转 Y Ether之后经另

新建节点从交易所节点取出 Y Ether攻击式意图如图4所此类攻击利了某些交易所可以低成本

建转账链接的性质虽然合法地址也可能和交易所频繁交易但此类攻击的为并未促进资产的有效流

动因此应该与合法为在定程度上区分开

15

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 16: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

Shapeshfit

Sybil

owned by sybil attacker

normal nodes

4h+1 4h+4 4 1

4h+2 4h+3 3 2

图 4 将交易所纳环形交易的攻击意图图中给出了第 1 次和第 h 次环形转账的意选择的权威交易所节

点为 Shapeshift边的标签代表时序Sybil 及其附属节点和 Shapeshift 节点之间每条边所代表的转账额为 Y Ether

攻击者共进 X 次环形转账

测试选择的权威交易所为 Shapeshift (0x70faa28a6b8d6829a4b1e649d26ec9a2a39ba413)结果如图5所

1)图5a展的结果表明随着攻击者投本提使任何算法都法阻攻击者排名变得越来越

好使 sect22所述的式构造交易图可以使得攻击效果显著减弱并且 Nebulas Rank 可以既充分重视

交易量地址又可以在定程度上更好地抵抗操纵2)图5b展的结果表明随着攻击者攻击次数的增

加sect22所述的交易图构造式可以使得攻击者排名下降原因是我们的交易图加权法考虑了币龄和

励函数等因素同时 Nebulas Rank 可以强化这些因素的影响以抵抗操纵

16

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 17: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

100 10000

Deposit (Ether)

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(a) 攻击次数固定为 5000 次攻击投本对排名的影响(横纵坐标均为对数形式)

100 10000

Attacks

Ran

king

(lo

wer

bet

ter)

Alglorithm

NCD

NEM

NR

PR

(b) 攻击投本固定为 Ξ1000攻击次数对排名的影响(横纵坐标均为对数形式)

图 5 抗操纵测试结果攻击式如图4所横轴为攻击成本纵轴为攻击者主节点的排名(排名越靠后纵

坐标越算法抵抗操纵能越好)NR交易图如 sect22所述排名算法按照 sect23所述NCDlowast交易图如

sect22所述NCDawareRank 排名算法NEM交易图如 [39] 所述NCDawareRank 排名算法PR交易图

如 [39] 所述PageRank 排名算法PageRank 的 damping factor 为 015NCDawareRank 使 pscan [12]

社群划分算法η = 075micro = 01

17

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 18: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

25 相关作

中性作为最核的节点排名指标是过去年络科学领域研究最多的个概念 [40]丰富的

献引了量中性测度包括度中性 [21]特征值中性 [4]Katz 中性 [28]接近度中性 [51]

介数中性 [22][23][24][44][41]PageRank [9]HITS [30]SALSA [52]等等此外还有许多作试图

统的框架来对中性测度作出清晰的分类和综述 [5][6][34]在设计 Nebulas Rank 时需要先考察交易

图的性质然后再选合适的中性Borgatti [5] 作中提到的资交换络和区块链交易图最为相近

但是提到的相关算法如流介数中性 [24] 和随机游介数中性 (又称电流中性) [41]复杂度过

在区块链交易图的规模上不符合 Nebulas Rank 的ldquo可计算rdquo性质

从特币 [38] 系统在 2009 年发布以来研究者们对特币交易图做了些试验性和统计上的分

析 [50][26][42][2]同时试图使交易图的结构来讨论特币的匿名性问题 [35][45][47][20][19]在其他加密

货币出现并流之后交易图分析拓展到了其他的区块链系统 [13][1]Nebulas Rank 采的交易图概念和

这些研究中的致相同即 Tschorsch and Scheuermann [57] 所总结的ldquo实体图rdquo即每个户实体被映射

为个节点每条有向边则代表两个户之间的交易强度事实上早在如特币样的区块链系统发

明之前学者们就尝试对银和国际交易的融络进研究 [49][8][53][3][17][37][7][31][54]和区块链交

易图相这些早期研究的络还包含了额外的借贷活动并且这些络的规模常总之现有研究

乎没有专门针对规模区块链交易图提出排名法

和 Nebulas Rank 最相关的作是 NEM [39] 的 Proof-of-Importance 机制它采了 NCDawar-

eRank [43] 作为排名算法NCDawareRank [43] 利了络拓扑的社群效应Proof-of-Importance 使

SCAN [58][55][12] 作为社群聚类算法虽然社区结构在交易络的确存在并且可以帮助应对欺诈节点却

法保证同个实体对应节点定可以映射到相同社群因此利社区划分的结果会提供定的可操纵空

间此外 Fleder Kester and Pillai [20] 使 PageRank 来帮助发现感兴趣的特币地址并分析它们的活

动但他们的作仍然将主观分析作为主要法PageRank 只起到辅助作这也和 Nebulas Rank

的标不符我们采的算法是 LeaderRank [14][32]它是 PageRank 的种拓展形式在 PageRank 中

每个节点都有相同的随机跳转概率LeaderRank 是对跳转概率种简单但有效的改进通过在络中添加

背景节点和加权的双向链接可以使得不同节点具有不同的随机跳和跳出概率Nebulas Rank 的加权机

制部分参考了 Li et al [32] 的设计使得度更的点更有可能被随机跳转到达通过添加 LeaderRank

算法中的背景节点可以取得更符合区块链场景的排名结果

18

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 19: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

3 Nebulas Force

我们使星云原 (Nebulas Force NF) 来描述区块链系统及应的进化能星云原做为驱动区块

链系统及应发展的第推动包括三个星云链虚拟机 NVM(Nebulas Virtual Machine)区块链

系统中核协议的升级以及运在区块链系统之上的智能合约的升级

在星云链中我们将引 LLVM 来实现星云链虚拟机 NVM核协议和智能合约代码将会编译成

NVM 字节码通过 LLVM 即时编译 (Just-in-time compilation) 功能实现其动态编译和优化最终在沙

箱环境中执同时借助于 LLVM 的模块化架构开发者可以熟悉的编程语实现更性能和更安全的

智能合约给户带来更丰富的去中化应

对于星云链中的核协议升级星云链将核协议加到区块中通过对链上数据的追加实现核协议

的升级避免开发者和社区的分裂或分叉的可能性随着星云链社区的发展NF 及基础协议升级能将逐

步开放给社区由社区定义星云链的进化向并实现其升级标借助于 NF 这个核技术和开放性的理

念星云链将会具有持续的进化空间和限的进化可能例如NR 算法参数PoD 激励额共识算法

及新代币的产速度等系列参数都可以在星云链的发展过程中逐渐调整不需要部分客户端代码

的升级

智能合约通常被认为是永久性的不持升级星云链通过在智能合约底层存储持状态变量可跨合约

访问的设计完成智能合约的升级这种解决案对开发者友好使得开发者对漏洞能够更快的响应

和升级避免客事件给户带来巨的损失

31 NVM 星云链虚拟机

我们将引 LLVM [33] 做为 NVM 的核组件并使 LLVM Byte Code 做为 NVM 字节码NVM

字节码通过 LLVM JIT 完成动态编译和优化运在 NVM 沙盒环境中在这种架构设计下星云链的核

代码智能合约能直接享受到 LLVM 带来的性能和安全性的不断提升

LLVM 早期是 Low Level Virtual Machine 的缩写是系列度模块化的编译器和具链技术的集

合包括 GoogleApple 在内的公司都使它做为代码编译框架LLVM 提供了套中的中间表

(LLVM IR)和相应的编译基础设施并围绕这些设施提供了套全新的编译策略包括对 LLVM IR 的优

化LLVM IR 到不同硬件平台的代码成LLVM IR 到 LLVM Byte Code 的代码成以及 LLVM Byte

Code 在不同硬件平台上通过 LLVM JIT 直接执如图6所

C frontend

C++ frontend

Go frontend

LLVM

common

optimizer

ARM backend

x86 backend

Power PC backend

c

cpp

go

target specific

machine code

图 6 LLVM

19

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 20: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

我们依托 LLVM 构建 NVM如图7所先我们提供区块链底层 API 库然后我们为不同语

(如 SolidityJavaScript CC++Go 等)构建成 LLVM IR 的编译器前端最后利 LLVM 提供

的具链成 LLVM Byte Code最终LLVM Byte Code 通过 LLVM 的 JIT 引擎运在 NVM 提供

的安全的沙箱环境中

Nebulas Virtual Machine

LLVM

X86 Backend ARM Backend

LLVM Optimizer

Sandbox

Runtime

CC++OC hellipJavaScript HaskellSol

图 7 星云链虚拟机

NVM 是星云原的重要基新的协议代码或智能合约发布时NVM 中 LLVM 编译器模块完成新代

码的编译得到 LLVM 字节码然后发布到链上链上确认后新代码将由 LLVM JIT 完成编译和优化然

后进沙箱取代旧代码并被执过程如图8所

Smart Contract

Smart Contract

Smart Contract

Smart Contract

Frontend

NVM IRNVM IRNVM Bytecode

1 Compile

2 Deploy

Block NBlock N-1

Tx NVM BytecodeTx

3 Execute

LLVM Optimizer

NVM Sandbox

Execute Binary Code

图 8 星云链虚拟机运机制

借助于 LLVM(见6)NVM 还持开发者其熟悉的编程语开发智能合约和应如以太坊智

20

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 21: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

能合约所使的 Solidity更加灵活的 JavaScript甚是纯函数式语 Haskell除了这些通语外

NVM 还可以为不同领域和场景提供定制的级语如向融业的 DSL(领域专有语)这类

级语向业场景度定制使得它们更容易被形式化验证能进步提代码健壮性和安全性更

有利于星云链开发者开发出更丰富的智能合约及应

32 核协议的升级设计

我们先给出星云链中的区块结构然后讨论如何在该区块结构上实现核协议的升级问题

区块结构 星云链区块数据结构包含但不限于以下信息

bull Header区块头

ndash Height度

ndash ParentHash区块哈希值

ndash Ts时间戳

ndash Miner记账地址

ndash Dynasty区块所处共识朝代

ndash Epoch区块所处共识时代

ndash StateRoot状态根哈希值

ndash TxsRoot交易根哈希值

ndash ReceiptsRoot交易收据根哈希值

ndash TransNum交易数

bull Transactions交易数据 (包含多个交易)

ndash From交易发起地址

ndash To交易接收 (普通户或智能合约) 地址对于创建智能合约值为 0 地址

ndash Value转账额

ndash Data交易的 payload如果交易为创建智能合约则为智能合约字节码如果交易为智能合约

调包含调函数名称和参值

ndash Signature交易签名

ndash Gas燃料上限

ndash GasPrice燃料单价

ndash Nonce标识交易唯性

bull VotesPrepare 和 Commit 票数统计 (包含多个)在 PoD(见 sect5) 共识算法中

ndash From投票

ndash VoteHash投票区块哈希

ndash Hv投票区块所处度

21

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 22: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

ndash Hvs投票区块的某祖先度

ndash VoteType投票类型Prepare 或 Commit

ndash Signature投票签名

bull Protocol Code核协议代码 (个区块中只能有 0 或 1 个)

ndash Hash哈希值

ndash Code核协议的字节码

ndash ValidStartBlock协议效起始区块号

ndash Signature签名 (校验是否来开发者社区保留账号的签名)

ndash Version标识核协议版本号每次升级都需要递增防恶意记账回滚到的 Protocol

Code

ndash Nonce标识唯性

bull Nebulas Rank星云指数 (计算周期为周次部分区块没有)

ndash RankVersionNR 版本

ndash RankRootNR 排名哈希值

ndash RankRecordsNR 排名记录

Address账号地址标记

ScoreNR 值

Header Transactions Protocol Code

Height

ParentHash

Ts

Miner

StateRoot

TxsRoot

ReceiptsRoot

TransNum

From

To

Value

Data

Signature

Gas

Gas Price

Nonce

From

Dynasty

VoteHash

Hv

Hvs

Votes

Hash

Code

Signature

Version

NonceVoteType

SignatureEpoch

RankVersion

RankRecords

Nebulas Rank

Address

Score

RankRoot

图 9 区块结构

类似于其他加密数字货币系统户和区块链上的互动都是通过特定的交易进的户创建笔交易

的私钥签名后发到区块链的任何个节点中通过 P2P 络播到全节点在固定的出块时间

22

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 23: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

间隔内由 PoD 共识算法 (见 sect5) 指定的记账节点累计这段时间内的所有交易打包成标准格式的区块

同步到全所有节点经各节点独验证后加本地账本成为全球总账本的部分

以太坊中交易分为两种类型普通账户交易智能合约交易我们在星云链的区块中增加新的数据

类型核协议代码和星云指数核协议代码作为区块链数据的部分存储在链上星云链基础协议的

升级是通过链上数据的追加实现的星云指数根据 NR 排名算法计算出每个周期各个账户的 NR 值

存到链上便 NR 值的实时调和历史排名查询

核协议的升级 星云链客户端节点从当前最新区块的 Protocol Code 存储区可以取到编译后的虚拟机

字节码 (NVM 字节码)如果当前最新区块没有 Protocol Code 数据说明核协议没有变更就往前追

溯到最近区块的 Protocol Code区块链的核协议为都由 Protocol Code 确定包括验证算法打包规

则NR 算法奖励机制等乎绝部分的区块链为都可以由 Protocol Code 定义

如果核协议需要升级由星云链团队开发把代码在公开渠道让社区讨论和投票投票可以通过智

能合约或者论坛投票的形式进当绝部分社区成员都同意协议升级星云链开发组把最新代码打包成

Protocol Code 交易发布到全节点记账节点只要把其包含进区块就可以在指定区块度开始效

这种式的区块链协议升级对客户端来说是透明的需软硬分叉

为了保证核协议代码是经过授权发布的Protocol Code 的发布者是星云链核开发组保留地址该

地址在创世区块内部硬编码法变更所有记账节点都会验证 Protocol Code 签名签名不通过的视为

法数据

后续的改进措施是把 Protocol Code 的签名校验改成 M-of-N 的多签名形式这个本也可以通过

Protocol Code 的升级实现

33 智能合约的升级设计

331 图灵完备的智能合约编程语

智能合约是套以数字形式定义的承诺 (promises)包括合约参与可以在上执这些承诺的协议

在物理上智能合约的载体是计算机可识别并运的计算机代码特币脚本语是种命令式的基于

栈的编程语由于它是图灵完备的所以应上有定的局限性以太坊是全世界第个实现图灵完

备的智能合约的区块链系统编程语是 SoliditySerpent使得应开发者们可以效快速地开发各式

各样的应程序智能合约代码发布到区块链上之后需中介的参与在区块链上动执

星云链中的智能合约编程语在初期时完全兼容以太坊的 Solidity便开发者为以太坊开发的智能

合约应缝的迁移到星云链中来我们在 Solidity 语中增加些跟 Nebulas Rank 相关的指令集

便开发者获取任意户的 NR 值后续我们基于 NVM 推出各种编程语的持使得开发者可以

喜欢的级语编程例如 JavaPythonGoJavaScriptScala 等甚定制的应在特定领域的

级语

23

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 24: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

332 合约可升级

前以太坊智能合约的设计是代码经部署不可变化代码逻辑从部署的时刻起便永远不再具有升

级的能智能合约如果作为协议来看不可变化是其要求的代表着种协议的约定运为都是确

定性的但是随着智能合约开始获得越来越多的使其流程和代码也变得越来越复杂们发现就像

现实世界的合同样如果没有认真审核的话在设计和编码过程中难以避免失误的产旦被

客找到漏洞损失往往是巨的2016 年 6 The DAO 攻击事件由于个代码缺陷导致以太坊

户损失了共计 6000 万美元的损失最近 Parity 钱包的漏洞导致 15 万个以太币的流失价值 3000 万美

元特币由于其设计上的图灵完备性删减了许多脚本指令所以其安全性是极的

虽然前有各种智能合约编程的最佳实践以及更严格的审核流程甚出现形式化验证具通过数

学证明的式验证智能合约的确定性但是既然是代码就不可能没有漏洞回顾我们现在的中化的互

联世界各种互联服务都是可以升级的弥补开发过程中发的各种漏洞任何个完美的应系统

都是演化不是设计出来的我们认为解决智能合约安全性的根本问题需要有个好的智能合约可升

级设计案

以太坊上的智能合约可升级设计有些解决案体上分为两类类是对外公开代理合约 (Proxy

Contract)代理合约的代码常简单仅仅把请求转发给后的真正的功能合约当需要升级合约时把

代理合约的内部功能合约指针指向新的合约即可第类是把合约的代码和存储分离存储合约负责提供

法供外部合约读写内部状态代码合约做真正的业务逻辑升级时只需要部署新的代码合约不丢失

所有的状态这两类案都有其局限性不能解决所有问题合约的代码和存储分离在设计上增加了很多

复杂度有时候甚不可代理合约虽然能够指向新合约但是合约的状态数据并不能迁移有些合

约在开始开发时没有良好的设计没有为以后的升级留下接

我们设计种简洁的智能合约升级案在语层上我们持个合约的状态变量供另外个合约

直接读写(符合安全约束)这是个例假如有个 Token 合约代码如表10所

合约部署时balances 变量关键字 shared 标识编译成字节码运时虚拟机会为该变量单独设计

存储区域不关键字 shared 声明的变量都不可以被其它合约直接访问

假如原代码的 transfer 函数需要修改个 bug对 _value 做检查部署新的智能合约代码如表11所

新的合约部署以后的合约可以选择 selfdestruct不能再被访问但是 shared 变量依然被永久保留

新的合约可以完全继承合约的 balances 资产全部的状态都不丢失不需要做额外的迁移作但是在

开发智能合约时对关键的状态变量声明为 shared 是必须的编译器会对变量的存储区域做特殊处理保

证其可以被其它授权的合约访问

为了保证安全升级合约和合约必须是相同的 creator否则运时会抛异常

这种设计存在道德上的问题因为合约的内容条款旦拟订其实是不应该被修改的少修改必须征

询合约受众的同意我们计划引投票机制以批准智能合约的升级不是默默的被合约创建者修改

通过这种可升级案The DAO 或者 Parity 类似的漏洞攻击事件可以更快的被修复不是通过硬

分叉的式并且修复以后所有户的资产都不需要迁移仍然继续使

24

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 25: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 10 原合约代码

25

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 26: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

[baseContractAddress=0x5d65d971895edc438f465c17db6992698a52318d]

baseContractAddress 是合约的地址

contract Token

mapping (address =gt uint256) balances shared

function transfer(address _to uint256 _value) returns (bool success)

if (balances[msgsender] gt= _value ampamp _value gt 0)

balances[msgsender] -= _value

balances[_to] += _value

return true

else

return false

function balanceOf(address _owner) constant returns (uint256 balance)

return balances[_owner]

图 11 新合约代码

26

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 27: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

4 DIP 开发者激励协议

41 设计标

为了更好地建区块链应的态环境在星云链中我们提出向智能合约开发者的 DIP(Developer

Incentive Protocol开发者激励协议)通过星云币的奖励来感谢为态助的优秀智能合约开发者

42 DIP 奖励分配算法

我们认为个智能合约是否优秀取决于有多少户愿意使它且有更多的价值账户使的智能

合约更加优秀作为账户普适价值尺度的 NR 正好可以应在价值账户的评估中DIP 的设计结合

NR 和常的周活跃户的概念使周活跃户的价值尺度总和来衡量智能合约的价值尺度然后使

该价值尺度来评估开发者的贡献度

DIP 按周期进次和 Nebulas Rank 计算周期致对于智能合约 C假设本周活跃账户地址集合

为 WAA(Weekly Active Addresses)其中根据 sect23的 NR 排名(取 Top X值为 1-X)计算周活跃地址

的 NR 之和作为合约 C 的贡献度 SCS(Smart Contract Score)如公式9

SCS(C) =sum

addrisinWAA

(maxX + 1minusNR(addr) 0) (9)

按照每周贡献值 SCS 从到低排序得到智能合约贡献度排名 SCR(Smart Contract Rank)取 Top N

的智能合约它们对应的开发者将按例分 M 个星云币作为奖励为了避免恶意刷榜DIP 的分配曲线

被设计得较为平均如图12所但依旧保证 Rank 1 的收益为 Rank N 收益的倍以贡献度的区

别例约束见公式10

Coin(C) = kln(N + 1minus SCR(C)) + b (10)

st kln(N) + b = 2b

Nsumx=1

(kln(x) + b) = M

Rank

Coin

N

X2X

图 12 DIP 奖励分配曲线

27

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 28: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

DIP 的奖励将会由各个节点单独计算发放假设星云链平均每 S 秒出个区块那么每隔 2473600S

个区块所有节点将会计算次 DIP 的奖励并且发给对应的智能合约的提币地址中

为了励星云链态智能合约的多样性让更多新开发者的优秀成果也能获得激励DIP 规定每个智

能合约最多可以接受 K 次奖励DIP 将会根据排名每次选出还可以接受奖励的 Top N 智能合约给予激励

助推区块链应态发展

43 实验结果

我们收集了以太坊上从 2017 年 5 份交易数据计算了第周的 DIP 排名如表2所

表 2 2017 年 5 第周1DIP 排名结果 Top 10

Contract Address Score Description2

0xa74476443119a942de498590fe1f2454d7d4ac0d 2644563630 GolemToken

0x49edf201c1e139282643d5e7c6fb0c7219ad1db7 2079001810 TokenCard-ICO

0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5 1296257760 REP-Augur-OLD

0x6810e776880c02933d47db1b9fc05908e5386b96 1083244890 Gnosis-TokenContract

0x6090a6e47849629b7245dfa1ca21d94cd15878ef 544293410 ENS-Registrar

0x607f4c5bb672230e8672085532f7e901544a7375 485268080 RLC

0x8d12a197cb00d4747a1fe03395095ce2a5cc6819 464984120 etherdelta_2

0xf7b098298f7c69fc14610bf71d5e02c60792894c 437461580 GUPToken

0xaaaf91d9b90df800df4f55c205fd6989c977e73a 420266270 TokenCardContract

0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009 414273140 singularDTVToken

1 区块范围 [3629091 3665815]2 来 etherscanio

可见DIP 排名靠前的合约较为知名在计算周期内也更为活跃符合我们激励态建设者的初衷

44 作弊分析

智能合约只能被动调不能主动和合约账户建交易所以个作弊者想要让他的智能合约排名上

升就必须要找到够多的 NR 排名账户来调他的合约

先作弊者想要零成本提升 DIP 排名将不可能实现假设作弊者想要提合约 C 的排名并为此伪

造了量账户但由于在公式9中计算 SCS 时只有 NR 排名中 Top X 的调贡献分于 0新伪造出来

的账户 NR 排名将会在 Top X 之外即使调合约 C 也对 DIP 的排名没有任何影响

其次如果作弊者愿意为合约的 DIP 排名上升付出定的成本那么他有两种式可以选择第种

花钱伪造 NR 的账户来调合约 C提升合约 C 的排名要伪造 NR 的账户在 sect24已有分析

每提升个账户都需要投笔资来伪造该账户特殊的拓扑结构并且由于 NR 的周期性更新长期

28

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 29: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

维持 NR 的成本将会巨第种作弊者找到量 NR 账户说服或者贿赂他们来调合约 C这

种链下为难以规模化作弊者花了很精找到的 NR 账户也只会占 Top X 中的部分对真正优

秀的合约影响不

29

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 30: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

5 PoD 贡献度证明共识算法

51 设计标

共识算法作为区块链的基之快速和不可逆是我们重点关注的标除此之外为了更好地建设公

链态我们认为公平性同样重要如果资本可以轻松占据公链中区块共识的话语权那么会有很多公

链上的开发者和户的利益端受损个不能保障公链建设者利益的态很难沉淀出价值深度和星

云链设计原则相违背所以我们在设计共识算法时在优先保证快速和不可逆的情况下将尽可能追求公

平性维护公链建设者的利益

52 常共识算法的缺陷

我们试图在较为常的共识算法中找到符合我们设计标的选择但是这些算法和我们的标多少都有

些差距

PoW (Proof of Work) 作量证明共识算法为零和博弈采竞争性哈希计算来确定记账导致了整

个态每次出块时都有量电能在竞争中被端消耗挖矿成本且速度受限如果把公链参与者作

为整体来看随着参与挖矿的节点增加每个节点获得记账权的概率将会减那么 PoW 协议下态维持

平稳出块的成本将会持续升不断增加挖矿难度的 Bitcoin 早晚需要临矿机收益不敷出的情形

Ethereum 则早已在考虑使新的 PoS 共识算法 Casper [56] 来逐步取代现阶段的 PoW 共识 [11]可见

从挖矿速度和经济成本度PoW 都不利于公链态的长期快速发展和我们ldquo快速rdquo的标不相符

PoS (Proof of Stake) 股权证明共识算法试图采资产的多寡来取代算的作按照币龄或者押数

额来分配获得记账权的概率现阶段 Peercoin [29] 和 Ethereum 的 Casper 协议都采了 PoS 共识算法

这种算法解决了 PoW 能耗的弊端但很直观地放了资本对记账权概率分配的影响相较于 PoW在

PoS 下资本更容易占据态的话语权形成集团垄断可能会对态的建设者的利益造成损害不利

于公链态的价值沉淀同样和我们ldquo公平性rdquo的标不相符

PoI (Proof of Importance) 重要度证明共识算法最早由 Nem 提出 [39]不同于 PoSPoI 中引了账

户重要程度的概念使账户重要性评分来分配记账权的概率这种算法解决了 PoW 的能耗弊端减缓

了 PoS 的资本垄断危机但暴露了 nothing-at-stake 的问题作弊者逆转个区块的成本被降低和

我们ldquo不可逆rdquo的标不相符

综上鉴于常共识算法和我们标存在差距我们提出了基于账户贡献度的 PoD (Proof of Devotion)

算法将评估账户综合影响的 PoI 和具有严格经济惩罚的 PoS 相融合利 PoS 强化 PoI 的不可逆性

使 PoI 反向遏制了 PoS 的垄断性以此为态由快速发展助

53 PoD 算法设计

531 新区块产

类似 PoI 共识算法选取重要性的账户PoD 将选取态中贡献度较的账户不同之处在于PoD

赋予选取出来的账户平等概率的记账权来参与产新区块 (block)防概率倾斜衍垄断

30

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 31: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

在选择贡献度较的账户时我们使了星云链原的 NR 普适价值尺度评估在 NR 的算法设计中

着重考虑了账户的流动性和传播性(见 sect21)我们认为满这些性质的账户对态建设贡献度较所以

在 PoD 中将选取 NR 排名 Top N 的账户这些账户愿缴纳定数量的 Nas 作为押后则有资格成为

新区块的验证者 (validator)参与记账

在给定验证者集合 (validators set) 之后PoD 算法通过伪随机数来决定验证者集合中谁是新的区块的

提议者 (proposer)提议者产新区块验证者集合不是固定不变的有资格的账户可以选择加或者退

出验证者集合随着周期性 NR 的变化有资格的账户也会不样所以我们在 PoD 设计了验证者集合

动态变化机制来实现验证者集合的更迭

532 验证者集合更迭

验证者集合的更迭就如朝代变更样于是我们将验证者集合按照朝代 (dynasty) 做划分个朝代内

验证者集合不会发变化个朝代不能更迭地过快少要保持段时间不做变更因此我们将每 X 个

区块定义为个 Epoch在同个 Epoch 中朝代不会发变化所以朝代的变更只会发在 Epoch 交接

时在此时将会考察上个 Epoch 的第个区块如果此区块到达了 finality 状态那么当前 Epoch 进

下个朝代 D1否则延续上个朝代 D0 不变如图13所

H H+1

non finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D0

hellip

G199G100 G101

H H+1

finality

H+99

Epoch X0 D0

hellip

G99G G1

H+100 H+101 H+199

Epoch X1 D1

hellip

G199G100 G101

图 13 验证者朝代更迭(假设 X=100)

由于络延迟各个节点可能在朝代更迭时看到的区块 G 是否 finality 的状态不致所以参考

Casper 的动态验证集策略要求每个朝代的共识过程将由当前朝代和上个朝代的验证者集合共同完

成因此在任意个朝代有资格的账户只能申请加或者退出 D+2 朝代的验证者集合当朝代变更到

D+2 时才可加新区块的共识过程

533 共识过程

新的区块被提出后当前朝代验证者集合中所有将会参与轮 BFT (Byzantine Fault Tolerant) 式

的投票来确定此区块的合法性在投票最开始每个参与此区块共识的验证者将会被从押中收取 2x

(x 为激励奖例) 的保证然后进两阶段的投票过程

31

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 32: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

bull 第阶段所有验证者需要对新区块投 Prepare 票投完 Prepare 票的验证者将获得 15x 的奖励

如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Prepare 票那么

该区块进投票的第阶段此处需要说明新区块的提议者将被默认对新区块投 Prepare 票

bull 第阶段所有验证者需要对新区块投 Commit 票投完 Commit 票的验证者可以再获得 15x 的

奖励如果在当前朝代和上个朝代中都有超过 23 的押总额的验证者对新区块投了 Commit 票

那么该区块到达 finality 状态

为了加速整个态向前延展如果区块 b 的 Prepare 和 Commit 票的时间戳和区块 b 的时间戳相差

超过 T那么这些票将被视为过期直接忽略

534 分叉选择

PoD 算法以每个度上区块的得分来选择权威链总是选择得分最的区块加权威链在度 h 的

区块 b 的得分如下

Score(b h) =sum

(bprimehprime)isinchildren(b)

Score(bprime hprime) +sum

committed deposit in b (11)

即为该区块及其所有后代区块收到的 commit 票对应的押总和如图14所

B1

A1

G

B2

A2

B3

A3

B4

H H+1 H+2 H+3 H+4

committed

F1

committed

F2

committed

N1

committed

N2

committed

N3

committed

F3

committed

N4

A4

committed

F4

Score(b1 H+1) = N1+N2+N3+N4

Score(A1 H+1) = F1+F2+F3+F4

gt

图 14 分叉选择

535 投票规则

为了避免共识过程被恶意破坏导致共识过程没法完成阻碍态发展PoD 参考 Casper 的最惩罚

规则 [36] 来约束验证者的共识活动

假设共识过程中的 Prepare 和 Commit 票结构如下

bull Prepare(H v vs)其中 H 为当前区块 hashv 表当前区块度vs 表 v 的某个祖先区块度

bull Commit(H v)其中 H 为当前区块 hashv 表当前区块度

PoD 算法为整个投票过程制定了如下 4 条基本规则

32

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 33: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

bull 单个区块的两阶段共识过程存在严格的先后顺序只有在第阶段 Prepare(H v vs) 票总权值达到

23 后验证者们才可以投出第阶段的 Commit(H v) 票

bull 多区块间不强制个区块共识结束后才能开始后个区块的共识允许交织共识 (interwoven consen-

sus)但是不能完全没有秩序只有度 vs 完成了第阶段过程拥有 23 的 Prepare(Hanc vs vsrsquo)

后才可以基于 vs 对其后代区块投 Prepare(H v vs) 票保证交织稳步向前

bull 为了避免有节点利交织共识恶意跨多区块投票要求基于度 u 投出了 Prepare(Hw u) 票之后

对于度在跨度 u 和 w 之间的所有区块不能再投出 Commit(H v) 票保证共识过程的效有序

bull 为了制节点同笔押在多个分上同时下注导致 nothing at stake 的问题要求在个度

投出 Prepare(H1 v vs1) 票之后不能再投出不样的 Prepare(H2 v vs2) 票

违反上述规则的验证者旦被举报核实将会被罚掉所有押举报者们将会共享罚的 4 作为奖励

罚的剩余部分将会被销毁

54 PoD 经济分析

541 激励分析

参与 PoD 算法的验证者在每个合法区块上可以获得 1x 的星云币奖励如果络不畅或者有作

弊导致 Prepare 阶段没有办法完成进 Commit 阶段那么所有验证者将损失 05x因此成为验证者的价

值节点在保持络畅通不参与作弊的情况下将共享量记账收益

542 作弊分析

双重付攻击 (double spend)

假设商户 merchant 等到新区块到达 finality 状态就确认交易发货那么 fraud 要在 PoD 共识算法下

完成双重付攻击实现零成本购物要付出的最代价如下

先fraud 需要提的 Nebulas Rank 到 Top N然后缴定数的 NaS 作为押成为验证者并

申请参与 D+2 朝代区块的验证

然后fraud 需要被伪随机算法选中为新区块的提议者此时 fraud 提出两个度相同的新区块个

哈希值为 hash1 包含 fraud 向 merchant 的转账交易另个哈希值为 hash2 包含 fraud 向 fraud 的

转账交易

最后为了让 hash1 和 hash2 区块都到达 finality如图15所fraud 少需要花费所有押的 13

来贿赂 13 的验证者让他们给两个区块都投 Commit 票

所以要完成次成功的双重付攻击fraud 需要花费定的精和财来提升的 Nebulas Rank

排名(见 sect24抵抗操纵)然后等到幸运地被选为提议者时少花费总押的 13 来让两个块同时到达

finality 状态

33

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 34: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

23 committed

hash1

23 commited

hash2

merchant

13

rule breakers

图 15 双重付经济惩罚

51 攻击 (51 attack)

在 PoW 中要发起 51 攻击需要 51 的算在 PoS 中则需要 51 的押在 PoD 中则需要

验证者集合中 51 的账户这意味着拥有够多的声望户进 Nebulas Rank 的 Top N并且需要

付对应的押因此在 PoD 中 51 攻击将更为困难

短程攻击 (short-range attack)

PoD 中的每个度上的区块都有共识有效期如果某个度距离最新度超过 100 时该度的所有

区块在共识过程中将被视为过期那么这些区块上的所有新的共识活动将会被直接忽略因此要在 PoD 中

完成长程攻击 (long-range attack) 乎不可能但是在有效期内依旧存在发起短程攻击的可能性

短程攻击者 Attacker 试图在度 H+1 的区块还没有过期的情况下伪造 A 链来替代 B 链成为权威

链Attacker 需要让区块 A1 的得分 B1 更由于多投会被严惩所以 Attacker 将不可避免地要贿赂

验证者否则法完成短程攻击为了展现 PoD 共识算法的安全性下分别分析使不同数量的区块失效

时Attacker 需要付出的代价

如果 Attacker 想要使 B1 失效最代价的情况如图16就相当次双重付攻击Attacker 幸运地

成为了 H+1 度的区块提议者那么少需要贿赂朝代 D0 中 13 的验证者多投使 A1 达到 finality最

代价为所有押的 13

B1

A1

G

H H+1

D0

D0

D0

finality 23 committed

B1

23 commited

A1

13

D0 slashed

D0

图 16 短程攻击使个区块失效的情形

如果 Attacker 想要使 B1-B2 失效假设 B1 和 B2 都已到达 finality块中交易都已效为了让这些

交易失效这考虑两种情况第种如图17中 (a) 所度 H+1 和 H+2 在同个 Epoch 中朝代相

34

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 35: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

同那么 Attacker 先需要贿赂 D0 中 13 的验证者使 A1 达到 finality此时这 13 的验证者将会被惩

罚押被罚完在 A2 的验证中整体押总和只有 A1 中的 23此时 Attacker 想要让 A2 到达和 B2

同价值的 committ 票需要贿赂剩下所有没有作弊的验证者合起来少需要损失总押的 33即使如

此也不能保证 A1 得分 B1 攻击失败风险第种情况如图17中 (b) 所度 H+1 和 H+2 正

好在不同的 Epoch 中且朝代不相同那么此时 Attacker 需要贿赂 D0 中的 13 来让 A1 到达 finality

然后贿赂 D1 中的 13 来让 A2 达到 finality完成次这样的攻击少需要损失总押的 23综上想

要发起短程攻击导致两个 finality 区块失效少需要花费总押 23 的代价

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

D0

finality

23 committed

(a) (b)

13 D0 slashed 23 D0 slashed 13 D0 slashed 13 D1 slashed

图 17 短程攻击使两个区块失效的情形

如果 Attacker 想要使 B1-B3 失效如图18所Attacker 先需要贿赂 D0 中 13 的完成 A1 的

finality然后贿赂 D1 中 13 的完成 A2 的 finality最后需要贿赂 D1 中剩下 23 中的所有来完成

A3 的 finality综上少要损失总押的 43要完成这些攻击准备将会分困难且即使有幸做到了

也不定能保证 A1 的得分 B1 攻击也可能会失败

B1

A1

G

B2

A2

H H+1 H+2

D0

D0

finality

23 committed

D1

finality

23 committed

D0

finality

23 committed

D1

finality

23 committed

B3

A3

H+3

D1

finality

23 committed

D1

finality

23 committed

13 D0 slashed 13 D1 slashed 23 D1 slashed

图 18 短程攻击使三个区块失效的情形

如果 Attacker 想要使 B1-BN 失效其中 N 受到区块共识有效期的限制不会很由于 N = 3 时

35

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 36: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

当前朝代所有验证者的押就会被全部罚完所以 N gt= 4 时将没法完成攻击让 B1 得分 A1 使

B1-BN 失效发起这样的攻击没有任何意义

36

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 37: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

6 区块链搜索引擎

61 简介

随着越来越多的智能合约被开发者部署户对海量的智能合约搜索的需求也变得突出起来智能

合约仅仅是代码并不包含任何功能描述很难利搜索引擎技术为智能合约建索引我们将多种

段为智能合约建合适的索引

bull 爬取智能合约相关页资料为其和区块链智能合约建映射关系

bull 励开发者上传验证过的智能合约源代码分析其代码功能和语义为源代码建索引提供相似合

约搜索未提供源代码的智能合约进反编译得到其源代码

bull 为智能合约建规范任何符合此规范的智能合约都能被检索并被户搜索到励开发者在创建

智能合约时提供合约信息描述

contract SearchableContract

string public language

string public author

string public name

string public title

string public description

string public tags

62 搜索基础架构

我们认为搜索服务为了提供最佳的户体验中化的架构更为适合星云链开发组将实现个搜索

服务实时检索所有智能合约做多语的分词建全索引最终提供个友好的 Web 界给户使

NR 排名算法的公正性和每个节点的可验证性保证了中化搜索服务的公正性所有搜索后台代码都

将开源给社区第三开发者也可据此创建独的搜索服务搜索服务架构如图19所

bull Crawler 区块链搜索引擎爬数据源分为两种种从区块链上收集区块信息和智能合约代码等信息

种从公开址上爬取智能合约相关资料包括介绍Dapp 户评论新闻资讯等

bull Extractor 包括 Text Extractor Block Extractor 和 Code Extractor分别提供本信息区块信息

和智能合约代码提取服务

bull Analyzer 包括 Text Analyzer Tx Analyzer Contract Analyzer分别为本信息区块交易信息和

智能合约分析器其中智能合约分析器包括合约反编译源代码功能语义分析页解析等

37

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 38: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

Crawler

Storage (Data amp Model)

Offline Services

Text Analyzer

Nebulas Rank Calculator

Tx Analyzer Contract Analyzer

Text Extractor Block Extractor

Ranking Model Trainer

Code Extractor

ElasticSearch Cluster

Query Analyzer

Word Breaker

Spell Checker

Filter

Query

Understanding

Scorer

Standard

Scorer

Ranking ModelScorer

Indexer

Text Indexer

Tx Indexer

Contract

Indexer

Code Indexer

Searcher

Code

Searcher

API

图 19 搜索服务架构

bull Nebulas Rank Calculator 星云指数计算服务离线计算每个合约账户和合约账户的星云指数

bull Ranking Model Trainer 排序模型训练考虑到交易 Graph排序规则考虑了多个因素匹配字段

本相关度合约的 NR Rank 值合约的交易数量频度和深度与合约发交易的户 NR Rank

值合约安全性等等我们根据户的实际使情况机器学习算法 (GBDT神经络都是

候选) 训练排序打分模型根据户的反馈不断优化训练后的模型被搜索服务的 Scorer 使

bull Query Analyzer 关键词分析服务包括多语分词器 Word Breaker拼写检查器 Spell Checker 等

bull Indexer 从 Analyzer 中建合适的索引持全量和增量索引

bull Scorer 分为两个 levelLevel-1 Standard Scorer 从 ElasticSearch 中召回候选结果集标是尽可能

把潜在的候选结果在 ElasticSearch 集群中通过快速有效的排序打分召回Level-1 召回的结果数量

有限控制在千以内Level-2 Ranking Model Scorer 使 Offline Rank Model计算每个 Level-1

结果候选集的得分重新排序这个结果较为精确可以直接给户使

bull Searcher 负责和 ElasticSearch 集群通信以及对搜索结果包装返回给搜索前端

bull API 对外提供完善的搜索 API 服务

bull ElasticSearch Cluster ES 服务器集群星云链团队考虑使开源搜索引擎 ElasticSearch 作为其全

索引持

38

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 39: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

63 趋势榜单

星云链将结合星云指数构建趋势榜单提供给户可视化的区块链多维度价值

bull 合约账户 Nebulas Rank 榜单 呈现每 NR 榜单以及 NR 快速提升和快速下降榜单并且可视

化呈现各个账户的 R 变化趋势以及整个络健康程度变化趋势

bull 合约账户 Nebulas Rank 榜单 根据合约账户 NR 值计算合约账户的 NR 榜单以及快速提升和

快速下降榜单各个合约的变化趋势以及整个络智能合约数量和使频次的趋势图除此之外

我们还将呈现不同领域的智能合约榜单如 Token 合约榜单预测市场合约榜单等等以展更多

维度的信息

bull 智能合约开发者榜单 根据合约账户榜单计算合约开发者的贡献度榜单以及贡献度快速提升榜单

展优秀合约开发者及其应

64 关键词搜索

户提供关键词描述智能合约的标题作者功能等本信息在海量的智能合约中找到匹配的合约

对于本搜索前有常成熟的算法和技术基于然语处理和倒排索引技术我们可以在海量的智

能合约索引库效的检索和排序关键的技术如下

1 向主题的分布式爬技术

2 多语分词技术对于西词汇分词较为简单对于中分词有多种算法可进分词正向最

匹配逆向最匹配最短路径分词统计分词等

3 查询词纠错语义理解

4 倒排索引分布式搜索架构

5 排序算法给搜索结果排序

其中排序算法将结合 Nebulas Rank 来设计我们把区块链世界中户之间的转账类互联世界的

页引关系构建出区块链交易图然后利23中提出的 NR 排名算法计算合约户的 NR 排名然

后结合42中介绍的合约排名算法计算合约的排名结果最后应于搜索结果排序

65 相似智能合约搜索

开发者和某些户可能有根据合约代码段搜索具有相似功能的智能合约的需求不同于普通的关

键词搜索代码相似度有其特殊性我们需要有定的算法通过数值或者百分的形式对代码相似度进

度量从提供相似智能合约搜索的功能

前学术界对代码相似度算法主要有字符串编辑距离Token 序列相似度抽象语法树相似度和程序

依赖图相似度四个流派他们分别从不同维度描述了代码本结构和语法上的相似度我们结合主流 4

个流派的思路提出了星云链合约代码相似度算法的 12 种特征如 Skeleton TreeType Signature 和

Libaray Calls 等详情见附录B

相似智能合约搜索结果和关键词搜索结果样使同样的合约排名算法排序给出最终结果

39

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 40: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

7 基础服务及开发具

71 域名服务

在区块链的世界中应都以账号为中由于区块链的匿名性账号地址是常长的意义的字符串

并不是户友好的户可能容易出错意外地投资导致丢失或者与错误对象互动如果户能够

使容易记忆的域名将是巨的优势星云链团队将会在链上智能合约实现个类似 DNS 的域名系

统称为 NNS(Nebulas Name Service)保证其由免费开放任何第三开发者可以独地或者基

于 NNS 实现的域名解析服务

例如alice 为她的账号地址 0xdf4d22611412132d3e9bd322f82e2940674ec1bc03b20e40 申请了域名

alicennsBob 如果想转账给 alice在收款信息中只要填写 alicenns 即可钱包会通过 NNS 服务把

资转账到正确的收款地址

NNS 的申请规则如下

bull 级域名保留不可申请例如 nnscomorgedu 等等户只能申请级域名

bull NNS 服务开放后户可以查询域名是否已经被占如果未被占可以通过智能合约提出竞价

竞价是公开的任何都可以查询其他的竞价并且随时更新的竞价

bull 竞价期结束以后价者得此域名智能合约会锁定户的竞价资域名有效期为年年后

户由决定是否续约同意续约后有效期再延长年如果不续约竞价资动退回户账户

域名数据清空重新变为可

bull 户可以随时放弃域名所有权竞价资动退回户账户域名数据清空重新变为可

bull 户可以偿或者有偿转让域名所有权域名之间的交易星云链不做任何预

72 闪电络

当前所有的公有链络都临系统的扩展性问题例如特币络每秒只能处理 7 个交易以太坊每秒

处理 15 个交易引类 PoS 的共识算法可以避免挖矿计算加快共识速度但是对现实世界的海

量微付场景公有链仍然临极的挑战闪电络 [48] 于 2015 年 2 被提出设计思路是为交易双

建个微付通道络双量的付都可以在链外直接多次频双向地通过轧差式实现瞬间

确认当交易结果需要结算时再把最终结果提交到区块链确认理论上可以实现每秒百万笔的转账双

若直接的点对点付通道只要络中存在条连通双的由多个付通道构成的付路径也可以

利这条付路径实现资在双之间的可靠转移闪电络在特币和以太坊上都已经有概念性的验证

星云链把闪电络当做区块链的基础设施予以实现并且提供够的灵活性设计任何第三开发者

都可以在星云链上利闪电络的基础服务做频交易场景的应开发星云链也将发布世界款持

闪电络的钱包 App

40

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 41: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

73 开发者具

完善的开发者具对于区块链应开发者来说是常重要的前各种公有区块链的开发者具链都

不够完善对于多数开发者是很的阻碍星云链开发组将提供丰富的开发者具包括独的智能合

约开发 IDE区块浏览器各种流 IDE 的插件持 (包括 Eclipse JetBrains Visual Studio Sublime

Text VIM Atom 等)调试器模拟器智能合约形式化验证具各种级语的后台 SDK移动端

SDK 等

41

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 42: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

8 星云链代币 NAS

星云链络包含的内置代币星云币 (NAS)星云币在络中体现两个作第星云币作为络

中的原代币提供户之间的资产流动性也作为 PoD 记账和 DIP 开发者激励计划的奖励代币第

作为运智能合约的运算费收取星云币的最单位是 10minus18NAS

星云币最初在以太坊平台上以 ERC20 代币的式发售代币总量最值为 X = 108 枚发模式如

1 社区建设

在星云链发起团队主导下将会有 80X 的代币于星云社区建设包括星云社社区区块链应

(DApp)态孵化和激励开发者社区建设商业合作和产业合作市场营销推学术研究教育

投资法律法规社区及机构投资其中向社区影响投资售卖 5X还有 5X 作为星云社

区发展基剩下 70X 待做预留

2 创始 amp 开发团队激励

星云链的创始 amp 开发团队将在星云链的发展过程中从项组织架构技术研发态运营上持续做

出物资源的贡献在代币分配机制上预留出 20X 的部分作为团队激励这部分星云币初

始为锁定状态星云币次向社区售卖完成年后开始解除锁定分三年逐步分发创始 amp 开

发团队

星云链络正式上线后所有持有以太坊 ERC20 NAS 币的户可以根据凭证领取星云链络的等量

的星云币同时以太坊的 ERC20 NAS 币被回收随着星云链络的演化星云币增长如下

1 记账激励 每年奖励给记账的星云币数量为 3X

2 DIP 激励 每年奖励给优秀智能合约开发者的星云币数量为 1X

42

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 43: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

9 总结

我们认为

区块链从种度抽象的度来看是种去中化的式对于数据的确权代币本是对于确权价值

的载体互联解决了数据的通讯问题区块链则在互联上层进步解决了数据的确权问题区块链

前所未有第次让家的数据真正变成的数据不再被 BAT 等公司任意分析并使

以公有链为代表的区块链本质精神是社群 + 代币 + 具社群本质上是下上秉承的是开放

开源共享盈利的理念和现有上下的商业态有着根本的不同代币即是对于确权价值的载体

未来会有更多的应场景远是仅仅向虚拟货币电现的属性具仅仅是对于区块链应场

景具体技术实施如缺少前两者的结合其单独来看并不能完全体现区块链系统的魅所在

以公有链为代表的区块链体系才是区块链的未来因为其本所具有的ldquo信任rdquoldquo特权rdquo的基本特性

才是区块链系统真正的价值所在恰恰相反作为联盟链企业链多具有ldquo基于信任rdquo和ldquo基于特权rdquo的属性

不能突破既有的范式属于改良式创新公有链系统颠覆了既有的协作关系属于颠覆式创新是区块

链价值最化的真正体现

我们致于

作为全球个区块链搜索引擎星云链致于发掘区块链世界价值新维度打造基于价值尺度的区块链

操作系统搜索引擎及其他相关扩展应

基于此我们提出 Nebulas Rank 星云指数来构建区块链世界的价值尺度设计 Nebulas Force 星云原

来赋予区块链我进化的能推出 Developer Incentive Protocol 开发者激励计划和 Proof of Devotion

贡献度共识证明来激励区块链的价值升级打造 Nebulas Search Engine 区块链搜索引擎来帮助户发现

区块链上沉淀的多维度价值

我们坚信

正在发的科技浪潮会带领们抵达更为由平等美好的活区块链作为其中重要的技术之

会愈来愈散发出其特有的光彩和能量能参与并投其中是我们最的快乐和成就

类似互联对于世界的改变区块链也即将对其户应临界值爆发的阶段区块链技术会是下

代ldquo智能络rdquo的基础协议整体户规模会在 5-10 年内达到或超过 10 亿未来的 5 年内会临重的机

遇与挑战

在未来的巨态前在当下不要问区块链能为你做什么是要问你能为区块链做什么因为

区块链本就是命体区块链本就是经济体在区块链技术探索的道路上与诸君共勉

43

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 44: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

参考献

[1] Luke Anderson et al ldquoNew kids on the block an analysis of modern blockchainsrdquo In (2016)

arXiv 160606530 url httparxivorgabs160606530

[2] Annika Baumann Benjamin Fabian and Matthias Lischke ldquoExploring the Bitcoin net-

workrdquo In WEBIST 2014 - Proceedings of the 10th International Conference on Web In-

formation Systems and Technologies 1 (2014) pp 369ndash374 issn 9789897580239 (ISBN)

doi 1052200004937303690374 url httpswwwengineeringvillagecomblog

documenturlmid=cpx7B5C_7D9ce5505146fd48dcbdM5570101781631257B5Camp

7Ddatabase=cpx

[3] Morten L Bech and Enghin Atalay ldquoThe topology of the Federal Funds marketsrdquo In

Economic Policy Review 142 (2008)

[4] Phillip Bonacich ldquoFactoring and weighting approaches to status scores and clique identifi-

cationrdquo In Journal of Mathematical Sociology 21 (1972) pp 113ndash120

[5] Stephen P Borgatti ldquoCentrality and network flowrdquo In Social Networks 271 (2005) pp 55ndash

71 issn 03788733 doi 101016jsocnet200411008

[6] Stephen P Borgatti and Martin G Everett ldquoA Graph-theoretic perspective on centralityrdquo

In Social Networks 284 (2006) pp 466ndash484 issn 03788733 doi 101016jsocnet

200511005

[7] Michael Boss Martin Summer and Stefan Thurner ldquoContagion Flow Through Bank-

ing Networksrdquo In Lecture Notes in Computer Science 3038 (2004) pp 1070ndash1077 issn

03029743 doi 101016jjfi200806003 arXiv 0403167v1 [arXivcond-mat]

[8] Michael Boss et al ldquoThe Network Topology of the Interbank Marketrdquo In Quantitative

Finance 46 (2004) pp 677ndash684 issn 1469-7688 doi 10 1080 14697680400020325

arXiv 0309582 [cond-mat] url httparxivorgabscond-mat0309582

[9] Sergey Brin and Lawrence Page ldquoReprint of The anatomy of a large-scale hypertextual

web search enginerdquo In Computer Networks 5618 (2012) pp 3825ndash3833 issn 13891286

doi 101016jcomnet201210007 arXiv 11116189v1

[10] Vitalik Buterin ldquoEthereum A next-generation smart contract and decentralized applica-

tion platformrdquo In URL httpsgithub comethereumwikiwiki 5BEnglish 5D-White-

Paper (2014)

[11] Vitalik Buterin et al Ethereum white paper 2013

44

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 45: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

[12] Lijun Chang et al ldquopSCAN Fast and Exact Structural Graph Clusteringrdquo In IEEE Trans-

actions on Knowledge and Data Engineering 292 (2017) pp 387ndash401

[13] Tao Hung Chang and Davor Svetinovic ldquoData Analysis of Digital Currency Networks

Namecoin Case Studyrdquo In Proceedings of the IEEE International Conference on Engineer-

ing of Complex Computer Systems ICECCS (2017) pp 122ndash125 doi 101109ICECCS

2016023

[14] Duan Bing Chen et al ldquoIdentifying influential nodes in large-scale directed networks The

role of clusteringrdquo In PLoS ONE 810 (2013) pp 1ndash10 issn 19326203 doi 101371

journalpone0077455

[15] Michel Chilowicz Etienne Duris and Gilles Roussel ldquoSyntax tree fingerprinting for source

code similarity detectionrdquo In Program Comprehension 2009 ICPCrsquo09 IEEE 17th Inter-

national Conference on IEEE 2009 pp 243ndash247

[16] Etherscan - The Ethereum Block Explorer httpsetherscanio Accessed 2017-08-01

[17] Giorgio Fagiolo ldquoThe International-Trade Network Gravity Equations and Topological

Propertiesrdquo In (2009) arXiv 09082086 url httparxivorgabs09082086

[18] Jeanne Ferrante Karl J Ottenstein and Joe D Warren ldquoThe program dependence graph

and its use in optimizationrdquo In ACM Transactions on Programming Languages and Systems

(TOPLAS) 93 (1987) pp 319ndash349

[19] Danno Ferrin ldquoA Preliminary Field Guide for Bitcoin Transaction Patternsrdquo In Texas

Bitcoin Conference (2015) url httptexasbitcoinconferencecom

[20] Michael Fleder Michael S Kester and Sudeep Pillai ldquoBitcoin Transaction Graph Analysisrdquo

In hellip -Transaction-Graph-Analysis Pdfrdquohellip (2015) pp 1ndash8 arXiv 150201657 url http

arxivorgabs150201657B5C7D5Cnhttppeoplecsailmiteduspillai

datapapersbitcoin-project-paperpdf7B5C7D5Cnhttparxivorgabs

1502001657B5C7D5Cnhttparxivorgabs150201657

[21] L Freeman ldquoA set of measures of centrality I Conceptual clarificationrdquo In Soc Networks

1 (1979) pp 215ndash239

[22] Linton C Freeman ldquoA set of measures of centrality based on betweennessrdquo In Sociometry

(1977) pp 35ndash41

[23] Linton C Freeman ldquoCentrality in social networks conceptual clarificationrdquo In Social net-

works 13 (1978) pp 215ndash239

45

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 46: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

[24] Linton C Freeman Stephen P Borgatti and Douglas R White ldquoCentrality in valued graphs

A measure of betweenness based on network flowrdquo In Social networks 132 (1991) pp 141ndash

154

[25] Sudipto Guha et al ldquoApproximate XML joinsrdquo In Proceedings of the 2002 ACM SIGMOD

international conference on Management of data ACM 2002 pp 287ndash298

[26] Bernhard Haslhofer Roman Karl and Erwin Filtz ldquoO Bitcoin Where Art Thou Insight

into Large-Scale Transaction Graphsrdquo In ()

[27] Vineeth Kashyap et al ldquoSource Forager A Search Engine for Similar Source Coderdquo In

arXiv preprint arXiv170602769 (2017)

[28] Leo Katz ldquoA new status index derived from sociometric analysisrdquo In Psychometrika 181

(1953) pp 39ndash43

[29] S King and S Nadal ldquoPeercoinndashSecure amp Sustainable Cryptocoinrdquo In Aug-2012 [Online]

Available httpspeercoinnetwhitepaper ()

[30] Jon M Kleinberg ldquoAuthoritative sources in a hyperlinked environmentrdquo In Journal of the

ACM (JACM) 465 (1999) pp 604ndash632

[31] Lothar Krempel ldquoExploring the Dynamics of International Trade by Combining therdquo In

December (2002) pp 1ndash22

[32] Qian Li et al ldquoIdentifying influential spreaders by weighted LeaderRankrdquo In Physica A

Statistical Mechanics and its Applications 404 (2014) pp 47ndash55 issn 03784371 doi 10

1016jphysa201402041 arXiv arXiv13065042v1

[33] l lvm httpsllvmorg Accessed 2017-08-01

[34] Linyuan Luuml et al ldquoVital nodes identification in complex networksrdquo In Physics Reports

650 (2016) pp 1ndash63 issn 03701573 doi 101016jphysrep201606007 arXiv

160701134

[35] Sarah Meiklejohn et al ldquoA fistful of Bitcoins Characterizing payments among men with

no namesrdquo In Proceedings of the Internet Measurement Conference - IMC rsquo13 6 (2013)

pp 127ndash140 issn 15577317 doi 10114525047302504747 url httpdlacmorg

citationcfmid=25047302504747

[36] Minimal Slashing Conditions httpsmediumcomVitalikButerinminimal-slashing-

conditions-20f0b500fc6c Accessed 2017-08-01

[37] L Morten J Robert and E Walter ldquoThe topology of interbank payment flowsrdquo In (2006)

46

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 47: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

[38] Satoshi Nakamoto ldquoBitcoin A Peer-to-Peer Electronic Cash Systemrdquo In WwwBitcoinOrg

(2008) p 9 issn 09254560 doi 101007s10838-008-9062-0 arXiv 43543534534v343453

url httpsbitcoinorgbitcoinpdf

[39] NEM Technical Reference httpnemioNEM_techRefpdf Accessed 2017-08-01

[40] Mark Newman Networks an introduction Oxford university press 2010

[41] Mark EJ Newman ldquoA measure of betweenness centrality based on random walksrdquo In Social

networks 271 (2005) pp 39ndash54

[42] Daacute Niel Kondor et al ldquoDo the Rich Get Richer An Empirical Analysis of the Bitcoin

Transaction Networkrdquo In PLoS ONE 92 (2014) doi 101371journalpone0086197

[43] Athanasios N Nikolakopoulos and John D Garofalakis ldquoNCDawareRankrdquo In Proceedings

of the sixth ACM international conference on Web search and data mining - WSDM rsquo13

February 2013 (2013) p 143 doi 10114524333962433415 url httpdlacm

orgcitationcfmdoid=24333962433415

[44] Jae Dong Noh and Heiko Rieger ldquoRandom walks on complex networksrdquo In Physical review

letters 9211 (2004) p 118701

[45] Micha Ober Stefan Katzenbeisser and Kay Hamacher ldquoStructure and Anonymity of the

Bitcoin Transaction Graphrdquo In Future Internet 52 (2013) pp 237ndash250 issn 1999-5903

doi 103390fi5020237 url httpwwwmdpicom1999-590352237

[46] Lawrence Page et al The PageRank citation ranking Bringing order to the web Tech rep

Stanford InfoLab 1999

[47] Thai Pham and Steven Lee ldquoAnomaly detection in bitcoin network using unsupervised

learning methodsrdquo In arXiv preprint arXiv161103941 (2016)

[48] Joseph Poon and Thaddeus Dryja ldquoThe bitcoin lightning network Scalable off-chain in-

stant paymentsrdquo In Technical Report (draft) (2015)

[49] Marc Proumlpper Iman van Lelyveld and Ronald Heijmans ldquoTowards a network description

of interbank payment flowsrdquo In (2008)

[50] Dorit Ron and Adi Shamir ldquoQuantitative Analysis of the Full Bitcoin Transaction Graphrdquo

In ()

[51] Gert Sabidussi ldquoThe centrality index of a graphrdquo In Psychometrika 314 (1966) pp 581ndash

603

[52] Computer Science and The Technion ldquoThe Stochastic Approach for Link-Structure Anal-

ysis ( SALSA ) and the TKC E ectrdquo In (2001)

47

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 48: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

[53] M Aacutengeles Serrano Mariaacuten Boguntildeaacute and Alessandro Vespignani ldquoPatterns of dominant

flows in the world trade webrdquo In Journal of Economic Interaction and Coordination 22

(2007) pp 111ndash124 issn 1860711X doi 101007s11403-007-0026-y arXiv 0704

1225

[54] Ma Angeles Serrano and Mariaacuten Boguntildeaacute ldquoTopology of the world trade webrdquo In Physical

review E Statistical nonlinear and soft matter physics 681 Pt 2 (2003) p 015101 issn

1063-651X doi 101103PhysRevE68015101 arXiv 0301015 [cond-mat]

[55] Hiroaki Shiokawa Yasuhiro Fujiwara and Makoto Onizuka ldquoSCAN++ efficient algorithm

for finding clusters hubs and outliers on large-scale graphsrdquo In Proceedings of the VLDB

Endowment 811 (2015) pp 1178ndash1189

[56] The Stage 1 Casper Contract httpsgithubcomethereumcasper Accessed 2017-

08-01

[57] Florian Tschorsch and Bjoumlrn Scheuermann ldquoBitcoin and Beyond A Technical Survey on

Decentralized Digital Currenciesrdquo In IEEE COMMUNICATIONS SURVEYS amp TUTO-

RIALS PP99 (2015) pp 1ndash1 issn 1553-877X doi doi101109COMST20162535718

[58] Xiaowei Xu et al ldquoScan a structural clustering algorithm for networksrdquo In Proceedings of

the 13th ACM SIGKDD international conference on Knowledge discovery and data mining

ACM 2007 pp 824ndash833

[59] Kaizhong Zhang and Dennis Shasha ldquoSimple fast algorithms for the editing distance be-

tween trees and related problemsrdquo In SIAM journal on computing 186 (1989) pp 1245ndash

1262

48

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 49: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

附录 A 星云链账号地址设计

星云链的账号地址被精设计为以 ldquonrdquo 开头的形式以表其是个星云(Nebulas)的地址

A1 户账户地址

类似于特币和以太坊星云链的帐号也是由椭圆曲线算法作为其基础加密算法户的私钥是通过加

密户的令得到的进步的由该私钥成相应的公钥

此外为了防户输错了个字符把星云币误发给其它户星云链的地址包含了校验码

星云链中的户地址计算式如下

content = ripemd160(sha3_256(public key))

checksum = sha3_256(0x19ltlt(218) + 0x57ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x57ltlt(248) + contentltlt(48) + checksum)

其中 0x19 为个字节的填充0x57 是户账户地址对应的类型content 的长度为 20 个字节checksum

的长度为 4 个字节address 的长度为 35 个字符

在使 base58 编码之后个典型的地址如下n1TV3sU6jyzR4rJ1D7jCAmtVGSntJagXZHC即以

字母 n 开头

A2 智能合约地址

在星云链中对智能合约地址的计算式略微区别于普通的户账户地址对于智能合约的地址

不需要额外的令其计算式如下

content = ripemd160(sha3_256(txfrom txnonce))

checksum = sha3_256(0x19ltlt(218) + 0x58ltlt(208) + content)[04]

address = base58(0x19ltlt(258) + 0x58ltlt(248) + contentltlt(48) + checksum)

可以看到这类似于普通户帐户地址的计算式所不同的是智能合约地址对应的类型为 0x58同样

的个典型的智能合约地址如下n1sLnoc7j57YfzAVP8tJ3yK5a2i56QrTDdK

49

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 50: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

附录 B 相似智能合约搜索

代码相似度的主要难点在于智能合约级语的结构性特点和逻辑表达形式的多样性前学术界对代

码相似度的算法概有下这些流派

bull 字符串编辑距离

把输 query 代码和候选源代码都当做本利字符串编辑距离来衡量字符串之间的相似度编辑

距离 (Edit Distance) 指的两个字符串之间由个转成另个所需的最少编辑操作次数许可的编

辑操作包括将个字符替换成另个字符插个字符删除个字符般来说编辑距离越

两个串的相似度越这种字符串编辑距离算法既可以在源代码较也可以在中间语

(intermediate representation)甚可以在机器语中

为了提字符串编辑距离算法的健壮性会对源代码做些不改变语义的转换例如去除空字符

去除注释局部变量名统rsquo$rsquo 代替代数表达式的归化表达等该算法运算速度快简洁效

但是对于复杂程序适应性较差完全没有考虑到代码的语法和组织结构

bull Token 序列

Token 序列表法是将输的源代码通过词汇分析器分析将源代码转换成 Token 序列两个程序

的相似度就是 Token 序列的相似度可以最长公共串或者相关匹配算法 (如后缀树匹配算法)

度量程序间的相似程度这样做可以检测出具有不同句法但却有相似功能的代码段但该法在程序

相似度度量时隐藏了程序的组织结构

bull 抽象语法树 (Abstract Syntax TreeAST)

抽象语法树 (AST) 是对源代码语法分析后形成的中间表达形式通过较树与其他树之间的

相似程度对程序的相似度进度量较两棵树之间的相似度可以树的编辑距离算法 [59]精确的

树编辑距离算法复杂度较献 [25] 提供了种近似的快速算法献 [15] 提出对语法树做哈希

指纹使得语法树较算法可以在海量数据集上进效检索

bull 程序依赖图 (Program Dependency Graph PDG)

程序依赖图 PDG [18] 可以表程序内部数据以及控制依赖关系能够在语义级别上对程序代码进

分析相似代码规约成为寻找同构图这是 NP 完全问题算法复杂度很前只能些近似

算法

我们认为上述各种算法都在不同维度描述了代码的本结构语法上的相似度Source Forager [27]

提供了个很好的程思路把各种不同维度的相似度指标刻画为不同的特征每个特征都表征了代码某

种的相似度衡量最后向量的相似度来做总体的相似度衡量综合了以上各种算法的优点星云链

也借鉴这种思路实现智能合约的相似搜索我们把函数作为智能合约代码搜索的基本单位

表3定义了候选的代码相似度特征我们接下来进步描述每个特征的定义和它们的相似度计算函数

bull TypendashOperation Coupling 该特征是个元组集合元组包含变量类型以及变量类型的算符

即 (type operation) 对原数据类型般和算术运算符逻辑运算符以及关系运算符配对例如

(intge)定义类型 (例如 struct) 般和成员函数配对例如 (Bar foo) 表数据类型 Bar 的字

段 foo 被访问按照这种法把个函数的代码体内部所有变量操作都变成元组并且去重以后

50

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 51: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

表 3 代码相似度特征族表

Feature-Class Brief Description

TypendashOperation Coupling types used and operations performed on the types

Skeleton Tree structure of loops and conditionals

Decorated Skeleton Tree structure of loops conditionals and operations

3 Graph CFG BFS CFG subgraphs of size 3 BFS used for generating subgraphs

4 Graph CFG BFS CFG subgraphs of size 4 BFS used for generating subgraphs

3 Graph CFG DFS CFG subgraphs of size 3 DFS used for generating subgraphs

4 Graph CFG DFS CFG subgraphs of size 4 DFS used for generating subgraphs

Library Calls calls made to libraries

Type Signature input types and the return type

Local Types types of local variables

Numeric Literals numeric data constants used

String Literals string data constants used

就个元组序列体现了这段代码的 TypendashOperation Coupling 特征我们认为相似功能的代码

也应该具有相似的变量操作集合但是我们并不关元组的先后顺序所以该特征丢失了代码的逻

辑结构信息只能部分代表代码的特征

TypendashOperation Coupling 特征之间的相似度可以由雅克相似度定义即如果给定两个集合 S1 和

S2雅克相似度由如下公式定义

simJacc(S1S2) =| S1

capS2 |

| S1

cupS2 |

(12)

bull Skeleton Tree 基于代码的抽象语法树但是只保留了循环 (for while dowhile) 和条件语句

(ifelse)其余节点从树中全部移除我们认为相似功能的代码应该具有相似的循环和条件语句结

Skeleton Tree 的相似度计算基于树的编辑距离定义 dr 为两棵树的预估编辑距离此距离仅仅由树

的决定即

dr(T1 T2) =| size(T1)minus size(T2) |max(size(T1) size(T2))

(13)

假设 DT 是编辑距离的阈值设定为 05我们进步得到两棵树的近似编辑距离公式

dt(T1 T2) =

dr(T1 T2) if dr(T1 T2) ge DT

max

ed(pre(T1) pre(T2))

ed(post(T1) post(T2))

max(size(T1)size(T2))

otherwise

(14)

51

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 52: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

pre(T) 代表树的先序遍历序列post(T) 代表树的后序遍历序列ed(S1 S2) 代表序列 S1 和 S2 的编

辑距离Skeleton Tree 的相似度可以由以下公式计算

simTree(T1 T2) = 1minus dt(T1 T2) (15)

bull Decorated Skeleton Tree 和 Skeleton Tree 相似除了循环和分节点以外还保留了部分运算

符 (例如 + - lt)但是赋值运算符去除了因为这些都是噪

bull K-Subgraphs of CFG基于函数的 CFG 图的 k-图实现k-图按如下法定义给定 CFG 图和

某节点我们做度优先遍历 (BFS) 或者深度优先遍历 (DFS)直遍历节点数为 k形成的图为

k-图如果遍历结束后节点数不 k丢弃该图遍历 CFG 图的每个节点我们可以得到所有

的 k-图对于每个 k-图我们 k2 位整数表参考图20所有的 k-图形成了个整数集合

3 Graph CFG BFS k = 3BFS 遍历

4 Graph CFG BFS k = 4BFS 遍历

3 Graph CFG DFS k = 3DFS 遍历

4 Graph CFG DFS k = 4DFS 遍历

相似度可以由义雅克相似度公式计算给定向量 x = (x1 x2 xn) 和 y = (y1 y2 yn)义雅

克相似度定义为

J(x y) =

sumi min(xi yi)sumi max(xi yi)

(16)

图 20 4-graph 例邻接矩阵的元素为进制串ldquo0100 0011 0000 0000rdquo进制数为 17152

bull Library Calls 合约中如果发调其它库合约所有库合约的地址也被记录下来由雅克相似度

公式计算相似度

bull Type Signature 该特征由输参数类型和返回参数类型组成由雅克相似度公式计算相似度例

如对于下的智能合约代码函数 getBalance 的 Type Signature 特征为向量 (address uint256)

contract addressTest

function getBalance(address addr) returns (uint)

return addrbalance

52

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 53: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

bull Local Types 该特征为函数体所有局部变量类型的集合由雅克相似度公式计算相似度

bull Numeric Literals 所有数值常量的集合作为 Numeric Literals 特征由雅克相似度公式计算相似

bull String Literals 所有字符串常量的集合作为 String Literals 特征由雅克相似度公式计算相似度

特征族可扩展可以便的把各种新的特征加进来基于每个特征都有个相似度计算我们把所有

特征的相似度做加权和得到最终的代码相似度

simcombined(A B) =

sumnclc=1 simc(Ac Bc) middot wcsumncl

c=1 wc(17)

其中A 和 B 是特征向量ncl 是特征族个数 simc 是针对特征 c 的相似度计算函数Ac 和 Bc 是特

征 c 的特征向量wc 是特征 c 的权重权重是可以在量测试集上通过机器学习算法训练得到的

53

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志
Page 54: Nebulas 星云链技术⽩⽪书 · Nebulas 星云链技术⽩⽪书 基于价值尺度的区块链操作系统及搜索引擎 Nebulas Team 2018 年4 ⽉ v1.0.2 1

附录 C 书版本更新志

bull [101] - 201709

1 细化了处语句表达

2 调整了部分图表格式

3 改进了公式的可读性

bull [102] - 201804

1 更新了附录 A 关于星云链地址设计的部分

54

  • 简介
    • 区块链技术简介
    • 商业和技术挑战
    • 星云链设计原则
      • Nebulas Rank 星云指数
        • 星云指数总体设计
        • 交易图
        • 排名算法
        • 抵抗操纵
        • 相关工作
          • Nebulas Force
            • NVM 星云链虚拟机
            • 核心协议的升级设计
            • 智能合约的升级设计
              • 图灵完备的智能合约编程语言
              • 合约可升级
                  • DIP开发者激励协议
                    • 设计目标
                    • DIP奖励分配算法
                    • 实验结果
                    • 作弊分析
                      • PoD贡献度证明共识算法
                        • 设计目标
                        • 常用共识算法的缺陷
                        • PoD算法设计
                          • 新区块产生
                          • 验证者集合更迭
                          • 共识过程
                          • 分叉选择
                          • 投票规则
                            • PoD经济分析
                              • 激励分析
                              • 作弊分析
                                  • 区块链搜索引擎
                                    • 简介
                                    • 搜索基础架构
                                    • 趋势榜单
                                    • 关键词搜索
                                    • 相似智能合约搜索
                                      • 基础服务及开发工具
                                        • 域名服务
                                        • 闪电网络
                                        • 开发者工具
                                          • 星云链代币NAS
                                          • 总结
                                          • 附录 星云链账号地址设计
                                            • 用户账户地址
                                            • 智能合约地址
                                              • 附录 相似智能合约搜索
                                              • 附录 白皮书版本更新日志