一种基于区块链的数据存储方法及系统与流程

文档序号:16465947发布日期:2019-01-02 22:47阅读:310来源:国知局
一种基于区块链的数据存储方法及系统与流程

本发明涉及区块链技术领域,特别是涉及一种基于区块链的数据存储方法及系统。



背景技术:

区块链技术集合演算法、数学、密码学与经济模型等技术,基于点对点网路关系,建立信任机制,成为一个不需基于彼此信任基础、也不需依赖单一中心化机构便能够运作的分散式系统。

由于区块链技术需要存储每个区块,并且后一个区块需要记录前一个区块的哈希值,依此方式形成一种不可篡改的数据链条,因此,当区块数量增加时,区块链技术需要较大可用存储容量以存储更长的数据链条,导致区块链节点的可用存储容量不够,影响区块链的可靠性。



技术实现要素:

本发明实施例一个目的旨在提供一种基于区块链的数据存储方法及系统,其能够提高区块链的工作可靠性。

为解决上述技术问题,本发明实施例提供以下技术方案:

在第一方面,本发明实施例提供一种基于区块链的数据存储方法,所述方法包括:

主链的代理节点检测自身的可用存储容量是否大于预设存储阈值;

若大于,所述主链的代理节点记录待转移的起始区块与终止区块之间的全部区块的区块编号;

所述主链的代理节点向所述主链上预设的节点地址对应的侧链的代理节点发送所述全部区块;

所述侧链的代理节点向所述侧链的共识节点发送所述全部区块,以使所述侧链的共识节点共识验证所述全部区块;

所述侧链的共识节点识验证通过所述全部区块,将所述全部区块存储于所述侧链上预设的节点地址对应的侧链内容服务器;

所述主链的代理节点检测到所述全部区块在所述侧链通过共识验证后,所述主链的代理节点全网广播区块转移信息;

所述主链中各个节点根据所述区块转移信息删除所述全部区块。

可选地,所述方法还包括:

所述主链的代理节点在所述终止区块后添加新区块时,获取所述终止区块的哈希值,并将所述终止区块的哈希值作为所述新区块中区块头的一项特征值。

可选地,所述方法还包括:

所述主链的代理节点接收查询请求时,向所述侧链的代理节点发送区块获取请求;

所述侧链的代理节点根据所述区块获取请求,向预设节点地址对应的主链内容服务器发送所述全部区块;

所述主链的代理节点访问所述主链内容服务器并获取所述全部区块;

所述主链的代理节点根据所述全部区块中起始区块与终止区块的区块编号,按照编号顺序,在已存储的区块链条上装配上所述全部区块。

可选地,所述侧链的代理节点根据所述区块获取请求,向预设节点地址对应的主链内容服务器发送所述全部区块后,所述方法还包括:

所述侧链的代理节点复制并存储所述全部区块。

可选地,所述侧链的代理节点根据所述区块获取请求,向预设节点地址对应的主链内容服务器发送所述全部区块,包括:

所述侧链的代理节点根据所述区块获取请求,确定所述全部区块中起始区块与终止区块在所述侧链上的区块编号;

所述侧链的代理节点根据所述全部区块中起始区块与终止区块在所述侧链上的区块编号,从所述侧链上的区块链条上截取出所述全部区块;

所述侧链的代理节点执行所述侧链上智能合约,将所述全部区块各个区块在所述侧链上的区块编号转换成在所述主链上的区块编号;

所述侧链的代理节点向预设节点地址对应的主链内容服务器发送转换成在所述主链上的区块编号对应的全部区块。

可选地,所述方法还包括:

若小于,所述主链中各个节点继续存储区块。

在第二方面,本发明实施例提供一种基于区块链的数据存储系统,所述系统包括主链与侧链;

主链的代理节点检测自身的可用存储容量是否大于预设存储阈值;

若大于,所述主链的代理节点记录待转移的起始区块与终止区块之间的全部区块的区块编号;

