DAOONE区块链技术研究

DAOONE知识整理 - 共识机制综述

2018-03-16  本文已影响492人  wingyang
The first Dao in China

整理人:DAOONE@擒龙

1、节点
1.1、比特币节点
比特币是一种点对点的电子现金系统,更直接地说,是节点对节点。每笔交易由发起方向周围的节点进行广播,节点收到之后再广播给自己周围的节点,最终扩散至全网。每一个比特币钱包都是一个节点,其中拥有完整区块链账本的节点叫做全节点。2017年10月,比特币全网约有9300个全节点,负责比特币转账交易的广播和验证。转账交易发生后,由所有节点共同广播至全网,挖矿的节点验证该交易正确后会记录至区块链账本。美国、德国、法国拥有的比特币全节点数最多,中国的全节点数量约占全球5%(数据来源于:bitnodes.21.co)。由于运行比特币节点不提供任何奖励,且不需要全节点也可以进行比特币转账,所以比特币的全节点数只占节点数的一小部分。
1.2、区块链节点
在最初的区块链网络设计中,不存在任何中心化的特殊节点和层级结构,每个节点完全对等,承担着网络路由、验证交易信息、传播交易信息、发现新节点等工作。但是实际上物理设备是存在明显性能差距的,以比特币网络为例,可作为节点的设备有个人计算机、服务器、专为比特币挖矿设计的矿机,以及移动端,它们提供的算力相差了几个数量级,并且存储空间也不同。目前市面上可见的移动端存储空间最大不过100 GB 左右,而存有全部数据的区块链数据总量已经超过60 GB,想要将移动端作为全节点无疑是不现实的。于是有了全节点和轻型节点,全节点是传统意义上的区块链节点,包含有完整的区块链数据,支持全部区块链节点的功能。全节点通常是高性能的计算设备,比特币刚面世时依靠CPU 来提供算力,后来使用GPU,发展到现在是专门设计将SHA256 算法固化到硬件的矿机,算力成几何增长趋势。轻型节点是依靠全节点存在的节点,不用为区块链网络提供算力,只保存区块链的区块头,由于区块头包含了Merkle 根,可以对交易进行验证。轻型节点多为移动端,如智能手机、平板电脑、移动计算机等。

2、共识机制
2.1、基本概念
2.1.1、基本概念解释一
分布式网络的核心难题是如何高效地达成共识,就好比现有的社会系统,中心化程度高的、决策权集中的社会更容易达成共识,像独裁和专制,但是社会的满意度很低;中心化程度低的、决策权分散的社会更难达成一致,像民主投票,但是整个社会的满意度更高。“任何基于网络的数据共享系统,都最多拥有以下3条中的2条:

2.1.2、基本概念解释二
区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图,同时满足两个性质 :

2.2、评价标准
区块链上采用不同的共识机制,在满足一致性和有效性的同时会对系统整体性能产生不同影响。综合考虑各个共识机制的特点,从以下4个维度评价各共识机制的技术水平:

