赞
踩
现有研究将图区块链划分为主链型(收敛)、并行型(平行)、朴素型(发散),分享一篇发表于2020年ICDCS会议的论文,它将无监督学习应用在朴素型图区块链中,通过二分类来区分忠诚算力和恶意算力,输出忠诚算力产生的区块作为共识结果。
这篇论文提出了一个针对图区块链的共识协议,通过两阶段策略使得系统能够抵御分布式账本下的双重花费攻击。第一步是利用谱图论中的谱聚类算法来区分忠诚矿工和恶意矿工产生的区块,第二步是根据引用关系设计排序算法作用于忠诚区块集合中输出共识结果。其中,谱聚类算法是一种无监督学习,它能将图中的点集划分为两类,仿真结果表明这种分类可以有效消除攻击者进行双花策略的举动。
比特币协议将区块以单链方式进行组织,每个区块引用当前链最新的区块,并通过最长链原则引导矿工行为,工作量证明的计算令每个区块的平均产生时间间隔为10分钟,尽管这些要求能够成功对抗双花攻击,但是带来的系统性能却是十分受限。
这篇论文提出的共识协议针对图结构区块链,允许矿工创建的新区块任意地引用所有前置区块从而形成有向无环图,其结构类似于Spectre和Phantom方案。协议主要分为两步:第一步是抽象有向无环图并应用谱聚类算法,将连接不够紧密的区块排除,从而识别出不遵守协议的恶意攻击者;第二步是将聚集程度高的点集当作忠诚矿工生成的区块,根据其引用关系和确定性规则产生排序结果。
这篇论文的思路与Spectre和Phantom相似,但是采用了不同的聚类算法对图进行划分,如何将谱聚类作用于区块链场景下的有向无环图是一个比较令人感兴趣的问题。
系统运行在一个点对点的公开网络中,与常见的朴素型图区块链有相同的结构和构建方法。矿工创建和收到的区块会广播给它的邻居以尽可能地实现网络同步,在创建新区块时矿工会引用它当前已知的所有最新的叶子区块以增加其确认的概率。
给定一个有向无环图,系统首先简化将其转变为无向图,主要关注图中区块之间的聚集程度,然后直接调用如下的谱图聚类算法输出集合划分。
令 G = ( V , E ) G=(V,E) G=(V,E) 表示一个图,其中点集合 V = { v 1 , . . . , v n } V=\{v_1,...,v_n\} V={v1,...,vn} 表示图中有 n n n 个区块。每两个点 v i v_i vi 和 v j v_j vj 之间有一个非负的权重值 w i j ≥ 0 w_{ij} \geq 0 wij≥0 。在图区块链中,任意边的权重值都简化为1,如果区块 i i i 引用了区块 j j j ,则 w i j = 1 w_{ij}=1 wij=1 ,否则 w i j = 0 w_{ij}=0 wij=0 。由于 G G G 是无向图,有 w i j = w j i w_{ij}=w_{ji} wij=wji 。
根据图中边的权重,得到邻接矩阵 W = ( w i j ) i , j = 1 , . . . , n W=(w_{ij})_{i,j=1,...,n} W=(wij)i,j=1,...,n ,区块 i i i 所表示的点在图中的出度定义为 d i = ∑ j = 1 n w i j d_i = \sum^n_{j=1}w_{ij} di=∑j=1nwij ,矩阵 D D D 被定义为由点的度 d 1 , . . . , d n d_1,...,d_n d1,...,dn 组成的对角矩阵。
举个例子,有区块1为创世区块,区块2、区块3和区块4都引用了区块1,而区块5引用了区块2和区块3,构建的有向无环图如图1所示:
图的邻接矩阵 W W W 为:
[
0
1
1
0
0
1
1
0
0
1
1
0
1
0
0
1
1
0
0
1
1
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
]
对应的度矩阵 D D D 为:
[
3
0
0
0
0
0
0
3
0
0
0
0
0
0
3
0
0
0
0
0
0
2
0
0
0
0
0
0
2
0
0
0
0
0
0
1
]
给定一个区块子集 A ⊂ V A \subset V A⊂V ,用符号 A ‾ \overline{A} A 表示其补集 V / A V/A V/A 。定义一个指标向量 1 A = ( f 1 , . . . , f n ) ′ ∈ R n \mathbb{1}_A = (f_1,...,f_n)' \in \mathbb{R}^n 1A=(f1,...,fn)′∈Rn ,其中如果区块属于集合 v i ∈ A v_i \in A vi∈A ,那么 f i = 1 f_i=1 fi=1 ,否则 f i = 0 f_i=0 fi=0 。为方便表示,直接用符号 i ∈ A i \in A i∈A 来表示图中的区块,即点集 { i ∣ v i ∈ A } \{i|v_i \in A\} {i∣vi∈A} 。
对于两个不相交的集合 A , B ∈ V A,B \in V A,B∈V ,有 $A \cap B = \emptyset $,定义子集之间的连接权重 W ( A , B ) = ∑ i ∈ A , j ∈ B w i j W(A,B)= \sum_{i \in A,j \in B}w_{ij} W(A,B)=∑i∈A,j∈Bwij 。 ∣ A ∣ |A| ∣A∣ 表示集合 A A A 中区块的数量, v o l ( A ) = ∑ i ∈ A d i vol(A)= \sum_{i \in A}d_i vol(A)=∑i∈Adi 表示集合 A A A 的容量,即所有区块在图中度的总和。
定义一般拉普拉斯矩阵 L = D − W L=D-W L=D−W ,还有规范化的拉普拉斯矩阵,由于比较复杂且没有应用在本论文中,因此不做过多介绍。
在上述例子中可以得到矩阵如下:
[
3
−
1
−
1
0
0
−
1
−
1
3
0
−
1
−
1
0
−
1
0
3
−
1
−
1
0
0
−
1
−
1
2
0
0
0
−
1
−
1
0
2
0
−
1
0
0
0
0
1
]
矩阵 L L L 满足如下属性:
给出证明如下:
f
′
L
f
=
f
′
D
f
−
f
′
W
f
=
∑
i
=
1
n
d
i
f
i
2
−
∑
i
=
1
n
f
i
f
j
w
i
j
=
1
2
(
∑
i
=
1
n
d
i
f
i
2
−
2
∑
i
,
j
=
1
n
f
i
f
j
w
i
j
+
∑
j
=
1
n
d
j
f
j
2
)
=
1
2
∑
i
,
j
=
1
n
w
i
,
j
(
f
i
−
f
j
)
2
最常见的谱聚类算法假设数据由 n n n 个点组成,即 x 1 , . . . , x n x_1,...,x_n x1,...,xn ,任意两个数据点之间有一个相似度 s i j = s ( x i , x j ) s_{ij}=s(x_i,x_j) sij=s(xi,xj) ,要求相似函数是对称且非负的,因此可以构成一个相似度矩阵 S = ( s i j ) i , j = 1 , . . . , n S=(s_{ij})_{i,j=1,...,n} S=(sij)i,j=1,...,n 。上述对无向图 G G G 的邻接矩阵 W W W 可直接作为数据集合的相似度矩阵,谱聚类算法如下:
输入:
k-means
算法将其划分为
C
1
,
.
.
.
,
C
k
C_1,...,C_k
C1,...,Ck 集合。输出:
在上述算法中,一个关键技巧就是将抽象数据点 x i x_i xi ,通过构建拉普拉斯矩阵,计算特征向量转换成点 y i ∈ R k y_i \in \mathbb{R}^k yi∈Rk 作为新的表示。
给定 k k k 个数量的子集,对图的最小割是选择一个划分 A 1 , . . . , A k A_1,...,A_k A1,...,Ak ,令割的值最小:
c
u
t
(
A
1
,
.
.
.
,
A
k
)
=
1
2
∑
i
=
1
k
W
(
A
i
,
A
i
‾
)
定义一种比率割,计算一个图中点的数量为 ∣ A ∣ |A| ∣A∣ ,计算如下:
R
a
t
i
o
C
u
t
(
A
1
,
.
.
.
,
A
k
)
=
1
2
∑
i
=
1
k
W
(
A
i
,
A
i
‾
)
∣
A
i
∣
=
∑
i
=
1
k
c
u
t
(
A
i
,
A
i
‾
)
∣
A
i
∣
考虑聚类数量 k = 2 k=2 k=2 时对图进行切割,对任意 k k k 值进行聚类不在本文介绍范围内,可阅读谱聚类教程。本文的目标是离谱谱聚类做二分类,区分图区块链中的恶意区块,需要解决如下最优化问题:
min
A
⊂
V
R
a
t
i
o
C
u
t
(
A
,
A
‾
)
对于给定的子集 A ⊂ U A \subset U A⊂U ,定义向量 f = ( f 1 , . . . , f n ) ′ ∈ R n f=(f_1,...,f_n)' \in \mathbb{R}^n f=(f1,...,fn)′∈Rn ,满足:
f
i
=
{
∣
A
‾
∣
/
∣
A
∣
,
v
i
∈
A
−
∣
A
∣
/
∣
A
‾
∣
,
v
i
∈
A
‾
f_i = \left\{
于是,上述这种比率割的目标函数可以用拉普拉斯矩阵进行重写,计算如下:
f
′
L
f
=
1
2
∑
i
,
j
=
1
n
w
i
j
(
f
i
−
f
j
)
2
=
1
2
∑
i
∈
A
,
j
∈
A
‾
w
i
j
(
∣
A
‾
∣
∣
A
∣
+
∣
A
∣
∣
A
‾
∣
)
2
+
1
2
∑
i
∈
A
‾
,
j
∈
A
w
i
j
(
−
∣
A
‾
∣
∣
A
∣
−
∣
A
∣
∣
A
‾
∣
)
2
=
c
u
t
(
A
,
A
‾
)
(
∣
A
‾
∣
∣
A
∣
+
∣
A
∣
∣
A
‾
∣
+
2
)
=
c
u
t
(
A
,
A
‾
)
(
∣
A
∣
+
∣
A
‾
∣
∣
A
∣
+
∣
A
∣
+
∣
A
‾
∣
∣
A
‾
∣
)
=
∣
V
∣
⋅
R
a
t
i
o
C
u
t
(
A
,
A
‾
)
此外,对向量 f f f 求和有:
∑
i
n
f
i
=
∑
i
∈
A
∣
A
‾
∣
∣
A
∣
−
∑
i
∈
A
‾
∣
A
∣
∣
A
‾
∣
=
∣
A
∣
∣
A
‾
∣
∣
A
∣
−
A
‾
∣
A
∣
∣
A
‾
∣
=
0
也就是说,向量 f f f 是正交于常数向量 1 \mathbb{1} 1 ,且满足二阶范式如下:
∣
∣
f
∣
∣
2
=
∑
i
=
1
n
f
i
2
=
∣
A
∣
∣
A
‾
∣
∣
A
∣
+
A
‾
∣
A
∣
∣
A
‾
∣
=
A
‾
+
∣
A
∣
=
n
因此,最小割优化问题等价于:
min
A
⊂
V
f
′
L
f
s
.
t
.
f
⊥
1
,
∣
∣
f
∣
∣
=
n
根据Rayleigh-Ritz定理,该优化问题的解为矩阵 L L L 的第2小的特征值对应的特征向量(最小的特征值为0,其对应的特征向量为常数指标向量 1 \mathbb{1} 1 )。在得到特征向量 f f f 后,最简单的方式进行划分即将其作为指标函数,计算如下:
{
v
i
∈
A
,
f
i
≥
0
v
i
∈
A
‾
,
f
i
<
0
\left\{
还是上面那个例子,通过程序计算其特征值和特征向量:
import numpy as np # 给定一个矩阵L L = np.array([ [ 3,-1,-1, 0, 0,-1], #1 [-1, 3, 0,-1,-1, 0], #2 [-1, 0, 3,-1,-1, 0], #3 [ 0,-1,-1, 2, 0, 0], #4 [ 0,-1,-1, 0, 2, 0], #5 [-1, 0, 0, 0, 0, 1], #6 ]) # 使用eig函数计算特征值和特征向量 eigenvalues, eigenvectors = np.linalg.eig(L) eigens = sorted(zip(eigenvalues, eigenvectors), key=lambda pair: pair[0]) value, vector = eigens[1] print("第2小特征值:\n", value) print("对应特征向量:\n", vector)
第2小的特征值和其对应的特征向量分别是:
第2小特征值:
0.7639320225002101
对应特征向量:
[0.31622777 0.36514837 -0.40824829 0.31622777 -0.70710678 -0.01980052]
以0为分割,在特征向量中的值被划分为两个集合,即图中节点的 { 1 , 2 , 4 } \{1,2,4\} {1,2,4} 和 { 3 , 5 , 6 } \{3,5,6\} {3,5,6} ,如图所示:
可以观察到,当图的规模比较小时,其区分效果和预想的存在差异,没有Phantom方案中的最大k聚集子图直观,但该方案无需假定每一高度产生的平均区块数量,即聚集系数k,可直接完成二分类。
对于图的共识协议分为如下两步:
根据前一章节的内容,给出算法描述如下:
算法1 针对有向无环图的谱聚类
输入:
输出:
函数 f i n d − c l u s t e r ( G ) find-cluster(G) find−cluster(G)
图3是论文给出的一个针对图区块链的攻击模型示例,区块15由攻击者产生,其中包含了一个与区块3中相冲突的交易。区块0-14由忠诚矿工产生,区块15-17由攻击者私下产生,直到区块18才被广播。因而,区块14引用了区块18。
图4是论文根据算法1作用在上图后的结果,其拉普拉斯矩阵第2小的特征值对应的特征向量,将正负实数映射到集合 { 1 , − 1 } \{1,-1\} {1,−1} 中分别表示聚类 C 1 C_1 C1 和 C 2 C_2 C2 。可以看到区块0-13被划分到了集合 C 1 C_1 C1 ,而攻击者的区块15-19以及区块14被划分到了集合 C 2 C_2 C2 。
给定一个由区块构成的有向无环图 G t c G_t^c Gtc ,表示客户端 c c c 在时间 t t t 观察的图结构,客户端在创建新区块时应当包含所有已知的图中的叶子区块。同时,存在一个确认数,要求拥有足够确认深度的区块才能被添加到集合 b l u e L i s t blueList blueList 中,该集合构建算法如下:
算法2 输出已确认的区块列表
输入:
输出:
函数 f i n d − l i s t ( G t c , k ) find-list(G_t^c,k) find−list(Gtc,k)
假设确认数为4,图5给出了算法2对区块进行集合划分的过程。当累积到区块高度6时,该方案能确保对区块高度2及之前的区块进行聚类划分,蓝色标记为忠诚节点创建的区块,而红色标记为攻击者创建的区块。
在标记为蓝色的区块集合中,根据其相互引用关系,附加上确定性的规则,输出最终排序结果。比较简单就不再赘述。
这篇论文的方案算不上很新颖和突出,引起我关注的点在于它引入了机器学习领域的谱聚类算法,这个算法针对关系图进行社区划分有大量的研究,之前没有想过直接应用在图区块链的区块划分中。或许可以再进一步,对图区块链的图结构,归纳一些属性和特点,比较是否有其他的聚类算法能够更好地适应这种图拓扑,以实现稳定且连续的区块划分。最后,附上文献引用和DOI链接:
Reddy S, Sharma G V V. UL-blockDAG: Unsupervised learning based consensus protocol for blockchain[C]//2020 IEEE 40th International Conference on Distributed Computing Systems (ICDCS). IEEE, 2020: 1243-1248.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。