所述主链的代理节点向所述主链上预设的节点地址对应的侧链的代理节点发送所述全部区块;

所述侧链的代理节点向所述侧链的共识节点发送所述全部区块,以使所述侧链的共识节点共识验证所述全部区块;

所述侧链的共识节点识验证通过所述全部区块,将所述全部区块存储于所述侧链上预设的节点地址对应的侧链内容服务器;

所述主链的代理节点检测到所述全部区块在所述侧链通过共识验证后,所述主链的代理节点全网广播区块转移信息;

所述主链中各个节点根据所述区块转移信息删除所述全部区块。

可选地,所述主链的代理节点在所述终止区块后添加新区块时,获取所述终止区块的哈希值,并将所述终止区块的哈希值作为所述新区块中区块头的一项特征值。

可选地,所述主链的代理节点接收查询请求时,向所述侧链的代理节点发送区块获取请求;

所述侧链的代理节点根据所述区块获取请求,向预设节点地址对应的主链内容服务器发送所述全部区块;

所述主链的代理节点访问所述主链内容服务器并获取所述全部区块;

所述主链的代理节点根据所述全部区块中起始区块与终止区块的区块编号,按照编号顺序,在已存储的区块链条上装配上所述全部区块。

可选地,所述侧链的代理节点复制并存储所述全部区块。

在本发明各个实施例提供的基于区块链的数据存储方法及系统中,首先,主链的代理节点检测自身的可用存储容量是否大于预设存储阈值;若大于,所述主链的代理节点记录待转移的起始区块与终止区块之间的全部区块的区块编号;所述主链的代理节点向所述主链上预设的节点地址对应的侧链的共识节点发送所述全部区块;所述侧链的共识节点在所述侧链上共识验证所述全部区块;所述侧链的共识节点识验证通过所述全部区块,将所述全部区块存储于所述侧链上预设的节点地址对应的侧链内容服务器;所述主链的代理节点检测到所述全部区块在所述侧链通过共识验证后,所述主链的代理节点全网广播区块转移信息;所述主链中各个节点根据所述区块转移信息删除所述全部区块。因此,由于主链中各个节点能够在可用存储容量不够时,将部分或全部的区块转移并存储在侧链中,于是,主链中各个节点便有更多可用存储容量,以便主链中各个节点能够更加可靠地存储区块数据,提高了主链的工作可靠性。

附图说明

一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。

图1是本发明实施例提供一种区块链网络的架构模型示意图;

图2是本发明实施例提供一种区块链系统的结构示意图;

图3是本发明实施例提供一种基于区块链的数据存储方法的流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

区块链技术亦称为分布式账本技术,是一种分布式互联网数据库技术。基于区块链技术构建的网络可以称之为区块链网络,区块链网络包含多个区块链节点,每一个节点对应至少一个区块链,每一个区块链上至少包含一个区块。区块链技术具备去中心化、公开透明、不可篡改、可信任等特点,因此,区块链技术应用领域越来越广泛。

请参阅图1,图1是本发明实施例提供一种区块链网络的架构模型示意图。如图1所示,该区块链网络100包括数据层11、网络层12、共识层13以及智能合约层14。

数据层11封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法。网络层12包括分布式组网机制、数据传播机制和数据验证机制等等。共识层13封装网络节点的各类共识算法。智能合约层14封装各类脚本、算法和智能合约。

本发明实施例的基于区块链的数据存储方法可以在任何合适类型、具有运算能力的区块链节点中执行,例如服务器、台式计算机、智能手机、平板电脑以及其他电子产品中。其中,此处的服务器可以是一个物理服务器或者多个物理服务器虚拟而成的一个逻辑服务器。服务器也可以是多个可互联通信的服务器组成的服务器群,且各个功能模块可分别分布在服务器群中的各个服务器上。

本发明实施例提供的区块链包括诸如公有区块链(publicblockchains)、联合区块链(consortiumblockchains)及私有区块链(privateblockchains)。