2.3、共识机制和拜占庭将军问题
分布式计算和多代理系统中的一个基本目标是在部分进程出错的前提下实现整个系统的可靠性,这往往需要在计算过程中对于某些所需信息达成一致,例如是否将某个交易提交到数据库, 是否认证某个参与者的领导者身份等。这种为了达成关于某个问题的一致意见的过程即是形成共识的过程,共识问题实质上就是一致性问题。分布式数据库和大多数的分布式系统都构建在一致性问题上,这个问题听起来很简单,但却是从上世纪70年代就开始研究的经典问题。 Fischer,Lynch和Patterson在1985年发表的《Impossibility of DistributedConsensuswith One Faulty Process》一文中提出了重要的分布式系统定理——FLP不可能性。该理论认为没有一个完全异步的共识协议可以容忍哪怕仅仅一个进程失效。FLP 定理限定了分布式系统共识算法求解上限。
在比特币系统中可能存在恶意节点的情况下,共识机制要解决双重花费问题,并使所有节点在期限内就一个记录所有交易信息的总账本达成一致。中本聪通过引入经济激励和奖惩机制在算法体系之外对共识机制进行突破,使比特币系统以很小的概率出现系统不可用的情况,满足实际应用场景。
一个正确的分布式共识协议需要满足以下三个条件:
① 协商——所有节点针对相同的值进行表决;
② 终止——所有节点在有限时间内达成一致;
③ 有效——最后达成一致的值由系统中的节点提出。
可以看出,比特币的共识协议均满足这三个条件,是一个灵巧的针对共识问题的解决方案。在比特币系统中,当节点发现一个新区块后,立即在全网广播,所有节点通过验证区块的有效性来决定是否同意该区块,当区块拥有大多数节点的确认后, 即可被认为有效。比特币共识问题就是一个典型的拜占庭将军问题。
1981年Leslie Lamport在《The Byzantine generalsproblem》一文中描述分布式系统容错与一致性问题设想时首次提出拜占庭将军问题。拜占庭位于现在土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御敌人, 每个军队都分隔很远,将军与将军之间只能靠信差传递消息。在战争时期,拜占庭军队内所有将军必须达成一致共识,发现有赢的机会时才去攻打敌人的阵营,但是有些将军可能是叛徒,他们会故意发出错误信息竭力扰乱其他人。忠诚的将军们如何在已知有叛徒的情况下达成一致协议,这就是拜占庭将军问题。比特币的每个节点可以看做是一位将军,将军们想对系统总账内容达成一致,节点中可能存在恶意节点,它们想方设法对总账内容进行篡改,从而使自身获得更大经济利益。

3、共识机制的分类和比较(此部分擒龙出品,请勿使用,谢谢)
区块链解决了在不可信信道上传输可信信息、价值转移的问题,而共识机制解决了区块链如何在分布式场景下达成一致性的问题。
识机制的种类有N2N(节点到节点)、POW(工作量证明)、POS(股权证明)、DPOS(股权委托证明)、Pool验证池、基于领导者的共识(PAXOS/基于PAFA的衍生方案)、轮转、联合共识、专有分布式账本、PBFT及其派生方案等。
区块链的主要共识机制有POW、POS、DPOS、POOL验证池和PBFT五种。
文献[1]提出了一个量化框架,分析POW 区块链在不同共识和网络参数中的安全性和性能,以及安全性和效率之间的转换。优点:算法简单,容易实现;节点间无需交换额外的信息就可以达成共识。缺点:区块链的确认时间长,容易产生分叉,资源浪费大,只作用于挖矿阶段,在比特币长期运行中并非至关重要。文献[2]提出采用权益证明机制(POS,Proof Of Stake)代替POW 机制, 依据币龄在有限空间寻找随机值,通过中央广播的校验机制,保护区块链历史和交易处理,可提供更好的安全性。优点:在一定程度上缩短了共识时间,不再需要大量消耗能源挖矿。缺点:还是需要挖矿,本质上没有解决商业应用的痛点。文献[3-10]对基于POW和POS进行了改进,但是均没有解决共识效率问题和POS中节点离线也能累积币龄的安全问题,文献[11]提出DPOS。DPOS是POS的衍生物, 意为股份授权证明机制,股东们将权利授予一定数量的受托人(delegates),由受托人负责维护货币系统运行,这在某种程度上类似于代议制制度,但和现实中的议会议员有所不同的是,选民有权在一段时间后根据受托人的表现重新选举, 如果对他们的工作表现不满意,也可以要求罢免受托人。优点:大幅减小参与验证和记账节点的数量,可以达成秒级的共识验证。缺点:整个共识机制还是依赖于代币,但很多商业应用是不需要代币的。文献[12]提出了pool验证池,基于传统的分布式一致性技术,加上数据验证机制,是目前行业链大范围在使用的共识机制。优点:不需要代币也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证。缺点:去中心化程度不如比特币,更适合多方参与的多中心商业模式。文献[13]提出了PBFT(拜占庭共识)算法机制,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。优点:系统运转可以脱离币的存在,PBFT算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证,共识时间2-5s。缺点:当有1/3或以上记账人停止工作后,系统将无法提供服务。

