摘 要:
针对当前区块链分片模型存在恶意节点聚集、分片失效率高及负载不均衡问题,提出基于节点可信度的区块链动态分片模型(blockchain dynamic sharding model based on node credibility,CBDSM)。首先,构建了一种区块链分片架构,以解决区块链面临的可扩展性瓶颈问题;其次,设计了节点可信度评估机制以量化节点的能力和可靠度,实现了节点的高效筛选和划分;在此基础上设计了动态网络分片算法及网络分片流程,通过对不同等级的节点进行动态分配,实现了链上负载均衡。理论分析和实验结果表明,相较于同类模型,该模型吞吐量提升了54%,共识失败率降低了46%,分片失效率降低了15.6%。该模型能够保障节点动态均衡,抵抗节点单点聚集和合谋攻击,确保了区块链分片系统的动态安全性,同时兼顾了系统的高性能及高可扩展性。
关键词:区块链;可扩展性;分片技术;节点可信度;网络分片
中图分类号:TP393"" 文献标志码:A""" 文章编号:1001-3695(2024)12-005-3563-09
doi: 10.19734/j.issn.1001-3695.2024.04.0243
Blockchain dynamic sharding model based on node credibility
Wu Jiayinga, Yuan Lingyuna, b, Chen Meihonga, Xie Tianyua
(a.School of Information Science amp; Technology, b.Key Laboratory of Educational Information for Nationalities of Ministry of Education, Yunnan Normal University, Kunming 650500, China)
Abstract:
To address the problems of malicious node aggregation, high shard failure rate, and load imbalance in the current models of blockchain shard, this paper proposed a blockchain dynamic sharding model (CBDSM) based on node credibility. Firstly, this paper constructed a blockchain sharding architecture to solve the scalability bottlenecks faced by the blockchain. Secondly, it designed the reliability evaluation mechanism of nodes to quantify the ability and reliability of nodes, which rea-lized the efficient screening and classification of nodes. On this basis, it designed the dynamic network fragmentation algorithm and the network fragmentation flow. Through the dynamic allocation of nodes at different levels, it realized load balancing on the chain. Theoretical analysis and experimental results show that, compared with similar models, CBDSM boasts a 54% increase in throughput, a 46% reduction in consensus failure rate, and a 15.6% decrease in shard failure rate. This model can guarantee the dynamic equilibrium of nodes, and resist the single-point aggregation and collusion attacks of nodes. It ensures the dynamic security of the blockchain shard system, with the high performance and high scalability of the system.
Key words:blockchain; scalability; sharding technology; node credibility; network sharding
0 引言
随着数字化建设和元宇宙发展的深入推进,区块链技术成为了推动未来数字社会发展的重要引擎。2021年3月,《中华人民共和国国民经济和社会发展“十四五”规划和 2035 年远景目标纲要》[1]明确指出了区块链技术作为新兴数字产业的战略地位,旨在通过区块链技术保障数据要素安全流通与可信共享,以促进各行各业的数字化建设,全力推动数字中国的建设。据赛迪区块链研究院统计,截止2022年底,我国中央及地方已出台近千余项区块链相关的政策[2],区块链产业规模达到了67亿元,涵盖智慧医疗、数字政务服务、能源、农产品溯源、工业制造、物流等18个领域,可见我国对区块链技术在各行业中的重要性给予了高度重视,也在实际政策层面积极落地。然而,随着区块链技术在各个领域的广泛应用,一些性能问题逐渐浮现[3],如交易吞吐量低、存储开销大以及时延高等,使得区块链面临着严重的可扩展性问题,难以支撑高并发应用,严重制约着区块链技术的实施和落地。
针对区块链可扩展性瓶颈问题,即区块链在吞吐量、交易延迟以及存储开销等优化方面,众多研究者提出了许多不同的解决方案[3~5],主要包括链上的增大区块大小、DAG结构、分片以及链下的侧链、支付通道等。其中,分片技术[6]能够在不牺牲区块链去中心化的前提下有效解决问题,因而成为目前解决区块链可扩展性瓶颈的主流技术[7,8]。针对区块链的分片技术,文献[9]提出了适用于无许可区块链的分片协议Elastico,通过将节点随机划分成多个分片,每个分片可独立并行处理交易以解决区块链面临的性能低下问题;在Elastico基础上,文献[10]提出了OmniLedger,利用抗偏差的公共随机性协议进行节点分配,保证了节点分片的随机性。文献[11]提出了一种区块链分片协议RapidChain以平衡各分片中的节点数,其在吞吐量、时延等性能上表现更好。上述分片方案虽然在一定程度上解决了区块链的可扩展性瓶颈问题,但也带来了新的挑战,一方面由于分片后区块链的网络规模更小导致其抗攻击能力和安全性均下降,且节点随机分片极易导致恶意节点聚集,恶意节点更容易发起攻击;另一方面,现存的分片机制未充分考虑节点的异构性,未能较好实现对节点的合理分片,容易造成分片失效和系统负载不均衡,从而极大地影响系统的整体性能和效率。
针对上述区块链分片技术中现存的恶意节点聚集、分片失效率高以及负载不均衡等问题,本文提出了一种基于节点可信度的区块链动态分片模型(CBDSM)。主要贡献如下:
a)针对区块链分片系统中恶意节点聚集导致的安全性降低问题,构建节点可信度评估机制,利用可信度评估机制衡量节点的可靠性,并设计了节点等级划分策略以减少系统中的恶意节点,实现对节点的均衡化分片,提高了区块链分片系统的安全性和抗攻击能力;
b)为实现区块链分片的持续安全和动态稳定,并有效解决分片重组带来的数据大量迁移的存储和通信开销,提出了基于节点等级的动态网络分片算法并设计了具体的分片流程,保证了系统中对恶意节点的管控,降低了大量资源开销,实现了分片部分重组和动态均衡。
1 相关工作
为了解决区块链分片技术的性能和安全性问题,文献[12]提出了Monoxide分片协议,基于节点地址进行网络分片,并提出了Chu-ko-nu mining进行交易共识,保证了攻击单分片与攻击整个网络同样困难,但恶意节点容易预测其分片方式,且共识算法能耗高,易造成51%攻击。文献[13]为解决片内节点数量较少可能引发的安全问题,引入了可信硬件Intel SGX来实现对节点恶意行为的控制,但可信硬件的使用依赖特定的硬件设备,限制了区块链系统的应用范围,也增加了系统的成本和复杂性。文献[14]提出一种基于强化学习的区块链动态分片框架SkyChain,通过灵活调整分片配置参数在动态环境中实现系统性能和安全性的均衡。文献[15]结合深度强化学习提出了区块链分片策略的优化方案以衡量区块链的性能和安全级别,并通过动态调整参数实现区块链系统的最佳性能。虽然深度强化学习能够动态调整系统性能同时确保一定的安全性,但其引入了高昂的训练成本和时间开销,带来额外的网络延迟和开销,同时增加了系统的复杂性和运行成本。文献[16]通过K-means聚类算法和VRF实现用户分组和共识节点分配来实现分片,但该方法牺牲了一定的安全性且计算成本高,增加了算法的复杂性。文献[17]提出了交易记录和共识执行解耦的双链架构Benzene,并引入TEE来实现跨分片验证,但其采用两段锁协议处理交易,导致其产生较高的确认延迟。文献[18]设计了一种名为PYRAMID的区块链分层分片结构,可实现线性可扩展性和高效的跨分片交易处理,但静态分片的分层配置方式会显著降低系统安全性。
为了解决分片后恶意节点单点聚集引发的安全性问题,信誉机制被引入到区块链分片策略中,其能够在不需要硬件成本且不会引发深度强化学习带来的系统开销问题的情况下确保区块链分片系统的安全性和性能。鉴于此,众多学者对基于信誉机制的分片策略进行研究。文献[19]提出了一种先对节点分类再进行网络分片的方案,划分分片时节点必须来自不同类别的分片,但未给出节点的具体划分原则,在实际应用中存在局限性。文献[20]针对网络分片中的节点合谋攻击提出了一种基于并行多链区块链的分片方案,该方案提高了区块链的安全性,但对于节点的行为特征没有具体的评判标准。文献[21]提出一种基于信任的分片TBSD方案,通过信任机制和遗传算法将恶意节点分配到不同的分片以预防恶意节点对单分片带来的安全问题,虽然在一定程度上防止了恶意节点串通的合谋攻击,但是当恶意节点比例比较高时难以保证分片的安全性。文献[22]提出了一种基于惩罚因子和信誉评分的分片模型,通过设置惩罚因子以减少恶意节点成为领导者的概率。文献[23]通过设置信誉机制来衡量节点行为,基于节点信誉等级实现恶意节点在分片中的均衡化,保证了系统的安全性并提高了系统的吞吐量。文献[24]设计了一种基于动态奖惩机制(MaOEA-DRP)的多目标优化算法,优化了区块链中节点分配的方式,在一定程度上降低了恶意节点聚集的概率,但是未考虑分片之间的可信度差异,低可信度的分片可能容易受到攻击。文献[25]提出了一个具有双链架构的区块链分片方案(RepChain),设计了交易链和信誉链以实现高效同步共识和增强系统安全性,但每个分片对交易链和信誉链的维护增加了系统的开销。文献[26]设计了基于奖惩机制的信誉方案,及早发现和标记恶意节点,使节点均匀分布,解决了高重配置延迟的问题。
虽然在上述方案中针对恶意节点随机性带来的安全攻击问题引入了信誉机制进行节点划分,从不同角度改进了基于节点的信誉,但现有的研究中信誉机制对于节点的异构性考虑不够全面,未能对节点的行为进行具体的细粒度定义和衡量。本文重点关注网络分片中节点的异构性,提出节点可信度评估机制以构建安全高效的区块链动态分片模型。所提模型充分考虑了节点的差异性,从自身性能和共识行为两个维度出发对节点评估,不仅有效避免了恶意节点的单点聚集带来的安全性问题,同时提高了系统的共识效率和性能。
2 节点可信度评估机制
2.1 节点可信度计算方法
为了确保网络分片后区块链系统的安全性并充分利用系统资源,本文基于P2P网络中的信任模型[27]并结合区块链分片的特点,建立节点可信度评估机制。区块链网络分片后,在设计可信度评估机制中仅考虑性能特征或行为特征作为衡量标准都是不全面且存在安全风险的,若仅侧重于节点的性能特征,则容易出现恶意节点,因为具有节点高性能而倾向于聚集在特定分片中,导致单一分片的安全性受到严重挑战,甚至存在被恶意节点接管的风险;反之,若仅根据节点的行为特征来评估其可信度而忽略了其性能特征,则不同分片之间的性能差异可能会变得显著,导致网络中的资源分配不均、负载不均衡,还可能引发系统瓶颈,最终影响整个区块链网络的性能和稳定性。
为了更全面、准确地评估区块链网络中节点的可信度,本文从节点行为和自身硬件性能两大维度量化评估节点。节点的性能可信度评估主要考虑节点的带宽、存储能力、CPU性能和处理能力,带宽越大、存储能力越强、CPU性能越好以及处理能力越快,节点的可信度评分就越高。而节点行为可信度则关注节点在共识验证中的参与数量、处理速度以及提交验证结果的准确性,若节点在共识验证中积极参与且提交的结果准确,其行为可信度就会提高。
1) 性能可信度
设有节点集Node={node1,node2,…,nodei,…,nodem},分片集Shard={shard1,shard2,…,shardj,…,shardn},交易列表集
Tx=Txshard1n1Txshard1n2…Txshard1ni…Txshard1nm,
Txshard2n1Txshard2n1…Txshard2ni…Txshard2nm…
Txshardjn1Txshardjn1…Txshardjni…Txshardjnm…
Txshardnn1Txshardnn2…Txshardnni…Txshardnnm
设每个分片中的节点总数为Shard_Node={sn1,sn2,…snj,…,snn}。
节点的性能可信度用于评估节点的自身硬件性能,分片 shardj(shardj∈Shard)中节点的性能可信度集可表示为P={Pshard1n1,Pshard1n2,…,Pshardjni,…,Pshardnnm},性能可信度P各属性定义为
PS=ps1:网络带宽ps2:存储能力ps3:CPU性能ps4:处理能力
其属性权重值表示为 λPS={λ1,λ2,λ3,λ4},其中0≤λk≤1,∑4k=1λk=1。分片j中节点i(nodeshardji)的性能可信度值Pshardjni的计算公式如下:
Pshardjni=∑4k=1λk×psk∑4k=1λk(1)
2) 行为可信度
节点的行为可信度用于衡量节点在区块链网络共识中所表现出的行为和操作的可信程度。行为可信度由共识可信度和响应可信度综合得到,节点是否积极参与共识、是否提交正确的信息以及是否能够及时响应区块链中的交易共识都会影响其行为可信度。分片j中节点i(nodeshardji)的行为可信度集可表示为B={Bshard1n1,Bshard1n2,…,Bshardjni,…,Bshardnnm},计算公式如下:
Bshardjni=α1C+α2R (2)
其中:α1和α2是共识可信度C和响应可信度R的可信度评分权重系数,α1+α2=1。
a)共识可信度C,衡量节点参与交易共识的验证准确性和可靠性。计算公式如下:
C=1-e-ηA(3)
其中:A为节点的共识准确性;η为共识准确性调整参数。
节点的共识准确性A值越接近于1,则说明节点的共识参与度和准确度越高,具有高可信度。A可表示为
A=δ1pcr+δ2pce+δ3pcn∑3k=1δk(4)
其中:PC=pcr:节点提交正确共识交易数量pce:节点提交错误共识交易数量pcn:节点拒绝提交共识交易数量,其属性权重值表示为δPC={δ1,δ2,δ3},δi是节点共识准确性判断参数,其中0≤δk≤1,δ1+δ2+δ3=1。
b)响应可信度R,衡量节点处理交易的速度,计算公式如下:
R=e-εtimeavg(5)
其中:timeavg为该epoch时期下节点平均交易验证时间;ε为参数,影响R函数的递减速度。timeavg的计算公式如下:
timeavg=∑txntx1 timetxitxn(6)
其中:timetxi=timerecv-timesend为该节点验证第i笔交易时所花费的时间,timesend为主节点向分片副本节点发送交易的时间,timerecv为主节点收到分片成员节点共识回复消息的时间。
3)综合可信度
利用加权平均方法,综合考虑节点的硬件性能和共识行为双重因素,根据节点性能和行为可信度的评分结果,通过对节点性能可信度和节点行为可信度的线性组合得到节点的综合可信度Credibilityshardjni,其评估公式如下:
Credibilityshardjni=β1Pshardjni+β2Bshardjni(7)
其中:β1和β2是节点性能和行为可信度的评分权重系数,0≤β1≤1,0≤β2≤1且β1+β2=1。
4)可信度阈值
由于每个分片的节点共识行为不一样,纪元(epoch)更新时分片中节点动态更新的情况也不同,所以引入可信度阈值用于量化评估每个分片中节点的平均性能和安全可靠度。
在区块链分片系统中,一个分片中有多个节点,利用每个节点的综合可信度,通过加权平均方法评估当前epoch时期内分片的可信度,计算分片内所包含节点的综合可信度平均值得到该分片的可信度阈值SCredibilitysj,计算公式如下:
SCredibilitysj=θ∑snji=1Credibilityshardjnisnj(8)
其中:θ为阈值调整参数。
2.2 节点可信度等级划分策略设计
基于节点综合可信度设计节点的等级划分策略,主要是在每一个epoch时期对分片中每个节点的综合可信度进行等级划分,根据节点等级对其进行随机分片,从而使得区块链分片更加安全、资源利用率更高。节点可以动态地加入和退出区块链网络以实现高可靠性的动态网络模型,根据定义的节点可信度阈值区间来评定节点等级,节点等级不同对应的权限也不同。
2.2.1 节点等级划分
根据综合可信度及可信度阈值区间可将节点分为高效可信节点、普通节点和恶意节点三个等级。节点可信度等级划分如表1所示。
a)高效可信节点。拥有最高的硬件性能和行为可信度,安全等级高且共识效率高,在进行内部共识时不仅参与分片内交易共识的处理和验证,同时用于竞选主节点。对于跨分片交易的处理,高效可信节点同步多个分片的信息,参与分片间的跨分片交易共识。
b)普通节点。用于参与交易共识验证,完成分片内部交易的处理,构建片内交易区块。
c)恶意节点。当节点的可信度因为恶意行为而降低到一定阈值时被认定为恶意节点,恶意节点无法进行转账、区块生成和担任主节点操作。考虑到分片中的节点数量较少,恶意节点的数量对于区块链分片系统的安全性容易造成攻击,因此直接将恶意节点剔除以降低拜占庭节点再次作恶的概率,从而提升系统的安全性。
2.2.2 节点可信度等级划分算法
为了降低节点划分算法的复杂度并提高节点划分效率,本模型采用可信度阈值区间来划分节点,而不是对所有节点的可信度值进行排序。通过直接将每个节点的可信度值与预先设定的阈值区间进行匹配可以快速确定节点的等级。基于上述思想设计了节点可信度等级划分算法,核心伪代码如算法1所示。
算法1 节点可信度等级划分算法
输入:NodeList,thresholds=[(t1,t2),(t2,t3),(t3,t4)]。
输出:NodeRanks。
NodeRanks=[]; // 初始化节点等级列表
for _, node∶=range NodeList "// 遍历节点列表
Cred ← node.credibility; // 获取节点的可信度
end for
for _, threshold∶=range thresholds /* 根据阈值区间划分节点等级 */
lowerBound=threshold[0];
upperBound=threshold[1];
if Credgt;lowerBound amp;amp; Cred lt;=upperBound
node.level ←Level(lowerBound,upperBound); /* 确定节点等级 */
end if
end for
NodeRanks←append(NodeRanks,node); //加入节点等级列表
return NodeRanks //返回节点等级列表
2.3 节点可信度更新流程设计
节点综合可信度更新流程主要分为请求发送阶段、消息广播阶段、消息验证阶段及可信度更新阶段,其涉及的符号如表2所示。
1)请求发送阶段
在一轮共识结束后计算节点的可信度,为每个分片中的每个节点生成可信度更新请求消息RequestC,客户端Client用私钥SKC对请求消息进行签名,并把公钥PKC、可信度更新请求RequestC及时间戳T1发送到每个分片中的主节点Primary。
Client→Primary:PK,〈〈RequestC,Viem,Digest〉,Sig(SK)(RequestC)〉,T1(9)
2)消息广播阶段
主节点Primary收到客户端Client发送的请求后生成广播消息BroadcastC,主节点用私钥SKp对广播消息进行签名,并把公钥PKp、广播消息BroadcastC及时间戳T2发送到分片中的所有共识节点。
Primary→Node:PKP,〈〈BroadcastC,Digest〉,Sig(SKP)(BroadcastC)〉,T2(10)
3)消息验证阶段
分片内的共识节点Node对收到的广播消息进行验证,验证过程包括对签名、消息内容和时间戳的检查,以确保可信度更新消息的准确性,验证通过后由主节点Primary生成回复消息ReplyC并返回给客户端Client。
Primary→Client:PKP,〈〈ReplyC,CredLink,Digest〉,Sig(SKP)(ReplyC)〉,T3(11)
4)可信度更新阶段
客户端Client验证收到的回复消息的准确性,确保无错误后向节点广播可信度列表更新消息UpdateC,每个分片中的所有节点收到消息后更新其综合可信度。
Client→Node:PKC,〈〈UpdateC,CredLink,Digest〉,Sig(SKC)(UpdateC)〉,T4(12)
3 基于节点可信度的区块链动态分片模型
针对区块链系统吞吐量低、交易延迟高、存储开销大等可扩展性瓶颈问题,将分片技术引入区块链系统,并且为解决区块链分片的安全性及负载问题,设计节点可信度评估机制,提出基于节点可信度的区块链动态分片模型,如图1所示。该模型的核心思想是通过分片技术和节点可信度评估机制将传统区块链网络随机划分为多个分片,每个分片独立运行,使用交易的哈希地址进行取模操作,将区块链网络中的交易列表映射到对应分片的交易池中,每个分片独立维护该分片的交易池。分片中的节点通过实用拜占庭容错共识算法(practical Byzantine fault tolerance,PBFT)对交易池中的交易进行验证,分片内的交易区块由片内共识上链、涉及多个分片的交易由特定的跨分片共识策略共识验证,共识验证后每个分片中通过共识形成的块只存储在分片内的节点中,每个节点并不存储所有的交易信息。每个节点不存储链上所有分片的块信息,避免了大量冗余存储带来的资源开销问题,减少了网络传输和数据存储开销,提高了系统效率。
3.1 动态网络分片流程
动态网络分片流程主要分为分片初始构建阶段、共识阶段、节点可信度评估阶段、网络分片重组与更新阶段。分片流程如图2所示。
3.1.1 分片初始构建阶段
a)初始化节点行为可信度Binit={Bshard1n1,…,Bshardjni,…,Bshardnnm}=0.5,根据性能可信度和综合可信度计算公式得到节点的初始综合可信度CredLinkinit。
CredLinkinit:Credibilitys1n1…Credibilitysmnn←CredInit(Pinit,Binit,CpTP,CpTC)(13)
b)利用基于节点可信度的分片策略Optshard将节点均分到每个分片中,以构建一个初始的区块链分片模型Shardinit。
Shardinit:Shard1init,…,Shardminit←ShardInitNodeLinks1,…,NodeLinksm,
CredLinkinit,Optshard(14)
c)客户端Client使用私钥SKC对初始分片结果Shardinit进行签名,并将其公钥PKC、Shardinit等信息发送至网络中所有节点。
Client→Node:{PKc,Shardinit,Sig(SKc)(Shardinit),T1epoch}(15)
3.1.2 共识阶段
d)各分片中的节点基于PBFT共识算法验证系统中的交易,在共识验证过程中,主节点Primary记录每个节点对于交易的处理情况Resultepoch,主要记录节点的共识行为、交易验证数量和验证每笔交易所花费的时间。
Resultepoch←ConsensusShard1init…Shardminit,Txs1…Txsm,OptPbft,T2epoch(16)
e)各分片中的主节点Primary利用其私钥SKP对交易处理结果Resultepoch进行签名,并将公钥PKP及交易处理结果发送到客户端Client。
Primary→Client:PKp,Resultepoch,Sig(SKp)(Resultepoch),T3epoch(17)
3.1.3 节点可信度评估阶段
f)在一个epoch时期结束后,计算每个节点的性能和行为可信度,组合计算出节点的综合可信度CredLinke。
CredLinke:Credibilitys1n1…Credibilitysmnn←EvaluateResultepoch,CpTPCpTB,CpTC,Tepoch(18)
g)各分片中的主节点Primary发送节点可信度列表CredLinke、公钥PKp和时间戳T4epoch及签名给客户端Client。
Primary→Client:PKp,CredLinke,Sig(SKp)(CredLinke),T4epoch(19)
h)节点的综合可信度CredLinke计算成功后,利用节点可信度等级划分策略Optclass划分节点类别。如果是恶意节点NodeListfe,从区块链分片系统中删除该类节点,不再参与后续共识。
NodeRank0e:NodeListse,NodeListne,NodeListfe←NodeClassCredLinke,Thresholds,Optclass(20)
NodeRank1e:NodeListse,NodeListne←NodeClassNodeListse,NodeListne,NodeListfe,Optdel(21)
3.1.4 分片重组与更新阶段
i)根据节点的综合可信度CredLinke以及分片中节点类别的情况NodeRank1e判断分片失效情况,对失效的分片进行重组。
Sharde+1:Shard1e+1…Shardme+1←ReBuildShard1e…Shardme,NodeRank1e,Optjudge,Optrebuild(22)
j)客户端Client对分片重组结果进行签名并将其广播到网络中所有节点Node。
Client→Node:PKc,Sharde+1,Sig(SKc)(Sharde+1),T5epoch(23)
k)所有节点对重组结果达成共识后,网络中的节点对可信度、交易状态信息进行同步和更新,以进入下一个时期Epoche+1的交易共识阶段。
Shard1e+1,…,Shard2e+1,…,Shardme+1←UpDate{Sharde+1,CredLinke+1,Optupdate}(24)
3.2 分片算法
本文提出了基于节点可信度等级的节点分片算法,其核心思想是通过可信度值来划分节点等级,将恶意节点移除以避免恶意节点集中在某个分区内造成的单分片接管;再对各等级类别中的节点列表进行随机划分,保证每个分片中普通节点和高效可信节点的分布近似均衡,提高了整个系统的鲁棒性,降低了被攻击的风险。基于可信度等级的节点分片算法如算法2所示。
算法2 节点可信度等级划分算法
输入:NodeList, Shard_Num。
输出:Shards。
for _, node∶=range NodeList // 评估节点可信度
node.credibility ← calculateCredibility();
end for
NodeRanks=CategorizeNodes(NodeList, thresholds); /*节点等级划分*/
Shards=InitializeShards(Shard_Num); //初始化分片列表
for _, NodeRank:=range NodeRanks
Nodes ← NodeRank.nodes; // 获取节点的可信度
RandomSharding(Nodes, Shards); /* 对节点进行随机均衡划分*/
end for
for shard in Shards:
if IsShardFaulty(shard) // 判断分片是否失效
HandleFaultyShard(shard); // 处理失效分片
end if
end for
return Shards //返回节点分片列表
4 安全性与复杂度分析
4.1 1%攻击
在区块链分片中,网络被划分为多个独立的分片,每个分片具有自己的一组节点负责独立验证交易和生成新的区块。由于分片后节点总数减少,与攻击整个未分片的区块链系统相比,攻击者更容易攻击分片系统中的单个分片,也称为1%攻击[28]。不合理的分片方式也会导致恶意节点可以轻易控制计算能力较低的分片,从而使该分片失效,影响整个系统的安全性和一致性。针对上述安全问题,本文模型通过以下两种方式有效降低了1%攻击的概率。
a)网络分片初始构建阶段。根据节点可信度评估机制对节点进行等级划分,充分考虑每个节点的硬件性能差异性。每类节点根据VRF生成随机数随机均分给每个分片,节点等级划分能够实现分片间计算能力的均衡化,随机分配确保了分片的随机性和不可预测性,保证了区块链系统的安全性。因此,在网络分片的初始构建过程中既不会出现节点数量太少的分片,也不会出现计算能力低下的分片,从而显著降低了1% 攻击的可能性,减少了恶意节点合谋攻击的可能性。
b)网络分片重组阶段。考虑节点的共识行为并计算节点的可信度,通过可信度评估机制可以高效准确地识别出恶意节点并立即将其从区块链分片系统中剔除,以确保区块链的动态负载平衡和持续安全性。在网络分片的重组过程中恶意节点数量减少,各分片间的性能和可靠性基本相近,从而显著降低了1% 攻击的可能性,减少了恶意攻击的风险。
4.2 拒绝服务攻击
在拒绝服务(denial of service,DoS)攻击中,攻击者向目标节点发送大量的无效交易请求以消耗目标节点的计算资源和带宽,从而使节点无法处理其他正常的交易与区块同步请求。然而在本文的模型中,假设攻击者试图发起DoS攻击,向分片系统中的目标节点发送大量交易请求。在分片系统中,每个分片shardj(shardj∈Shard)都由一组可信节点集合Node维护,对于交易请求Txsj={Txshardjn1,…,Txshardjni,…,Txshardjnm},其包含的公钥为PubKey(Txi),其中Txi∈Txsj。当交易请求Tx被分配到shardj时,shardj的可信节点会检查其维护的请求列表,若不存在PubKey(Txi)的请求记录,即PubKey(Tx)PubKey(Txi),则系统会拒绝该交易请求,不进行上链共识,从而阻止其广播到整个网络,以此抵御其后续的DoS攻击。
4.3 拜占庭攻击
在PBFT共识机制中,区块链共识节点最多只能存在三分之一的恶意节点才能保证共识的绝对安全。假设基于PBFT共识算法的区块链系统中共识节点总数为Nodesum,要保证共识的安全性,则恶意节点数f应满足的条件如式(9)所示。
f≤Nodesum-13」(25)
对于片内采用PBFT类共识算法的区块链分片系统而言,假设将共识节点总数为Nodesum的区块链系统进行网络分片,分片数量为Shardsum,为了保证系统的安全性,每个分片中恶意节点数f′应满足的条件如下所示:
f′≤Nodesum/Shardsum-13」(26)
由式(25)(26)可见,当分片中拜占庭节点达到阈值时,系统就会出现安全故障问题,由此可知传统的采用PBFT共识的区块链分片系统虽然提高了区块链的吞吐量、时延等性能,但由于每个分片独立共识,片内的共识节点数量减少,拜占庭攻击概率大增。而本文模型采用了节点可信度评估机制,当共识的节点被评估为恶意节点后将直接将其移出共识节点组,大大降低了恶意节点继续作恶的概率,提高了分片后系统的容错能力和抗攻击能力,极大地增强了系统的安全性。
4.4 复杂度分析
假设区块链分片网络中的节点数量为n,分片数量为m,每个区块的大小为b,节点可信度阈值区间个数为t。当客户端发起交易时,这些交易将发送到每个分片中的主节点,主节点负责在分片内广播交易,此过程的时间复杂度为Ο(m);随后,主节点生成大小为b的交易列表区块,并将区块广播到所有分片节点,时间复杂度也为Ο(m);由于区块大小为b,其时间复杂度是Ο(m2/b);除此之外,如果是跨分片交易,则会增加Ο(n)的跨分片开销,这与OmniLeger方案[10]一样。因此,总的共识时间复杂度为Ο(m2/b+n)。在分片重配置阶段,设计了基于节点可信度等级的网络分片算法,其时间复杂度为Ο(nt)+Ο(m)。由于t通常为一个较小的数量,可以视其为Ο(1),所以算法的时间复杂度可以简化为Ο(n)+Ο(m)。
5 实验分析
5.1 实验环境配置
为验证本文模型的可用性和有效性,基于GoLand开发软件利用Go语言编写程序并进行性能测试。实验过程中,本文以以太坊的真实转账交易数据作为数据来源,区块交易大小为500笔交易,出块时间设置为3 s,采用PBFT共识算法。实验详细环境配置如表3所示。
5.2 可信度分析
5.2.1 节点可信度变化情况
在验证节点交易行为对可信度的影响过程中,设定诚实节点和恶意节点初始的行为可信度均为0.5。本文模拟了诚实节点在每一轮的共识中以正确的方式执行交易行为,而恶意节点则以拒绝提交共识消息或提交错误消息的方式表现恶意行为,图3记录了节点可信度的变化情况。
从图3(a)中诚实节点的可信度变化情况可以看出,随着交易轮次的增加,诚实节点由于执行正确的共识行为,节点行为可信度逐渐增加,其综合可信度值不会降低,从而不会因为低于片可信阈值而被剔除区块链分片网络。从图3(b)中可知,由于恶意行为的影响,恶意节点的行为可信度逐渐降低,一旦低于片可信阈值,在下一轮的分片重组中此类节点将被系统剔除。实验结果表明,可信度评估机制能够根据节点行为及时准确地评估恶意节点,减少恶意节点的数量,进而确保整个系统的稳定性和安全性。
5.2.2 恶意节点占比
为了验证本文模型评估恶意节点的准确性,对模型进行实验测试以研究随着共识轮次的逐渐增加,区块链分片网络中恶意节点占比的变化情况,测试结果如图4所示。从图4可以看出,在缺乏可信评估机制的情况下,恶意节点数量占比一直保持不变;而在本文模型中引入可信度评估机制后,恶意节点数量呈现出逐渐减少的趋势,这是因为本文模型在分片重组时会根据可信度评估结果周期性剔除网络中的恶意节点,减少了网络中恶意节点的数量,从而使得网络中恶意节点的比例下降。实验结果表明,该模型在共识轮次达到10次左右时,恶意节点占比降至2%左右,具有较高的评估准确率,显著提高了系统的容错能力,有助于减轻恶意节点对区块链分片网络的潜在威胁。
5.3 区块链分片性能分析
1)吞吐量
吞吐量是衡量区块链交易处理能力的重要指标,在不同节点数量下对传统未分片的区块链模型与本文模型(CBDSM)进行了吞吐量测试,本文模型设置每10个节点增加一个分片,测试结果如图5所示。从图中可以看出,随着节点数量的增加,传统未分片的区块链模型的吞吐量逐渐下降,而本文模型呈现出递增的趋势。原因是未分片的区块链模型需要所有节点参与交易验证和共识过程,节点数量增加会造成系统负荷增大,导致吞吐量下降;而本文模型在节点数量增加时分片数量也动态增加,使得系统处理能力得到提升。实验结果表明,本文模型在吞吐量方面明显优于传统未分片的区块链模型。由此可见,本文模型能更好地适应高负载情况下的交易需求,能够实现吞吐量随节点数量线性关系的增长,具备较好的可扩展性。
2)存储开销
为了验证本模型在存储开销方面的优势,本节设置节点数量为50个,分片数量为5个,对本文模型和未分片模型测试不同交易数量下其存储开销情况,测试结果如图6所示。从图中可以看出,当交易数量为300 000笔时,未分片模型存储开销为32 700 KB;而本文模型最大的存储开销为18 946 KB,平均存储开销仅为14 325 KB左右。相比而言,本文模型在存储开销上节省了44%左右,原因是本文模型分片后,每个节点只需存储本分片内的交易区块信息,而传统模型中每个节点需存储所有区块的信息。此外,随着网络规模的扩大,传统未分片区块链系统的存储开销也会随之大增,但本文模型会动态调整分片数量以进一步分担存储和共识压力。由此可见,本文模型能够有效降低系统的存储压力,节省大量的存储和资源开销,提升系统资源利用率。
3)共识失败率
区块链分片后,每个分片中的节点独立参与片内共识协议,片内恶意节点数量过多会严重影响区块链系统的出块速率和可用性。若片内主节点为恶意节点会增大PBFT共识协议中视图转换的频率,进而降低系统的共识准确率和效率。为了验证这一点,本节测试了随机分片模型(RSM)和本文模型在不同恶意节点下共识失败的情况。设置区块链分片网络中节点总数为100个,分片数量为10个,交易总数为1 000,实验结果如图7所示。由图7可知,RSM模型随着恶意节点数量的增加,共识失败率逐渐递增且当恶意节点数量达到33个时,共识失败率达到了0.63;而本文模型基本在0.15~0.25,且当恶意节点数为35时共识失效率只有0.248,相比于RSM下降了46.7%。主要原因是本文模型利用可信度机制对节点评估,并在共识过程中周期性地剔除了恶意节点,从而减少了恶意节点对共识的影响,显著降低了共识失败率,保证了PBFT共识安全以及高效且稳定运行。
5.4 对比分析
5.4.1 各分片方案对比
在本节中,本文模型与其他多种分片方案进行了详细的分析比较,表4为各种方案的功能性对比。除了OmniLeger和RapidChain外,其他方案都基于可信度进行节点划分,以增强系统的安全性。相比于现存的基于可信度的分片方案RepChain和Cuckchain,CBDSM方案全面考虑了节点的行为和性能特征并设计了恶意节点的剔除机制,进一步保证了系统的安全。
各分片方案的性能对比如表5所示。在吞吐量和时延方面,CBDSM方案表现出最好的性能;在容错性上,因对恶意节点的准确识别和去除而提高了系统的容错性;在复杂度上,虽然RapidChain和Cuckchain的时间复杂度表现较好,但是RapidChain为了解决跨分片交易而产生了大量的事务,显著降低了系统的吞吐量,而Cuckchain中安全风险较大。
以下从分片失效率、容错性、吞吐量、时延和分片负载五个关键维度进行深入分析,对比了本文模型与随机分片模型、地址取模分片模型(AMSM)和Monoxide分片模型[12]。在RSM中节点随机地分配到不同的分片中,由于节点分布是随机的,并未考虑节点的行为和功能特征,极易造成系统中节点分片不均衡,进而产生恶意节点单点聚集和负载不均的问题;AMSM根据地址信息将节点映射到不同的分片,然而这种预测性的分片方式极易受到攻击威胁;Monoxide分片模型采用POW的方式进行分片,这种基于算力的分配方式一方面在一定程度上牺牲了去中心化,另一方面也会带来巨大的资源开销。本文模型在前述模型的基础上进行了优化与改进,相对于现有模型,其在安全性、吞吐量以及时延等方面表现出了显著的优势。
5.4.2 分片失效率对比
分片失效率是衡量网络分片有效性的重要指标,分片失效率定义为失效的分片数量占分片总数的比例,计算方式如式(27)所示。分片失效率越大,说明网络分片恶意节点聚集在极少部分分片的概率越高,存在的安全性隐患就越大。
FailureRate=shardfailshardsum×100%(27)
其中:shardfail、shardsum分别代表失败的分片数量和分片总数量。
为了全面评估本文模型与其他分片模型在分片失效率方面的表现,本节测试了不同恶意节点比例下各模型的分片失效率,结果如图8所示。总体而言,随着恶意节点占比的增加,各模型的失效率均呈上升趋势,相比而言,CBDSM表现出最低的分片失效率以及较小的失效率增长量。具体而言,当恶意节点占比达到30%时,RSM的平均分片失效率为43.1%,AMSM和Monoxide模型达到了40%,而CBDSM仅为6%。这归因于本文模型设计了节点可信度评估机制,通过评估节点可信度识别并及时剔除恶意节点,从而显著降低了恶意节点聚集在少数分片的概率,进而有效减少分片失效的情况。可见,本文模型能够显著提高分片的有效性,具备更强的抗攻击能力和系统稳健性。
5.4.3 容错性对比
容错性是指系统能够在一定程度的节点宕机、共识失败或部分节点提交了恶意行为的情况下仍能够正常运行的能力。在区块链系统中,容错性通常用式(28)来计算。
F=N-13(28)
其中:F是可以容忍的拜占庭错误节点数;N是总的节点数。
在CBDSM中由高效可信节点和普通节点参与共识,假设在模型中系统的高效可信节点和普通节点总数为Nc,可以容纳的拜占庭节点数为Fc,为了保证共识的安全可靠,Fc需要满足的条件如下所示:
Fc≤Nc2(29)
在RSM和AMSM中,由于系统采用PBFT进行共识,假设在模型中系统的高效节点总数为Np,可以容纳的拜占庭节点数为Fp,要保证共识的绝对安全,可以容忍的最大拜占庭节点总数应满足的条件如下所示:
Fp≤Np-12(30)
假设在区块链网络中参与共识的节点规模相同,即Nc=Np,通过式(31)计算可得Fcgt;Fp。
Fc-Fp=Nc2-Np-13=Nc+13(31)
由于Nc和Np相同且都大于0,所以容易得到Fcgt;Fp恒成立。也就说明在网络节点规模相同的情况下,本文模型能够容忍更多的恶意节点,具有更高的容错性,能更好地抵抗故障和攻击,保证数据的一致性和安全性。
5.4.4 吞吐量对比
将CBDSM与RSM、AMSM和Monoxide模型进行对比,测试了在不同分片数量条件下各模型的吞吐量情况,实验结果如图9所示。在分片数量一致的情况下,CBDSM表现出最高的吞吐量,在分片数量不断增加的情况下,它的吞吐量增长幅度更为显著。具体来说,分片数量从10个增加至12个时,RSM、AMSM和Monoxide模型的吞吐量增加量分别为172 TPS、171 TPS和271 TPS,而CBDSM的吞吐量却增加了380 TPS。由此可见,CBDSM能够满足网络规模不断增长的需求,较其他模型而言,在大规模区块链网络中CBDSM具有更为明显的优势,更加适用于大规模的区块链网络。
5.4.5 时延对比
本节对比了CBDSM与其他分片模型在不同分片数量下的时延情况,以全面评估模型的时延表现,测试结果如图10所示。总体而言,随着分片数量的增加,RSM、AMSM、Monoxide和CBDSM模型的时延均呈现递减的趋势,这归因于分片后多个分片并行执行交易,从而有效提高了整体的处理效率。相比而言,CBDSM在各个分片数量下一直表现出最低的时延,以分片数量为10为例,RSM和AMSM模型的时延均为3.76 s,Monoxide模型为3.41 s,而CBDSM仅为3.07 s。其原因是该模型有效剔除了恶意节点的不良影响,避免了因恶意节点当选主节点引发频繁视图转换而带来的时间开销,从而显著减少了交易确认的时间;同时该模型通过将每类节点均衡分配到各分片实现了节点资源的有效利用,进一步提高了系统的整体处理效率。因此,本文模型在共识时延方面具有显著优势,能够满足实际应用场景的需求。
5.4.6 分片负载均衡对比
分片间算力的不均衡会给区块链分片的性能造成巨大损失,是导致区块链分片系统低吞吐量、高时延的重要因素[29]。为了验证本文模型在分片负载均衡方面的优势,本节设置分片数量为16,对RSM、AMSM、Monoxide和CBDSM进行测试,统计每个分片的交易负载情况,测试结果如图11所示。从图11可以看出,AMSM和Monoxide分片间的负载变化波动明显,在AMSM和Monoxide模型中交易最大差分别为2 030 tx和3 588 tx;相比之下,CBDSM最大的交易差仅为325 tx,降低了一个数量级。此外,虽然RSM模型没有明显的差距,但CBDSM表现得更加稳定,负载更均衡。其主要原因在于该模型对节点进行可信度评分时充分考虑了节点的性能差异,实现了节点的均衡划分,使得节点资源能够得以均衡利用,从而保证了分片之间对于交易的处理能力基本一致。由此可见,本文模型在保障高可靠性的同时能较好地实现交易负载平衡,提升系统的整体性能,实现了资源利用的最大化。
6 结束语
为了解决区块链分片单点聚集引发的安全性和性能瓶颈,本文提出基于节点可信度的区块链动态分片模型。通过设计节点可信度评估机制实现细粒度的节点能力和可靠性评估,有效避免了单点聚集和合谋攻击问题,同时基于节点等级的动态分片方式有效地保证了分片间均衡的可信度水平,保证了负载均衡,减少了分片重组带来的资源开销。通过实验证明,本文模型能够在确保性能稳定的前提下实现分片间的负载均衡,解决恶意节点引发的安全性及性能问题,相比于现有模型,具有更好的容错性、更低的分片失效率和更高的安全性。下一步工作将侧重于区块链分片的跨分片交易处理和共识问题,着力解决区块链分片共识效率,以构建更高效的区块链分片模型。
参考文献:
[1]发改委. 中华人民共和国国家发展和改革委员会. 中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要 [EB/OL]. [2024-04-06]. https://www.gov.cn/x-inwen/2021-03/13/content_5592681.htm. (National Development and Reform Commission. The 14th 5-Year Plan for national economic and social development of the People’s Republic of China and the outline of the long-range goals to 2035 [EB/OL]. [2024-04-06]. https://www.gov.cn/x-inwen/2021-03/13/content_5592681.html.)
[2]中国电子信息产业发展研究院. 2022-2023中国区块链年度发展报告 [R/OL]. (2023-06-26)[2024-04-06]. https://www.ccidgroup.com/info/1155/37746.htm. (China Center for Information Industry Development. China blockchain annual development report 2022-2023 [R/OL]. (2023-06-26) [2024-04-06]. https://www.ccidgroup.com/info/1155/37746.htm.)
[3]Sanka A I, Cheung R C C. A systematic review of blockchain sca-lability: issues, solutions, analysis and future research [J]. Journal of Network and Computer Applications, 2021, 195(12): 103232.
[4]Hafid A, Hafid A S, Samih M. Scaling blockchains: a comprehensive survey [J]. IEEE Access, 2020, 8: 125244-125262.
[5]Nasir M H, Arshad J, Khan M M, et al. Scalable blockchains: a systematic review [J]. Future Generation Computer Systems, 2022, 126(1): 136-162.
[6]Liu Yizhong, Liu Jianwei, Salles M A V, et al. Building blocks of sharding blockchain systems: concepts, approaches, and open problems [J]. Computer Science Review, 2022, 46(11): 100513.
[7]Li Yi, Wang Jinsong, Zhang Hongwei. A survey of state-of-the-art sharding blockchains: models, components, and attack surfaces [J]. Journal of Network and Computer Applications, 2023, 217(8): 103686.
[8]陈晶,杨浩,何琨,等. 区块链扩展技术现状与展望[J]. 软件学报, 2024, 35(2): 828-851. (Chen Jing, Yang Hao, He Kun et al. Current situation and prospect of blockchain scaling technology [J]. Journal of Software, 2024, 35(2): 828-851.)
[9]Luu L, Narayanan V, Zheng Chaodong, et al. A secure sharding protocol for open blockchains [C]// Proc of ACM SIGSAC Conference on Computer and Communications Security. New York: ACM Press, 2016: 17-30.
[10]Kokoris-Kogias E, Jovanovic P, Gasser L, et al. OmniLedger: a secure, scale-out, decentralized ledger via sharding [C]// Proc of IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE Press, 2018: 583-598.
[11]Zamani M, Movahedi M, Raykova M. RapidChain: scaling blockchain via full sharding [C]// Proc of ACM SIGSAC Conference on Computer and Communications Security. New York: ACM Press, 2018: 931-948.
[12]Wang Jiaping, Wang Hao. Monoxide: scale out blockchains with asynchronous consensus zones[C]// Proc of the 16th USENIX Symposium on Networked Systems Design and Implementation. Berkeley, CA: USENIX Association, 2019: 95-112.
[13]Dang H, Dinh T T A, Loghin D, et al. Towards scaling blockchain systems via sharding [C]// Proc of International Conference on Ma-nagement of Data. New York: ACM Press, 2019: 123-140.
[14]Zhang Jianting, Hong Zicong, Qiu Xiaoyu, et al. SkyChain: a deep reinforcement learning-empowered dynamic blockchain sharding system [C]// Proc of the 49th International Conference on Parallel Processing. New York: ACM Press, 2020: article No.3.
[15]Yun J, Goh Y, Chung J M. DQN-based optimization framework for secure sharded blockchain systems [J]. IEEE Internet of Things Journal, 2020, 8(2): 708-722.
[16]Yang Zhaoxin, Yang Ruizhe, Yu F R, et al. Sharded blockchain for collaborative computing in the Internet of things: combined of dynamic clustering and deep reinforcement learning approach [J]. IEEE Internet of Things Journal, 2022, 9(17): 16494-16509.
[17]Cai Zhongteng, Liang Junyuan, Chen Wuhui, et al. Benzene: sca-ling blockchain with cooperation-based sharding [J]. IEEE Trans on Parallel and Distributed Systems, 2022, 34(2): 639-654.
[18]Hong Zicong, Guo Song, Li Peng. Scaling blockchain via layered sharding [J]. IEEE Journal on Selected Areas in Communications, 2022, 40(12): 3575-3588.
[19]Xu Yibin, Huang Yangyu. An n/2 Byzantine node tolerate blockchain sharding approach [C]// Proc of the 35th Annual ACM Symposium on Applied Computing. New York: ACM Press, 2020: 349-352.
[20]李皎, 王煜田, 高耀芃. 一种抗合谋攻击的区块链网络分片算法 [J]. 计算机应用研究, 2023, 40(1): 28-32,41. (Li Jiao, Wang Yutian, Gao Yaopeng. Anti-collusion attack network sharding algorithm for blockchain [J]. Application Research of Computers, 2023, 40(1): 28-32,41.)
[21]Yun J, Goh Y, Chung J M. Trust-based shard distribution scheme for fault-tolerant shard blockchain networks [J]. IEEE Access, 2019, 7: 135164-135175.
[22]Halgamuge M N, Hettikankanamge S C, Mohammad A. Trust model to minimize the influence of malicious attacks in sharding based blockchain networks [C]// Proc of the 3rd IEEE International Conference on Artificial Intelligence and Knowledge Engineering. Piscataway, NJ: IEEE Press, 2020: 162-167.
[23]王梦楠, 黄建华, 邵兴辉, 等. 基于信誉的区块链分片共识方案 [J]. 计算机科学, 2022, 49(10): 297-309. (Wang Mengnan, Huang Jianhua, Shao Xinghui, et al. Reputation-based blockchain sharding consensus scheme [J]. Computer Science, 2022, 49(10): 297-309.)
[24]Cai Xingjuan, Geng Shaojin, Zhang Jingbo, et al. A sharding scheme-based many objective optimization algorithms for enhancing security in blockchain enabled industrial Internet of things [J]. IEEE Trans on Industrial Informatics, 2021, 17(11): 7650-7658.
[25]Huang Chenyu, Wang Zeyu, Chen Huangxun, et al. RepChain: a reputation-based secure, fast, and high incentive blockchain system via sharding [J]. IEEE Internet of Things Journal, 2021, 8(6): 4291-4304.
[26]Tian Junfeng, Jing Caishi, Tian Jin. CuckChain: a cuckoo rule based secure, high incentive and low latency blockchain system via sharding [C]// Proc of IEEE Symposium on Computers and Communications. Piscataway, NJ: IEEE Press, 2023: 1228-1234.
[27]Xiong Li, Liu Ling. PeerTrust: supporting reputation-based trust for peer-to-peer electronic communities [J]. IEEE Trans on Know-ledge and Data Engineering, 2004, 16(7): 843-857.
[28]Sharding FAQ [EB/OL]. (2022-05-24)[2024-04-06]. https://github.com/ethereum/wiki/wiki/Sharding-FAQs/c54cf1b520b0bd0-7468bee6950cda9a2c4ab4982.
[29]Li Mingzhe, Wang Wei, Zhang Jin. LB-Chain: load-balanced and low-latency blockchain sharding via account migration [J]. IEEE Trans on Parallel and Distributed Systems, 2023, 34(10): 2797-2810.