请参阅图2,图2是本发明实施例提供一种区块链系统的结构示意图。如图2所示,区块链系统200包括主链300与侧链400,主链300与侧链400通过侧链协议互相通讯。

主链300或侧链400皆包括普通节点51、代理节点52及共识节点53。

普通节点51与代理节点52通讯连接,代理节点52还与共识节点53通讯连接。其中,各个区块链节点之间的通讯支持点对点通讯方式(pointtopointcommunication,p2p)。

其中,主链300的代理节点可与侧链400的代理节点互相通讯。

普通节点51持有流通的电子货币,在区块链系统中拥有投票选举的权利。普通节点51可以进行相关交易操作,但是没有区块的打包记账权,只能从拥有打包记账权的相关节点处同步记录区块数据。

代理节点52编写有智能合约代码,普通节点51向代理节点52发送原始区块数据,触发代理节点52的智能合约,使得代理节点的智能合约执行原始区块数据。其中,普通节点51维护有智能合约列表,该智能合约列表记录能够执行智能合约的各个代理节点名单。每当普通节点51接收到区块的原始数据时,普通节点51调取智能合约列表,从智能合约列表中查找出各个代理节点的地址,并向各个代理节点发送区块的原始数据。

在本实施例中,代理节点52可以预存多种类型智能合约,其可以根据普通节点51发送的触发请求,解析出智能合约的执行类型。代理节点52再根据解析出的智能合约的执行类型,执行对应的智能合约。

当某个代理节点陷入故障,其余代理节点将该某个代理节点的地址广播至全网,普通节点51监测到该广播信息,并更新智能合约列表,后续发送区块的原始数据时,普通节点51不向该某个代理节点52发送数据,以提高工作效率。智能合约的代码是根据业务场景逻辑编写的。

代理节点52根据智能合约执行原始区块数据后,输出待验证的区块数据。接着,代理节点52还将待验证的区块数据作签名,并将签名后的区块数据打包发送至共识节点53。共识节点53利用代理节点52的公钥验证签名后的区块数据,若验证成功,则认为该签名后的区块数据是合法代理节点52发送的,后续接着对该区块数据进行共识处理。若验证未成功,则认为该签名后的区块数据是非法代理节点52发送的。例如,代理节点52使用自身私钥对当前区块的哈希内容作签名运算,得到该签名。

共识节点53用于共识验证代理节点52上传的区块数据。其中,共识节点53可以支持以下任意一种共识算法:工作量证明(proofofwork,pow)、权益证明(proofofstake,pos)、股份授权证明(delegateproofofstake,dpos)、实用拜占庭容错(practicalbyzantinefaulttolerance,pbft)、授权拜占庭容错(delegatedbyzantinefaulttolerance,dbft)等等。

每个共识节点53皆需要在代理节点52注册,待注册成功后,该共识节点便为合法共识节点。注册过程如下:

1、共识节点53向代理节点52提交注册信息。

其中,该注册信息包括以下一种或多种信息:共识节点53的设备序列号sn、用户信息及矿工钱包地址。

2、代理节点52对注册信息进行检查。

检查过程包括:检测sn编号格式是否正确、sn是否存在数据库中、sn是否已被绑定了其他用户等等。

3、代理节点52记录注册信息。

4、代理节点52将注册结果返回给共识节点53。

5、代理节点52将新的注册数据广播至区块链系统200。

在上述区块链系统200中,区块是用于存储交易摘要信息的载体,每个区块皆包含区块头与区块体,区块头记载的信息用于标识区块本身、前一个区块的信息摘要以及区块在整个账本中的位置。区块体用于存储交易摘要信息以及验证交易信息并保存交易不被篡改。

区块链为将每个区块按照生成时间的顺序逐个连接起来,便形成了一个链式的数据存储结构。在整个区块链中,第一个区块称为创世区块,其区块高度为0,之后的每个区块的区块高度依次加1,并且在区块头中写入前一个区块头的哈希值。区块链上的各个区块之间由各个区块上的上一个区块头哈希值进行链接。