4、各种共识机制的详细介绍
4.1、POW
PoW共识过程高度依赖区块链网络节点贡献的算力,这些算力主要用于解决SHA256哈希和随机数搜索,除此之外并不产生任何实际社会价值,因而一般意义上认为这些算力资源是被“浪费”掉了,同时被浪费掉的还有大量的电力资源。如何能有效汇集分布式节点的网络算力来解决实际问题,是区块链技术需要解决的重要问题。
工作量证明通常包含3个算法:产生挑战c的随机算法、生成s解决挑战c的算法和验证挑战c是否被s解决的算法。工作量证明机制中用到的随机算法都是基于计算问题的。在比特币系统中,用于产生挑战c的随机算法是基于SHA-256的,挑战c 由当前区块链的状态决定。解决挑战c就是寻找一个s,使得其与挑战c通过SHA-256可以映射到一个以连续几个0 开头的二进制困难系数上,表示为Hash (s,c) < Difficulty
工作量证明机制所选取的计算问题要满足如下性质:
1)伪随机性。保证节点完成工作量证明的概率仅依赖于自身所占有的计算资源的比例,保证相对公平性。
2)难度可控。所选取的计算问题可根据近期网络计算资源波动进行适度调整,保证系统有效运行。计算问题难度过高,则生成区块的时间间隔过长,影响系统效率;难度太低,则完成工作量证明过于容易,会产生分叉,影响系统一致性。
3)可公开验证。由于去中心化的性质,要求计算问题的求解结果可通过简洁的操作公开验证。
采用工作量证明机制可以实现区块链的一致性。当区块链很长时,除了结尾的几个区块,其余已得到全网确认,实现了一致性。节点可自由加入区块链,节点的加入或撤离不会影响区块链的一致性和安全性。每个节点完成工作量证明的概率由它所拥有的计算资源决定,攻击者无法通过创建多个公钥地址来提高自己完成工作量证明的概率,这样可以有效抵御Sybil 攻击。同时在诚实方拥有的计算资源占多数的情况下,可有效抵御二次支付,保证系统的安全性。
采用工作量证明机制可以实现区块链的一致性。当区块链很长时,除了结尾的几个区块,其余已得到全网确认,实现了一致性。节点可自由加入区块链,节点的加入或撤离不会影响区块链的一致性和安全性。每个节点完成工作量证明的概率由它所拥有的计算资源决定,攻击者无法通过创建多个公钥地址来提高自己完成工作量证明的概率,这样可以有效抵御Sybil攻击。同时在诚实方拥有的计算资源占多数的情况下,可有效抵御二次支付,保证系统的安全性。
工作量证明过程通常是计算一个无意义的序列,需要消耗大量计算资源、电力能源,造成浪费,即使后来提出的有用的工作量证明机制(Proof of Useful Work)尝试通过求解正交向量、3SUM、最短路径等问题,代替寻找无意义的二进制数来抵消需要消耗的资源,仍无法解决效率等问题。
GHOST(Greedy Heaviest Observed Subtree)协议:GHOST 协议是为了解决比特币使用PoW算力竞争引起的高废块率带来的算力浪费问题。废区块指的是在新块广播确认的时间里“挖”出的符合要求的区块。GHOST 协议提出在计算最长链时把废区块也包含起来,即在比较哪一个区块具有更多的工作量证明时,不仅有父区块及其祖先区块,还添加其祖先区块的作废后代区块来计算哪个块拥有最大的工作量证明。在以太坊中,采用了简化版GHOST 协议,废区块只在五代之间参与工作量证明,并且废区块的发现者也会收到一定数量的以太币作为奖励。

4.2、POS
由于工作量证明机制资源消耗大且计算资源趋于中心化,权益证明机制受到广泛关注。如果把工作量证明中的计算资源视为对区块进行投票的份额,那么权益证明就是将与系统相关的权益作为投票的份额。合理假设,权益的所有者更乐于维护系统的一致性和安全性。
假设网络同步性较高,系统以轮为单位运行。在每一轮的开始,节点验证自己是否可通过权益证明被选为代表,只有代表可以提出新的区块。代表在收到的最长的有效区块链后提出新的待定区块,并将自己生成的新的区块链广播出去,等待确认。下一轮开始时,重新选取代表,对上一轮的结果进行确认。诚实的代表会在最长的有效区块链后面继续工作。如此循环,共同维护区块链。
与工作量证明类似,单纯的权益证明也包含3个算法:产生挑战c的随机算法、验证节点权益状态s是否可解决挑战c的算法和公开验证挑战c是否被s 解决的算法。与工作量证明的不同点在于,能否解决挑战c仅与节点拥有的权益有关,与节点拥有的计算资源无关。节点所占权益越多,被选为代表的概率就越大。多数情况下,本地验证算法和公开验证算法是相同的。例如,PPCoin采用交易金额和币龄作为权益的两个因子,挑战c由当前状态决定,包括获得的最长的有效区块链和权益的分布情况。验证算法验证以当前状态c和该节点拥有的一个尚未支付的交易s作为输入得到的哈希值是否满足以下条件,即
Hash(s,c)≤d ⋅ s.time ⋅s.value
其中,当前时间以秒为单位,逐渐增加。该节点每一秒都可以进行一次新的尝试,验证是否被选为代表。参数d用来调节选代表的时间间隔和代表数量。
权益证明机制在一定程度上解决了工作量证明机制能耗大的问题,缩短了区块的产生时间和确认时间,提高了系统效率,但目前尚没有完善的基于权益证明的区块链的实际应用。权益证明每一轮产生多个通过验证的代表,也就是产生多个区块,在网络同步性较差的情况下,系统极易产生分叉,影响一致性。若恶意节点成为代表,就会通过控制网络通信,形成网络分区。向不同网络分区发送不
同待定区块,就会造成网络分叉,从而可进行二次支付攻击,严重影响系统安全性。恶意敌手也可以对诚实代表进行贿赂,破坏一致性。权益证明的关键在于如何选择恰当的权益,构造相应的验证算法,以保证系统的一致性和公平性。不当的权益会影响系统公平性。例如,PPCoin 采用币龄作为权益的一个因子,若部分节点在进入系统初期就保持一部分小额交易不用于支付,则币龄足够大,该节点更容易被选为代表,影响系统公平性。
在PoS 出现后, 一些针对其中某个缺点进行修改而诞生的新协议被称作PoS 的衍生协议, 比如PoSV和PoA。
PoSV 针对PoS 中币龄是时间的线性函数这一问题进行改进, 致力于消除货币持有者的屯币现象。PoSV 意为权益和活动频率证明,是瑞迪币(Reddcoin)目前使用的共识机制,瑞迪币在前期使用POW进行币的分发,后期使用PoSV 维护网络长期安全。PoSV将PoS中币龄和时间的线性函数修改为指数式衰减函数,即币龄的增长率随时间逐渐减少最后趋于零,因此新币的币龄比老币增长得更快,直到达到上限阈值,这样在一定程度上缓和了货币持有者屯币现象。
PoA意为行动证明,也是POS 的一种改进方案。它的本质是通过奖励参与度高的货币持有者而不是惩罚消极参与者来维护系统安全。PoA将PoW和PoS 结合在一起,主要思想是将PoW挖矿生成币的一部分以抽奖的方式分发给所有活跃节点,而节点拥有的股权与抽奖券的数量即抽中概率成正比。

4.3、DPOS
为了进一步加快交易速度,同时解决PoS中节点离线也能累积币龄的安全问题,Daniel Larimer于2014年4月提出DPoS。DPoS是PoS的衍生物,意为股份授权证明机制,股东们将权利授予一定数量的受托人(delegates),由受托人负责维护货币系统运行,这在某种程度上类似于代议制制度,但和现实中的议会议员有所不同的是,选民有权在一段时间后根据受托人的表现重新选举,如果对他们的工作表现不满意,也可以要求罢免受托人。DPoS目前是比特股、Crypti平台内置的共识机制。
在DPoS中,股东投票给某个受托人,系统根据股东所持股权在系统中占比计算出票数最高的一定数量受托人,受托人们按照事先规定的顺序轮流负责生成区块。通过所有股东的投票后,系统中的信任已经由全体参与者集中到了少数参与者,节点发起交易后不用再等待相当数量未授信任节点的确认,而只需要让受托人对交易进行验证,这就大大缩短了交易的确认时间。例如,比特股可以达到每个块10 秒的区块生成速度,相比于比特币平均每个区块接近10分钟的生成
时间有了重大提升。
在一些DPOS协议版本中,节点要获得竞争成为受托人的资格首先得付出一定代价,比如缴纳一笔保证金到某个安全账户,如果节点作恶保证金将被没收。受托人维护系统运行将获得报酬,他将与其他受托人共享区块交易费,酬劳对其形成正向反馈从而激励受托人更加努力维护系统安全。由于区块被受托人轮流签署,如果某位受托人因离线错过了签署区块,他将面临被其他候选受托人取代的风险,因此为了营利,受托人必须保证充足的在线时间。需要缴纳保证金的这种DPoS协议也被称作基于存款的股权证明协议(deposit-based proof of stake)。