请参阅图3,图3是本发明实施例提供一种基于区块链的数据存储方法。如图3所示,基于区块链的数据存储方法s700包括:

s71、主链的代理节点检测自身的可用存储容量是否大于预设存储阈值,若大于,跳转至s72。若小于,跳转至s78。

每个代理节点皆有存储空间,存储空间包括必需存储空间与非必需存储空间,必需存储空间用于存储代理节点正常工作所需的逻辑代码,非必需存储空间用于存储区块数据。随着区块链的区块高度日益增加,非必需存储空间的可用存储容量越来越少,当区块链的区块高度增加到使得代理节点工作效率变得异常缓慢时,此时,为了维护区块链系统的正常运行,需要降低代理节点的存储负荷。

预设存储阈值由用户自定义。在一些实施例中,可用存储容量还可以根据设计需求自行定义,并非一定是非必需存储空间当前剩余的可用存储容量,甚至可以将小于当前剩余的可用存储容量的警报存储容量作为与预设存储阈值比较的可用存储容量。

s72、若大于,主链的代理节点记录待转移的起始区块与终止区块之间的全部区块的区块编号;

待转移的起始区块与终止区块之间的全部区块已被共识验证,并存储于主链上的各个节点(包括代理节点)。其中,起始区块可以是区块链条中的创世区块,亦可以不是创世区块,例如,对于当前总区块高度为10000的区块链,起始区块的区块编号(区块高度)为#1,亦即,起始区块为创世区块。或者,起始区块的区块编号(区块高度)为#1500。

终止区块为主链的代理节点需要转移的最末区块编号的区块,起始区块的区块编号至终止区块的区块编号是连续的。

当自身的可用存储容量大于预设存储阈值,其触发主链的智能合约,使得主链的代理节点记录待转移的起始区块与终止区块之间的全部区块的区块编号。

s73、主链的代理节点向主链上预设的节点地址对应的侧链的代理节点发送全部区块;

s74、侧链的代理节点向侧链的共识节点发送全部区块,以使侧链的共识节点共识验证全部区块;

主链的智能合约的合约内容预设侧链的代理节点的节点地址,执行完s72后,主链的代理节点向侧链的代理节点发送全部区块。

在一些实施例中,主链的代理节点向侧链的代理节点发送全部区块时,主链的代理节点可压缩全部区块后,再向侧链的代理节点发送压缩后的全部区块。侧链的代理节点解压压缩后的全部区块,向侧链的共识节点发送全部区块,以使侧链的共识节点共识验证全部区块。

s75、侧链的共识节点识验证通过全部区块,将全部区块存储于侧链上预设的节点地址对应的侧链内容服务器;

在本实施例中,侧链内容服务器与侧链的共识节点通讯连接,侧链内容服务器用于存储区块数据,其可用存储容量大。

s76、主链的代理节点检测到全部区块在侧链通过共识验证后,主链的代理节点全网广播区块转移信息;

在本实施例中,当全部区块在侧链通过共识验证后,侧链的代理节点向主链的代理节点发送验证成功信息,于是,主链的代理节点便检测到全部区块在侧链通过共识验证。

当全部区块在侧链未通过共识验证,主链的代理节点重新实施区块转移工作,亦即跳转至s72。

s77、主链中各个节点根据区块转移信息删除全部区块。

在本实施例中,当主链的各个节点(例如,代理节点、普通节点)接收到区块转移信息后,可以删除已存储的全部区块,从而为非必需存储空间腾出可用存储容量。

s78、若小于,主链中各个节点继续存储区块。

综上所述,由于主链中各个节点能够在可用存储容量不够时,将部分或全部的区块转移并存储在侧链中,于是,主链中各个节点便有更多可用存储容量,以便主链中各个节点能够更加可靠地存储区块数据,提高了主链的工作可靠性。

在一些实施例中,主链的代理节点在终止区块后添加新区块时,获取终止区块的哈希值,并将终止区块的哈希值作为新区块中区块头的一项特征值。举例而言,终止区块的区块编号为#10001,终止区块的哈希值为#hash101

区块链系统需要在终止区块之后新增区块,亦即,新增区块编号为#10002的区块。于是,为了保证区块链的不可篡改性,主链的代理节点将终止区块的哈希值作为新区块中区块头的一项特征值,于是,在通过pow共识机制或其它共识机制共识验证#10002的区块时,其可以结合随机数以及终止区块的哈希值作哈希运算,以此保证区块链的不可篡改性。

为了方便用户查询区块信息,保证区块链的一致性,在一些实施例中,当主链的代理节点接收查询请求时,主链的代理节点向侧链的代理节点发送区块获取请求。其中,查询请求由用户通过主链的普通节点触发产生的。

其次,侧链的代理节点根据区块获取请求,向预设节点地址对应的主链内容服务器发送全部区块。此种方式可以缓解主链的代理节点访问以及存储压力。

再次,主链的代理节点访问主链内容服务器并获取全部区块,主链的代理节点根据全部区块中起始区块与终止区块的区块编号,按照编号顺序,在已存储的区块链条上装配上全部区块。因此,用户可以查询完整的区块链信息。

在一些实施例中,在查询之后,为了避免主链再次向侧链作出重复区块的转移工作,在侧链的代理节点根据区块获取请求,向预设节点地址对应的主链内容服务器发送全部区块之后,侧链的代理节点复制并存储全部区块。于是,后续主链就不必要再次向侧链发送全部区块。

在一些实施例中,当主链的待转移的全部区块转移至侧链后,侧链也便将主链的待转移的全部区块作为新区块数据进行打包以及共识验证。显然,由主链的待转移的全部区块形成的新区块数据在侧链的区块编号与在主链的区块编号是不同的,因此,在查询区块信息时,为了保证主链的原始区块信息的一致性,侧链的代理节点根据区块获取请求,向预设节点地址对应的主链内容服务器发送全部区块的过程中,首先,侧链的代理节点根据区块获取请求,确定全部区块中起始区块与终止区块在侧链上的区块编号,例如,主链上的起始区块的区块编号为#50,终止区块的区块编号为#11150。相应的,主链上的起始区块在侧链的区块编号为#80,主链上的终止区块在侧链的区块编号为#11180。

其次,侧链的代理节点根据全部区块中起始区块与终止区块在侧链上的区块编号,从侧链上的区块链条上截取出全部区块,例如,侧链的区块编号为#80至#11180的区块装配在侧链上的区块链条上。

再次,侧链的代理节点执行侧链上智能合约,将全部区块各个区块在侧链上的区块编号转换成在主链上的区块编号。例如,将侧链上区块编号为#80转换为主链上的区块编号#50,将侧链上区块编号为#11180转换为主链上的区块编号#11150,并且,侧链上区块编号为#80至#11180中所有区块编号都适应性转换。

最后,侧链的代理节点向预设节点地址对应的主链内容服务器发送转换成在主链上的区块编号对应的全部区块。

在上述各个实施例中,主链或侧链代理节点将区块数据发送给共识节点时,代理节点使用自身私钥对区块数据作签名运算,得到区块签名,其中与私钥对应的公钥广播至区块链系统。其次,代理节点再将区块签名与区块数据封装并向共识节点发送,共识节点验证签名后的区块数据时,共识节点使用代理节点的合法公钥验证区块签名,若区块签名合法,便认为区块数据由合法代理节点发送的。若区块签名非法,便认为区块数据由非法代理节点发送的,因此,采用此种方式能够提高区块数据的安全性。

当共识节点验证区块数据为合法代理节点发送时,各个共识节点采用股份证明算法(proofofstake,pos)或者委任权益证明算法(delegatedproofofstake,dpos)对区块数据进行验证。当验证通过该区块数据后,共识节点补全其它区块信息,其它区块信息包括区块签名、时间戳等等,打包区块数据,广播全网。