4.4、PBFT
拜占庭一致性协议最初用于小范围服务器复制问题,后来服务器数量可扩展至数十台。拜占庭一致性协议主要研究在分布式系统中,如何在有错误节点的情况下,实现系统中所有正确节点对某个输入值达成一致。
以实用拜占庭容错协议(Practical Byzantine FaultTolerance, PBFT)为例,协议要求在有3f+1个节点的分布式系统中,失效节点数量不超过f个。实用拜占庭容错协议的每一轮包括3个阶段:预准备阶段、准备阶段和确认阶段。在预准备阶段,由主节点发布包含待验证记录的预准备消息。接收到预准备消息后,每一个节点进入准备阶段。在准备阶段,主节点向所有节点发送包含待验证记录的准备消息,每一个节点验证其正确性,将正确记录保存下来并发送给其他节点。直到某一个节点接收到2 f个不同节点发送的与预准备阶段接收的记录一致的正确记录,则该节点向其他节点广播确认消息,系统进入确认阶段。在确认阶段,直到每个诚实节点接收到2f+1个确认消息,协议终止,各节点对该记录达成一致。
在去中心情况下,利用拜占庭一致性协议可以实现区块链的一致性,剔除多余的计算量,避免资源浪费。此外,在某一时刻,只有一个主节点可以提出新区块,其他节点对该区块进行验证,避免分叉,缩短了交易确认和区块确认时间,提高了系统效率。
拜占庭一致性协议在安全性和扩展性方面还存在问题。拜占庭一致性协议的安全性依赖于失效节点数量的限制,失效节点数量不超过全网节点的1/3。在区块链系统中,恶意节点可通过实施Sybil攻击产生多个节点,使其控制的节点比例超过全网节点的1/3,从而破坏系统的一致性和安全性。拜占庭一致性协议的效率依赖于参与协议的节点数量,该协议不适用于节点数量过大的区块链系统,扩展性差。此外,一轮是否可以取得共识也依赖于主节点是否诚实,若主节点提出无效区块,则本轮不会产生区块,影响效率。

4.5、Ripple Consensus
瑞波共识算法,使一组节点能够基于特殊节点列表达成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由51% 的该俱乐部会员投票通过。共识遵循这核心成员的51% 权力,外部人员则没有影响力。由于该俱乐部由“中心化”开始,它将一直是“中心化的”,而如果它开始腐化,股东们什么也做不了。

5、共识机制的组合应用
对现有区块链上的工作量证明、权益证明和拜占庭一致性协议等共识机制从一致性、安全性、扩展性、性能效率、资源消耗等方面进行对比分析,它们在区块链应用上的优劣如下表所示:


针对各共识机制的优缺点,可尝试将不同的共识机制结合起来,形成新的共识机制。

5.1、工作量证明和权益证明的结合
采用工作量证明机制时,节点可通过自私挖矿策略获得更高的相对收益,影响系统的公平性和安全性。2-hop区块链尝试将工作量证明和权益证明相结合,利用权益证明机制减少系统的资源消耗,提高公平性和安全性。系统以轮为单位,每轮包含工作量证明阶段和权益证明阶段。在工作量证明阶段,节点尝试完成工作量证明,提出新区块。随后进入权益证明阶段,由完成权益证明的节点对新区块进行验证和确认。通过交替进行工作量证明和权益证明,使得系统即使出现占有大量计算资源的节点,也能保证系统的安全性。同时,削弱初始状态下计算资源占优势的节点对区块链的影响,进一步提高系统的安全性和公平性。