当共识节点验证区块数据为非法代理节点发送的,丢弃该区块数据。

在一些实施例中,该基于区块链的数据存储方法应用于联盟链,当采用股份授权证明算法作为共识机制时,股份授权证明算法的股份占比按照各个运营商的无人商店规模分配。例如,联盟链的各个区块链节点为无人商店的各个运营商架设的服务器,无人商店规模包括无人商店总面积或注册用户量等等。其中,运营商a的无人商店规模最大,占比为10%,运营商b为6%,运营商c为3%......,以此类推。

有些共识节点陷入故障或者作恶(不签署验证新区块链数据),为了保证区块链系统能够正常出块,其余共识节点可以作视图更新,停止故障或作恶共识节点的共识权利。因此,在一些实施例中,共识节点共识验证区块数据的过程中,在检测到共识验证失败的次数大于预设阈值时,共识节点组成的共识服务器群确定恶意共识节点,恶意共识节点为未签署验证区块数据并导致共识验证失败次数最多的节点。共识节点组成的共识服务器群禁止恶意共识节点参与共识验证,并在剩余的共识节点重新分配股份并共识验证区块数据,例如,占比为10%的共识节点a作恶,于是,首先共识服务器群停止共识节点a的投票权利,其次,共识服务器将共识节点a的占比10%按照预设规则分配给其余共识节点,例如,均分给其余共识节点,或者,按照共识节点的工作年龄分配给其余节点,工作年龄越长,分配占比越高,工作年龄越短,分配占比越低。

再次,共识服务器群在检测到共识验证失败的次数小于预设阈值时,继续共识验证区块数据。

采用此种方式,其保证区块链系统能够顺利出块。

需要说明的是,在上述各个实施例中,上述各步骤之间并不必然存在一定的先后顺序,本领域普通技术人员,根据本发明实施例的描述可以理解,不同实施例中,上述各步骤可以有不同的执行顺序,亦即,可以并行执行,亦可以交换执行等等。

作为本发明实施例另一方面,本发明实施例提供一种基于区块链的数据存储系统,所述系统包括主链与侧链;

主链的代理节点检测自身的可用存储容量是否大于预设存储阈值;

若大于,所述主链的代理节点记录待转移的起始区块与终止区块之间的全部区块的区块编号;

所述主链的代理节点向所述主链上预设的节点地址对应的侧链的代理节点发送所述全部区块;

所述侧链的代理节点向所述侧链的共识节点发送所述全部区块,以使所述侧链的共识节点共识验证所述全部区块;

所述侧链的共识节点识验证通过所述全部区块,将所述全部区块存储于所述侧链上预设的节点地址对应的侧链内容服务器;

所述主链的代理节点检测到所述全部区块在所述侧链通过共识验证后,所述主链的代理节点全网广播区块转移信息;

所述主链中各个节点根据所述区块转移信息删除所述全部区块。

综上所述,由于主链中各个节点能够在可用存储容量不够时,将部分或全部的区块转移并存储在侧链中,于是,主链中各个节点便有更多可用存储容量,以便主链中各个节点能够更加可靠地存储区块数据,提高了主链的工作可靠性。

可选地,所述主链的代理节点在所述终止区块后添加新区块时,获取所述终止区块的哈希值,并将所述终止区块的哈希值作为所述新区块中区块头的一项特征值。

可选地,所述主链的代理节点接收查询请求时,向所述侧链的代理节点发送区块获取请求;

所述侧链的代理节点根据所述区块获取请求,向预设节点地址对应的主链内容服务器发送所述全部区块;

所述主链的代理节点访问所述主链内容服务器并获取所述全部区块;

所述主链的代理节点根据所述全部区块中起始区块与终止区块的区块编号,按照编号顺序,在已存储的区块链条上装配上所述全部区块。

可选地,所述侧链的代理节点复制并存储所述全部区块。

以上所描述的装置或设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

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