5.2、拜占庭一致性和权益证明的结合
以Algorand系统为例,考虑到拜占庭一致性协议存在扩展性差等问题,Algorand 系统将权益证明机制和拜占庭一致性协议相结合,通过权益证明限制参与拜占庭一致性协议的节点数量,以提高系统的可扩展性。首先,节点通过权益证明机制验证自己是否被选为代表,通过验证的节点可提出待定区块。然后,进行新一轮的权益证明选出新的代表对待定区块的有效性进行验证。有限轮次之后,代表之间通过拜占庭一致性协议在优先级最高的区块上达成一致。通过权益证明选出代表,有效解决了拜占庭一致性协议的扩展性和效率问题,同时利用拜占庭一致性协议避免了权益证明易分叉的弱点,提高了一致性和安全性。
在保证安全性和一致性的基础上,对于共识机制的研究一直围绕在如何平衡系统的性能效率、扩展性和资源消耗等因素上。由于不同共识机制的特点不同,如何将各具优势的共识机制巧妙组合,设计综合评价最优的共识机制,是未来研究的主流方向。
共识机制作为区块链技术中至关重要的一个组件,备受学术界和企业界关注。良好的共识机制有益于区块链技术在理论和实践中的推广。然而,现有的可用于区块链技术的共识机制都不尽完善。对于区块链技术中的共识机制分析,可以从一致性、安全性、扩展性、性能效率、资源消耗等维度综合考量。将工作量证明、权益证明和拜占庭一致性协议等基本共识机制进行改进和组合是未来共识机制的研究重点。

6、常见机制与链的挂钩

6.1、系统授权程度与运转费用关系图



从左到右的三类系统某种程度上对应着现实生活中的公有链、联盟链、私有链三种应用场景.

6.2、共识机制适用于的链

参考文献
[1] Gervais A, Karame G O, St K, et al. On the Security and Performance of Proof of Work Blockchains[C]// ACM Sigsac Conference on Computer and Communications Security. ACM, 2016:3-16.
[2] King S, Nadal S. PPCoin: Peer-to-Peer Crypto-Currency with Proof-of-Stake[J]. 2012.
[3] Kelley A L. SECURE CRYPTO CURRENCY POINT-OF-SALE (POS) MANAGEMENT:, US 20160148198 A1[P]. 2016.
[4] Dziembowski S, Faust S, Kolmogorov V, et al. Proofs of Space[J]. 2015, 9216:585-605.
[5] Qian X. Build a compact cryptocurrency system purely based on PoS[J]. 2014.
[6] Bentov I, Lee C, Mizrahi A, et al. Proof of Activity: Extending Bitcoin's Proof of Work via Proof of Stake[J]. 2014.
[7] REN L. Proof of Stake Velocity: Building the Social Currency of the Digital Age[EB/OL]. http://www.reddcoin.com/papers/PoSV. pdf,2017-4-8.
[8] Bentov I, Lee C, Mizrahi A, et al. Proof of Activity: Extending Bitcoin's Proof of Work via Proof of Stake[J]. 2014.
[9] Jansen R. A TorPath to TorCoin:Proof-of-Bandwidth Altcoins for Compensating Relays[J]. 2014.
[10] Ford B, Miller A, Jansen R, et al. From Onions to Shallots: Rewarding Tor Relays with TEARS[J]. 2014.
[11] Biryukov A, Pustogarov I. Proof-of-Work as Anonymous Micropayment: Rewarding a Tor Relay[J]. 2015.
[12] The Piachu’s Bitcoin Blog. Thoughts on delegated proof of stake and bitshares. http://www.8btc.com/thoughts-ondelegated-proof-of-stake-and-bitshares, 2014.
[13] Duan S. Building Reliable and Practical Byzantine Fault Tolerance[J]. Dissertations & Theses - Gradworks, 2014.
[14] 韩璇, 刘亚敏, HANXuan,等. 区块链技术中的共识机制研究[J]. 信息网络安全, 2017(9).

如有任何问题,请与我们(DAO.ONE)联系!
1.微信公众号:daoonecommunity
2.官方网址:http://daoone.org
3.小密圈: daoone知识星球:https://t.zsxq.com/zbYVzvr

上一篇下一篇

猜你喜欢

热点阅读