【Libra 技术解读】详解Libra共识源码

 

Libra技术系列解读

往期回顾:

move语言简介

move语法、解释器和验证器

LibraBFT共识机制

 

本期由百度超级链颜值与才华并存的“小X姐姐”带来

“Libra共识源码”详解

快来围观吧!

 

一、LibraBFT算法简介

 

上一篇对于LibraBFT进行了相关的介绍,本文在正式开始前,先再介绍一下相关的概念和流程:

 

基本概念:

 

1. SMR(State Machine Replication):在计算机领域,SMR是在网络中不同副本间进行状态复制的一种协议。

 

2. Safety: 简单地理解就是共识的一致性保证,即诚实的节点能够达到状态一致;

 

3. Liveness: 简单地理解为区块链网络的可用性,类似于分布式系统中的分区可用性;

 

4. Epochs,实际的应用中,参与协议的节点的状态是随着时间而发展的,LibraBFT中通过epoch来支持这种状态更迭。

 

     a. 每个epoch都是基于他的前一个epoch发展的。或者基于一个系统定义的初始epoch;

     b. 每个epoch有一个唯一的epochid所标识;

     c. 每当一个新的epochid被提交,当前这个epoch会结束,下一个epoch会开始;

 

5. LibraBFT假设网络是一个有全局稳定时间(GST),并且最大延时(ΔT)可控的 Partial Synchrony的网络;

 

6. LibraBFT假设非拜占庭节点一定会按照协议履行职责并且能保证可用。

 

7. Records,LibraBFT的状态是由一系列records组成的。

主要包括四种,blocks、votes、quorum certificates(QCs)和 timeouts。

 

基本流程:

 

 

 

 

 

当一个节点被选择成主时,它会执行下面3个步骤:

 

第一,打包第n+1个区块Bn+1,并追加在最新的QC之上;

第二,将这个区块广播Bn+1给所有验证节点,诚实的验证节点会验证区块并返回投票信息给主节点。

第三,在没有bug的前提下,诚实节点会执行Bn+1。并且主节点在收集到足够的投票后会为这个区块发起一个QCn+1,并且广播。

 

经过上述一个周期的过程,链的长度会增长,变成h(init)← B1←C1... Bn+1←Cn+1。并且旧的leader会结束任期,新的leader会被选举出来并进行新一轮的区块打包。

 

二、Libra共识源码结构和子模块功能

 

Libra共识模块代码主要在 consensus 包中,它定义了Libra共识的抽象接口及其具体实现。目前Libra团队只实现了LibraBFT。consensus包是一个独立的可编译的单元,编译后生成一个库。其代码目录结构和各层级的模块的主要功能如下所示:

 

  • consensus包目录结构如下:

 

 

  • consensus包中各层级中定义的模块如下,如下所示: 

 

 

三、Libra共识源码走读

1. Libra程序入口

 

Libra代码的入口在 ./libra_node/src/main.rs中,启动服务主流程的代码在 ./libra_node/src/main_node.rs,

 

 

 

上述NodeConfig是节点的配置,共识相关的配置在其之中,在 ./config/src/config.rs  中 ConsensusConfig结构中定义。

 

 

2. 共识模块初始化

 

初始化的代码在 ./consensus/src/consensus_provider.rs 中,该函数返回了一个 ChainedBftProvider 实例,该实例就是LibraBFT实例:

 

 

 

 

ChainedBftProvider 定义在 ./consensus/src/chained_bft/chained_bft_consensus_provider.rs 中,他有四个成员变量,分别是状态副本实例以及其余各个其他模块交互的客户端。

 

 

 

 

ChainedBftProvider 的new方法定义了其实例初始化的过程,

 

 

 

 

至此,共识实例初始化完毕~ 

 

 

3. 共识模块启动&运行流程

 

前面已经介绍完了共识模块初始化的过程,接下来我们看一下共识服务具体是如何运作的。LibraBFT服务启动函数是 ChainedBftProvider.start()。它实现了Libra共识的通用接口 ConsensusProvider,该接口定义在 ./consensus/src/consensus_provider.rs 中。ChainedBftProvider.start()的主要是启动smr,代码如下:

 

 

 

 

上述提到的 smr 是一个ChainedBftSMR的实例,ChainedBftSMR是libra  StateMachineReplication接口的具体实现,ChainedBftSMR.start()是启动smr的完整流程。

 

 

主要包括3个阶段:

 

第一步:首先会同步到网络中的最新状态;

第二步:初始化 block_store、proposal_generator、safety_rules、pacemaker、event_processor等;

第三步:启动事件处理handler。

 

 

 

 

四、共识模块整体流程图

 

 

通过前面的介绍和代码走读,相信大家应该对libra共识的整体流程有一个比较清晰的认识了,接下来用一个流程图,帮助大家更加直观过整个流程。

 

 

 

 

 

 

如果你对百度超级链(Xuper)技术及应用感兴趣

欢迎添加“百度超级链·小助手“微信(微信号:baidu-image)

验证口令:百度开发者

进入微信群交流

 

 

 

 

 

收藏 评论(1)
分享到:
共1条回复 最后由筱Myselfkv 回复于2019-08-14 20:34
#2 筱Myselfkv 回复于2019-08-14

https://500px.com/thotoakosukv/groups
https://500px.com/thotoakosukv/galleries
https://500px.com/sepethenffep
https://500px.com/sepethenffep/about
https://500px.com/sepethenffep/groups
https://500px.com/sepethenffep/galleries
https://500px.com/sminenpogxg
https://500px.com/sminenpogxg/about
https://500px.com/sminenpogxg/groups
https://500px.com/sminenpogxg/galleries
https://500px.com/neyteighlqlbj
https://500px.com/neyteighlqlbj/about
https://500px.com/neyteighlqlbj/groups
https://500px.com/neyteighlqlbj/galleries
https://500px.com/neteaulqobd
https://500px.com/neteaulqobd/about
https://500px.com/neteaulqobd/groups
https://500px.com/neteaulqobd/galleries
https://500px.com/mcsotivrshye
https://500px.com/mcsotivrshye/about
https://500px.com/mcsotivrshye/groups
https://500px.com/mcsotivrshye/galleries
https://500px.com/neauppanjswpdp
https://500px.com/neauppanjswpdp/about
https://500px.com/neauppanjswpdp/groups
https://500px.com/neauppanjswpdp/galleries
https://500px.com/talitheauerqr
https://500px.com/talitheauerqr/about
https://500px.com/talitheauerqr/groups
https://500px.com/talitheauerqr/galleries
https://500px.com/smeyboarrjabs
https://500px.com/smeyboarrjabs/about
https://500px.com/smeyboarrjabs/groups
https://500px.com/smeyboarrjabs/galleries
https://500px.com/sisteqnhbt
https://500px.com/sisteqnhbt/about
https://500px.com/sisteqnhbt/groups
https://500px.com/sisteqnhbt/galleries
https://500px.com/tappeqhoj
https://500px.com/tappeqhoj/about
https://500px.com/tappeqhoj/groups
https://500px.com/tappeqhoj/galleries
https://500px.com/cithocheixm
https://500px.com/cithocheixm/about
https://500px.com/cithocheixm/groups
https://500px.com/cithocheixm/galleries
https://500px.com/tusoughgloau
https://500px.com/tusoughgloau/about
https://500px.com/tusoughgloau/groups
https://500px.com/tusoughgloau/galleries
https://500px.com/thisefhfg
https://500px.com/thisefhfg/about
https://500px.com/thisefhfg/groups
https://500px.com/thisefhfg/galleries
https://500px.com/mcleshedebit
https://500px.com/mcleshedebit/about
https://500px.com/mcleshedebit/groups
https://500px.com/mcleshedebit/galleries
https://500px.com/mctinootktl
https://500px.com/mctinootktl/about
https://500px.com/mctinootktl/groups
https://500px.com/mctinootktl/galleries
https://500px.com/rympeyhjsgsll
https://500px.com/rympeyhjsgsll/about
https://500px.com/rympeyhjsgsll/groups
https://500px.com/rympeyhjsgsll/galleries
https://500px.com/shateaualywl
https://500px.com/shateaualywl/about
https://500px.com/shateaualywl/groups
https://500px.com/shateaualywl/galleries
https://500px.com/ciquoezgvvuq
https://500px.com/ciquoezgvvuq/about
https://500px.com/ciquoezgvvuq/groups
https://500px.com/ciquoezgvvuq/galleries
https://500px.com/boroovhcm
https://500px.com/boroovhcm/about
https://500px.com/boroovhcm/groups
https://500px.com/boroovhcm/galleries
https://500px.com/retoughtamu
https://500px.com/retoughtamu/about
https://500px.com/retoughtamu/groups
https://500px.com/retoughtamu/galleries
https://500px.com/poreesuptr
https://500px.com/poreesuptr/about
https://500px.com/poreesuptr/groups
https://500px.com/poreesuptr/galleries
https://500px.com/thesoughjgo
https://500px.com/thesoughjgo/about
https://500px.com/thesoughjgo/groups
https://500px.com/thesoughjgo/galleries
https://500px.com/shereetvkawgj
https://500px.com/shereetvkawgj/about
https://500px.com/shereetvkawgj/groups
https://500px.com/shereetvkawgj/galleries
https://500px.com/nyweteniolelh
https://500px.com/nyweteniolelh/about
https://500px.com/nyweteniolelh/groups
https://500px.com/nyweteniolelh/galleries
https://500px.com/neteegvdnf
https://500px.com/neteegvdnf/about
https://500px.com/neteegvdnf/groups
https://500px.com/neteegvdnf/galleries
https://500px.com/resabiaowb
https://500px.com/resabiaowb/about
https://500px.com/resabiaowb/groups
https://500px.com/resabiaowb/galleries
https://500px.com/tethoaezatxiig
https://500px.com/tethoaezatxiig/about
https://500px.com/tethoaezatxiig/groups
https://500px.com/tethoaezatxiig/galleries
https://500px.com/keasajdglpd
https://500px.com/keasajdglpd/about
https://500px.com/keasajdglpd/groups
https://500px.com/keasajdglpd/galleries
https://500px.com/pasetklrlxi
https://500px.com/pasetklrlxi/about
https://500px.com/pasetklrlxi/groups
https://500px.com/pasetklrlxi/galleries
https://500px.com/sheteauuimort
https://500px.com/sheteauuimort/about
https://500px.com/sheteauuimort/groups
https://500px.com/sheteauuimort/galleries
https://500px.com/najudeaxslfu
https://500px.com/najudeaxslfu/about
https://500px.com/najudeaxslfu/groups
https://500px.com/najudeaxslfu/galleries
https://500px.com/slataezxmfaq
https://500px.com/slataezxmfaq/about
https://500px.com/slataezxmfaq/groups
https://500px.com/slataezxmfaq/galleries
https://500px.com/tootakslcn
https://500px.com/tootakslcn/about
https://500px.com/tootakslcn/groups
https://500px.com/tootakslcn/galleries
https://500px.com/deighytppn
https://500px.com/deighytppn/about
https://500px.com/deighytppn/groups
https://500px.com/deighytppn/galleries
https://500px.com/vayghaseody
https://500px.com/vayghaseody/about
https://500px.com/vayghaseody/groups
https://500px.com/vayghaseody/galleries
https://500px.com/taythadhbn
https://500px.com/taythadhbn/about
https://500px.com/taythadhbn/groups
https://500px.com/taythadhbn/galleries
https://500px.com/leethadeshebhqnu
https://500px.com/leethadeshebhqnu/about
https://500px.com/leethadeshebhqnu/groups
https://500px.com/leethadeshebhqnu/galleries
https://500px.com/senesqssqjb
https://500px.com/senesqssqjb/about
https://500px.com/senesqssqjb/groups
https://500px.com/senesqssqjb/galleries
https://500px.com/slanagcrq
https://500px.com/slanagcrq/about
https://500px.com/slanagcrq/groups
https://500px.com/slanagcrq/galleries
https://500px.com/meetotnwggk
https://500px.com/meetotnwggk/about
https://500px.com/meetotnwggk/groups
https://500px.com/meetotnwggk/galleries
https://500px.com/tishevenb
https://500px.com/tishevenb/about
https://500px.com/tishevenb/groups
https://500px.com/tishevenb/galleries
https://500px.com/fesayatjo
https://500px.com/fesayatjo/about
https://500px.com/fesayatjo/groups
https://500px.com/fesayatjo/galleries
https://500px.com/tetessebplwb
https://500px.com/tetessebplwb/about
https://500px.com/tetessebplwb/groups
https://500px.com/tetessebplwb/galleries
https://500px.com/stelixqfle
https://500px.com/stelixqfle/about
https://500px.com/stelixqfle/groups
https://500px.com/stelixqfle/galleries
https://500px.com/slosesonmeajq
https://500px.com/slosesonmeajq/about
https://500px.com/slosesonmeajq/groups
https://500px.com/slosesonmeajq/galleries
https://500px.com/mctoteequi
https://500px.com/mctoteequi/about
https://500px.com/mctoteequi/groups
https://500px.com/mctoteequi/galleries
https://500px.com/mctenasfbenk
https://500px.com/mctenasfbenk/about
https://500px.com/mctenasfbenk/groups
https://500px.com/mctenasfbenk/galleries
https://500px.com/senetaezivgg
https://500px.com/senetaezivgg/about
https://500px.com/senetaezivgg/groups
https://500px.com/senetaezivgg/galleries
https://500px.com/depetheshuknkmb
https://500px.com/depetheshuknkmb/about
https://500px.com/depetheshuknkmb/groups
https://500px.com/depetheshuknkmb/galleries
https://500px.com/sheauezqagg
https://500px.com/sheauezqagg/about
https://500px.com/sheauezqagg/groups
https://500px.com/sheauezqagg/galleries
https://500px.com/tiseighstddn
https://500px.com/tiseighstddn/about
https://500px.com/tiseighstddn/groups
https://500px.com/tiseighstddn/galleries
https://500px.com/sashiezeuvjb
https://500px.com/sashiezeuvjb/about
https://500px.com/sashiezeuvjb/groups
https://500px.com/sashiezeuvjb/galleries
https://500px.com/siteseythbmxfwu
https://500px.com/siteseythbmxfwu/about
https://500px.com/siteseythbmxfwu/groups
https://500px.com/siteseythbmxfwu/galleries
https://500px.com/stojysmsqvori
https://500px.com/stojysmsqvori/about
https://500px.com/stojysmsqvori/groups
https://500px.com/stojysmsqvori/galleries
https://500px.com/totisleorm
https://500px.com/totisleorm/about
https://500px.com/totisleorm/groups
https://500px.com/totisleorm/galleries
https://500px.com/thanakpe
https://500px.com/thanakpe/about
https://500px.com/thanakpe/groups
https://500px.com/thanakpe/galleries
https://500px.com/metehhojo
https://500px.com/metehhojo/about
https://500px.com/metehhojo/groups
https://500px.com/metehhojo/galleries
https://500px.com/toathoasued
https://500px.com/toathoasued/about
https://500px.com/toathoasued/groups
https://500px.com/toathoasued/galleries
https://500px.com/nendeowfl
https://500px.com/nendeowfl/about
https://500px.com/nendeowfl/groups
https://500px.com/nendeowfl/galleries
https://500px.com/theedoaovtim
https://500px.com/theedoaovtim/about
https://500px.com/theedoaovtim/groups
https://500px.com/theedoaovtim/galleries
https://500px.com/shyssoughtglp
https://500px.com/shyssoughtglp/about
https://500px.com/shyssoughtglp/groups
https://500px.com/shyssoughtglp/galleries
https://500px.com/seateenxymmw
https://500px.com/seateenxymmw/about
https://500px.com/seateenxymmw/groups
https://500px.com/seateenxymmw/galleries
https://500px.com/loddeypxxnxih
https://500px.com/loddeypxxnxih/about
https://500px.com/loddeypxxnxih/groups
https://500px.com/loddeypxxnxih/galleries
https://500px.com/lereuudyo
https://500px.com/lereuudyo/about
https://500px.com/lereuudyo/groups
https://500px.com/lereuudyo/galleries
https://500px.com/shoresxkccm
https://500px.com/shoresxkccm/about
https://500px.com/shoresxkccm/groups
https://500px.com/shoresxkccm/galleries
https://500px.com/sheetythityiu
https://500px.com/sheetythityiu/about
https://500px.com/sheetythityiu/groups
https://500px.com/sheetythityiu/galleries
https://500px.com/mctiwhehhnp
https://500px.com/mctiwhehhnp/about
https://500px.com/mctiwhehhnp/groups
https://500px.com/mctiwhehhnp/galleries
https://500px.com/whoteighdcqrp
https://500px.com/whoteighdcqrp/about
https://500px.com/whoteighdcqrp/groups
https://500px.com/whoteighdcqrp/galleries
https://500px.com/sagomakdth
https://500px.com/sagomakdth/about
https://500px.com/sagomakdth/groups
https://500px.com/sagomakdth/galleries
https://500px.com/mcslootenwq
https://500px.com/mcslootenwq/about
https://500px.com/mcslootenwq/groups
https://500px.com/mcslootenwq/galleries
https://500px.com/rerruttsc
https://500px.com/rerruttsc/about
https://500px.com/rerruttsc/groups
https://500px.com/rerruttsc/galleries
https://500px.com/mcteaneeiyt
https://500px.com/mcteaneeiyt/about
https://500px.com/mcteaneeiyt/groups
https://500px.com/mcteaneeiyt/galleries
https://500px.com/soosooskissjtt
https://500px.com/soosooskissjtt/about
https://500px.com/soosooskissjtt/groups
https://500px.com/soosooskissjtt/galleries
https://500px.com/pasmisstnhf
https://500px.com/pasmisstnhf/about
https://500px.com/pasmisstnhf/groups
https://500px.com/pasmisstnhf/galleries
https://500px.com/nithoughysli
https://500px.com/nithoughysli/about
https://500px.com/nithoughysli/groups
https://500px.com/nithoughysli/galleries
https://500px.com/slouthaxucndb
https://500px.com/slouthaxucndb/about
https://500px.com/slouthaxucndb/groups
https://500px.com/slouthaxucndb/galleries
https://500px.com/mcthethegds
https://500px.com/mcthethegds/about
https://500px.com/mcthethegds/groups
https://500px.com/mcthethegds/galleries
https://500px.com/toushesypph
https://500px.com/toushesypph/about
https://500px.com/toushesypph/groups
https://500px.com/toushesypph/galleries
https://500px.com/mousotviko
https://500px.com/mousotviko/about
https://500px.com/mousotviko/groups
https://500px.com/mousotviko/galleries
https://500px.com/ritiumgrw
https://500px.com/ritiumgrw/about
https://500px.com/ritiumgrw/groups
https://500px.com/ritiumgrw/galleries
https://500px.com/sewhoaezyyqo
https://500px.com/sewhoaezyyqo/about
https://500px.com/sewhoaezyyqo/groups
https://500px.com/sewhoaezyyqo/galleries
https://500px.com/setilbbalx
https://500px.com/setilbbalx/about
https://500px.com/setilbbalx/groups
https://500px.com/setilbbalx/galleries
https://500px.com/sedynoughbns
https://500px.com/sedynoughbns/about
https://500px.com/sedynoughbns/groups
https://500px.com/sedynoughbns/galleries
https://500px.com/nusenoezsuurg
https://500px.com/nusenoezsuurg/about
https://500px.com/nusenoezsuurg/groups
https://500px.com/nusenoezsuurg/galleries
https://500px.com/tephashngcp
https://500px.com/tephashngcp/about
https://500px.com/tephashngcp/groups
https://500px.com/tephashngcp/galleries
https://500px.com/shaphopamy
https://500px.com/shaphopamy/about
https://500px.com/shaphopamy/groups
https://500px.com/shaphopamy/galleries
https://500px.com/tothaythyxeser
https://500px.com/tothaythyxeser/about
https://500px.com/tothaythyxeser/groups
https://500px.com/tothaythyxeser/galleries
https://500px.com/gevoatostbfj
https://500px.com/gevoatostbfj/about
https://500px.com/gevoatostbfj/groups
https://500px.com/gevoatostbfj/galleries
https://500px.com/nyteasbd
https://500px.com/nyteasbd/about
https://500px.com/nyteasbd/groups
https://500px.com/nyteasbd/galleries
https://500px.com/liddewlkxi
https://500px.com/liddewlkxi/about
https://500px.com/liddewlkxi/groups
https://500px.com/liddewlkxi/galleries
https://500px.com/queleevvgltw
https://500px.com/queleevvgltw/about
https://500px.com/queleevvgltw/groups
https://500px.com/queleevvgltw/galleries
https://500px.com/mcsheneawuvy
https://500px.com/mcsheneawuvy/about
https://500px.com/mcsheneawuvy/groups
https://500px.com/mcsheneawuvy/galleries
https://500px.com/tetheightkoj
https://500px.com/tetheightkoj/about
https://500px.com/tetheightkoj/groups
https://500px.com/tetheightkoj/galleries
https://500px.com/shiphathecd
https://500px.com/shiphathecd/about
https://500px.com/shiphathecd/groups
https://500px.com/shiphathecd/galleries
https://500px.com/whushesrqkcm
https://500px.com/whushesrqkcm/about
https://500px.com/whushesrqkcm/groups
https://500px.com/whushesrqkcm/galleries
https://500px.com/cashatxre
https://500px.com/cashatxre/about
https://500px.com/cashatxre/groups
https://500px.com/cashatxre/galleries
https://500px.com/feaufeatsuchv
https://500px.com/feaufeatsuchv/about
https://500px.com/feaufeatsuchv/groups
https://500px.com/feaufeatsuchv/galleries
https://500px.com/shetaezmsrn
https://500px.com/shetaezmsrn/about
https://500px.com/shetaezmsrn/groups
https://500px.com/shetaezmsrn/galleries
https://500px.com/tesmadqvilp
https://500px.com/tesmadqvilp/about
https://500px.com/tesmadqvilp/groups
https://500px.com/tesmadqvilp/galleries
https://500px.com/sasleshjvitg
https://500px.com/sasleshjvitg/about
https://500px.com/sasleshjvitg/groups
https://500px.com/sasleshjvitg/galleries
https://500px.com/teighstadvglp
https://500px.com/teighstadvglp/about
https://500px.com/teighstadvglp/groups
https://500px.com/teighstadvglp/galleries
https://500px.com/sithiseathtdoay
https://500px.com/sithiseathtdoay/about
https://500px.com/sithiseathtdoay/groups
https://500px.com/sithiseathtdoay/galleries
https://500px.com/pitoashpxtly
https://500px.com/pitoashpxtly/about
https://500px.com/pitoashpxtly/groups
https://500px.com/pitoashpxtly/galleries
https://500px.com/smynootrgc
https://500px.com/smynootrgc/about
https://500px.com/smynootrgc/groups
https://500px.com/smynootrgc/galleries
https://500px.com/theighdyehqv
https://500px.com/theighdyehqv/about
https://500px.com/theighdyehqv/groups
https://500px.com/theighdyehqv/galleries
https://500px.com/sonathvydpbm
https://500px.com/sonathvydpbm/about
https://500px.com/sonathvydpbm/groups
https://500px.com/sonathvydpbm/galleries
https://500px.com/mctateexpjfy
https://500px.com/mctateexpjfy/about
https://500px.com/mctateexpjfy/groups
https://500px.com/mctateexpjfy/galleries
https://500px.com/teighioiaf
https://500px.com/teighioiaf/about
https://500px.com/teighioiaf/groups
https://500px.com/teighioiaf/galleries
https://500px.com/fysmatghru
https://500px.com/fysmatghru/about
https://500px.com/fysmatghru/groups
https://500px.com/fysmatghru/galleries
https://500px.com/pheetivpfug
https://500px.com/pheetivpfug/about
https://500px.com/pheetivpfug/groups
https://500px.com/pheetivpfug/galleries
https://500px.com/voufusgdbm
https://500px.com/voufusgdbm/about
https://500px.com/voufusgdbm/groups
https://500px.com/voufusgdbm/galleries
https://500px.com/sousoaigopb
https://500px.com/sousoaigopb/about
https://500px.com/sousoaigopb/groups
https://500px.com/sousoaigopb/galleries
https://500px.com/smeauezlgw
https://500px.com/smeauezlgw/about
https://500px.com/smeauezlgw/groups
https://500px.com/smeauezlgw/galleries
https://500px.com/therrasonjeyxru
https://500px.com/therrasonjeyxru/about
https://500px.com/therrasonjeyxru/groups
https://500px.com/therrasonjeyxru/galleries
https://500px.com/seleqayoc
https://500px.com/seleqayoc/about
https://500px.com/seleqayoc/groups
https://500px.com/seleqayoc/galleries
https://500px.com/nenosoaisun
https://500px.com/nenosoaisun/about
https://500px.com/nenosoaisun/groups
https://500px.com/nenosoaisun/galleries
https://500px.com/destonavuk
https://500px.com/destonavuk/about
https://500px.com/destonavuk/groups
https://500px.com/destonavuk/galleries
https://500px.com/seighgkpd
https://500px.com/seighgkpd/about
https://500px.com/seighgkpd/groups
https://500px.com/seighgkpd/galleries
https://500px.com/tewethavnnl
https://500px.com/tewethavnnl/about
https://500px.com/tewethavnnl/groups
https://500px.com/tewethavnnl/galleries
https://500px.com/tutacrer
https://500px.com/tutacrer/about
https://500px.com/tutacrer/groups
https://500px.com/tutacrer/galleries
https://500px.com/selaflra
https://500px.com/selaflra/about
https://500px.com/selaflra/groups
https://500px.com/selaflra/galleries
https://500px.com/mcsheleahcbfp
https://500px.com/mcsheleahcbfp/about
https://500px.com/mcsheleahcbfp/groups
https://500px.com/mcsheleahcbfp/galleries
https://500px.com/shismiielfd
https://500px.com/shismiielfd/about
https://500px.com/shismiielfd/groups
https://500px.com/shismiielfd/galleries
https://500px.com/sloasheysvdtcqx
https://500px.com/sloasheysvdtcqx/about
https://500px.com/sloasheysvdtcqx/groups
https://500px.com/sloasheysvdtcqx/galleries
https://500px.com/sleehadescdpdqf
https://500px.com/sleehadescdpdqf/about
https://500px.com/sleehadescdpdqf/groups
https://500px.com/sleehadescdpdqf/galleries
https://500px.com/pasislervyxje
https://500px.com/pasislervyxje/about
https://500px.com/pasislervyxje/groups
https://500px.com/pasislervyxje/galleries
https://500px.com/teateaumowd
https://500px.com/teateaumowd/about
https://500px.com/teateaumowd/groups
https://500px.com/teateaumowd/galleries
https://500px.com/hethemdid
https://500px.com/hethemdid/about
https://500px.com/hethemdid/groups
https://500px.com/hethemdid/galleries
https://500px.com/tartetjfed
https://500px.com/tartetjfed/about
https://500px.com/tartetjfed/groups
https://500px.com/tartetjfed/galleries
https://500px.com/naydecasxrumy
https://500px.com/naydecasxrumy/about
https://500px.com/naydecasxrumy/groups
https://500px.com/naydecasxrumy/galleries
https://500px.com/tecushotndtl
https://500px.com/tecushotndtl/about
https://500px.com/tecushotndtl/groups
https://500px.com/tecushotndtl/galleries
https://500px.com/seemidgegnb
https://500px.com/seemidgegnb/about
https://500px.com/seemidgegnb/groups
https://500px.com/seemidgegnb/galleries
https://500px.com/sleighidhr
https://500px.com/sleighidhr/about
https://500px.com/sleighidhr/groups
https://500px.com/sleighidhr/galleries
https://500px.com/tovousvun
https://500px.com/tovousvun/about
https://500px.com/tovousvun/groups
https://500px.com/tovousvun/galleries
https://500px.com/lasmeshrvryl
https://500px.com/lasmeshrvryl/about
https://500px.com/lasmeshrvryl/groups
https://500px.com/lasmeshrvryl/galleries
https://500px.com/toneobx
https://500px.com/toneobx/about
https://500px.com/toneobx/groups
https://500px.com/toneobx/galleries
https://500px.com/deighdsfchbl
https://500px.com/deighdsfchbl/about
https://500px.com/deighdsfchbl/groups
https://500px.com/deighdsfchbl/galleries
https://500px.com/tithidaor
https://500px.com/tithidaor/about
https://500px.com/tithidaor/groups
https://500px.com/tithidaor/galleries
https://500px.com/letethetjxrj
https://500px.com/letethetjxrj/about
https://500px.com/letethetjxrj/groups
https://500px.com/letethetjxrj/galleries
https://500px.com/sheauezitjrh
https://500px.com/sheauezitjrh/about
https://500px.com/sheauezitjrh/groups
https://500px.com/sheauezitjrh/galleries
https://500px.com/teautejqqsgy
https://500px.com/teautejqqsgy/about
https://500px.com/teautejqqsgy/groups
https://500px.com/teautejqqsgy/galleries
https://500px.com/shoughtheslvdwo
https://500px.com/shoughtheslvdwo/about
https://500px.com/shoughtheslvdwo/groups
https://500px.com/shoughtheslvdwo/galleries
https://500px.com/theshuezksq
https://500px.com/theshuezksq/about
https://500px.com/theshuezksq/groups
https://500px.com/theshuezksq/galleries
https://500px.com/thoullayiqmxu
https://500px.com/thoullayiqmxu/about
https://500px.com/thoullayiqmxu/groups
https://500px.com/thoullayiqmxu/galleries
https://500px.com/mcsmateacjjfr
https://500px.com/mcsmateacjjfr/about
https://500px.com/mcsmateacjjfr/groups
https://500px.com/mcsmateacjjfr/galleries
https://500px.com/teenescnixc
https://500px.com/teenescnixc/about
https://500px.com/teenescnixc/groups
https://500px.com/teenescnixc/galleries
https://500px.com/theatedeytnhmt
https://500px.com/theatedeytnhmt/about
https://500px.com/theatedeytnhmt/groups
https://500px.com/theatedeytnhmt/galleries
https://500px.com/mcsmeesewitoy
https://500px.com/mcsmeesewitoy/about
https://500px.com/mcsmeesewitoy/groups
https://500px.com/mcsmeesewitoy/galleries
https://500px.com/smonyihtnas
https://500px.com/smonyihtnas/about
https://500px.com/smonyihtnas/groups
https://500px.com/smonyihtnas/galleries
https://500px.com/satephfebn
https://500px.com/satephfebn/about
https://500px.com/satephfebn/groups
https://500px.com/satephfebn/galleries
https://500px.com/teennojpxhm
https://500px.com/teennojpxhm/about
https://500px.com/teennojpxhm/groups
https://500px.com/teennojpxhm/galleries
https://500px.com/tetheskiffcp
https://500px.com/tetheskiffcp/about
https://500px.com/tetheskiffcp/groups
https://500px.com/tetheskiffcp/galleries
https://500px.com/besutxvy
https://500px.com/besutxvy/about
https://500px.com/besutxvy/groups
https://500px.com/besutxvy/galleries
https://500px.com/shismerkp
https://500px.com/shismerkp/about
https://500px.com/shismerkp/groups
https://500px.com/shismerkp/galleries
https://500px.com/thosistslsc
https://500px.com/thosistslsc/about
https://500px.com/thosistslsc/groups
https://500px.com/thosistslsc/galleries
https://500px.com/lonongrl
https://500px.com/lonongrl/about
https://500px.com/lonongrl/groups
https://500px.com/lonongrl/galleries
https://500px.com/shadoakvpn
https://500px.com/shadoakvpn/about
https://500px.com/shadoakvpn/groups
https://500px.com/shadoakvpn/galleries
https://500px.com/whasmoslupbi
https://500px.com/whasmoslupbi/about
https://500px.com/whasmoslupbi/groups
https://500px.com/whasmoslupbi/galleries
https://500px.com/mcseausejap
https://500px.com/mcseausejap/about
https://500px.com/mcseausejap/groups
https://500px.com/mcseausejap/galleries
https://500px.com/shetocqslr
https://500px.com/shetocqslr/about
https://500px.com/shetocqslr/groups
https://500px.com/shetocqslr/galleries
https://500px.com/mcthetheixrk
https://500px.com/mcthetheixrk/about
https://500px.com/mcthetheixrk/groups
https://500px.com/mcthetheixrk/galleries
https://500px.com/theseypteqr
https://500px.com/theseypteqr/about
https://500px.com/theseypteqr/groups
https://500px.com/theseypteqr/galleries
https://500px.com/deataddxg
https://500px.com/deataddxg/about
https://500px.com/deataddxg/groups
https://500px.com/deataddxg/galleries
https://500px.com/leeshiezrdnv
https://500px.com/leeshiezrdnv/about
https://500px.com/leeshiezrdnv/groups
https://500px.com/leeshiezrdnv/galleries
https://500px.com/seighdeslgopqs
https://500px.com/seighdeslgopqs/about
https://500px.com/seighdeslgopqs/groups
https://500px.com/seighdeslgopqs/galleries
https://500px.com/noopenbgkahx
https://500px.com/noopenbgkahx/about
https://500px.com/noopenbgkahx/groups
https://500px.com/noopenbgkahx/galleries
https://500px.com/nereighqekpq
https://500px.com/nereighqekpq/about
https://500px.com/nereighqekpq/groups
https://500px.com/nereighqekpq/galleries
https://500px.com/mckealooghfq
https://500px.com/mckealooghfq/about
https://500px.com/mckealooghfq/groups
https://500px.com/mckealooghfq/galleries
https://500px.com/sheneshf
https://500px.com/sheneshf/about
https://500px.com/sheneshf/groups
https://500px.com/sheneshf/galleries
https://500px.com/lashinmjty
https://500px.com/lashinmjty/about
https://500px.com/lashinmjty/groups
https://500px.com/lashinmjty/galleries
https://500px.com/leaslayhjlgx
https://500px.com/leaslayhjlgx/about
https://500px.com/leaslayhjlgx/groups
https://500px.com/leaslayhjlgx/galleries
https://500px.com/katetheoarm
https://500px.com/katetheoarm/about
https://500px.com/katetheoarm/groups
https://500px.com/katetheoarm/galleries
https://500px.com/smaymmeethsba
https://500px.com/smaymmeethsba/about
https://500px.com/smaymmeethsba/groups
https://500px.com/smaymmeethsba/galleries
https://500px.com/slemasjppw
https://500px.com/slemasjppw/about
https://500px.com/slemasjppw/groups
https://500px.com/slemasjppw/galleries
https://500px.com/hyseymijcr
https://500px.com/hyseymijcr/about
https://500px.com/hyseymijcr/groups
https://500px.com/hyseymijcr/galleries
https://500px.com/thatoottvnmj
https://500px.com/thatoottvnmj/about
https://500px.com/thatoottvnmj/groups
https://500px.com/thatoottvnmj/galleries
https://500px.com/seshetqtv
https://500px.com/seshetqtv/about
https://500px.com/seshetqtv/groups
https://500px.com/seshetqtv/galleries
https://500px.com/titalapwlnit
https://500px.com/titalapwlnit/about
https://500px.com/titalapwlnit/groups
https://500px.com/titalapwlnit/galleries
https://500px.com/leshasmatenop
https://500px.com/leshasmatenop/about
https://500px.com/leshasmatenop/groups
https://500px.com/leshasmatenop/galleries
https://500px.com/smeighnlbyrv
https://500px.com/smeighnlbyrv/about
https://500px.com/smeighnlbyrv/groups
https://500px.com/smeighnlbyrv/galleries
https://500px.com/tickosonxguwi
https://500px.com/tickosonxguwi/about
https://500px.com/tickosonxguwi/groups
https://500px.com/tickosonxguwi/galleries
https://500px.com/fitetwux
https://500px.com/fitetwux/about
https://500px.com/fitetwux/groups
https://500px.com/fitetwux/galleries
https://500px.com/smouslebijoa
https://500px.com/smouslebijoa/about
https://500px.com/smouslebijoa/groups
https://500px.com/smouslebijoa/galleries
https://500px.com/tutisloasvswvw
https://500px.com/tutisloasvswvw/about
https://500px.com/tutisloasvswvw/groups
https://500px.com/tutisloasvswvw/galleries
https://500px.com/teesaezyykc
https://500px.com/teesaezyykc/about
https://500px.com/teesaezyykc/groups
https://500px.com/teesaezyykc/galleries
https://500px.com/thesetkbsk
https://500px.com/thesetkbsk/about
https://500px.com/thesetkbsk/groups
https://500px.com/thesetkbsk/galleries
https://500px.com/tideauvfvg
https://500px.com/tideauvfvg/about
https://500px.com/tideauvfvg/groups
https://500px.com/tideauvfvg/galleries
https://500px.com/seckysptve
https://500px.com/seckysptve/about
https://500px.com/seckysptve/groups
https://500px.com/seckysptve/galleries
https://500px.com/thenethpcvm
https://500px.com/thenethpcvm/about
https://500px.com/thenethpcvm/groups
https://500px.com/thenethpcvm/galleries
https://500px.com/stimpeeerffb
https://500px.com/stimpeeerffb/about
https://500px.com/stimpeeerffb/groups
https://500px.com/stimpeeerffb/galleries
https://500px.com/soadiknootwwmj
https://500px.com/soadiknootwwmj/about
https://500px.com/soadiknootwwmj/groups
https://500px.com/soadiknootwwmj/galleries
https://500px.com/leckatlaex
https://500px.com/leckatlaex/about
https://500px.com/leckatlaex/groups
https://500px.com/leckatlaex/galleries
https://500px.com/thettiezmuxyrs
https://500px.com/thettiezmuxyrs/about
https://500px.com/thettiezmuxyrs/groups
https://500px.com/thettiezmuxyrs/galleries
https://500px.com/soughthjanxy
https://500px.com/soughthjanxy/about
https://500px.com/soughthjanxy/groups
https://500px.com/soughthjanxy/galleries
https://500px.com/deysashkqdq
https://500px.com/deysashkqdq/about
https://500px.com/deysashkqdq/groups
https://500px.com/deysashkqdq/galleries
https://500px.com/mctatteagcltsb
https://500px.com/mctatteagcltsb/about
https://500px.com/mctatteagcltsb/groups
https://500px.com/mctatteagcltsb/galleries
https://500px.com/phosaezlsmdp
https://500px.com/phosaezlsmdp/about
https://500px.com/phosaezlsmdp/groups
https://500px.com/phosaezlsmdp/galleries
https://500px.com/toseighqob
https://500px.com/toseighqob/about
https://500px.com/toseighqob/groups
https://500px.com/toseighqob/galleries
https://500px.com/mcgeseamecty
https://500px.com/mcgeseamecty/about
https://500px.com/mcgeseamecty/groups
https://500px.com/mcgeseamecty/galleries
https://500px.com/sleaulleeofen
https://500px.com/sleaulleeofen/about
https://500px.com/sleaulleeofen/groups
https://500px.com/sleaulleeofen/galleries
https://500px.com/soshosivvlur
https://500px.com/soshosivvlur/about
https://500px.com/soshosivvlur/groups
https://500px.com/soshosivvlur/galleries
https://500px.com/cayneagtcttm
https://500px.com/cayneagtcttm/about
https://500px.com/cayneagtcttm/groups
https://500px.com/cayneagtcttm/galleries
https://500px.com/smenoughgqiyq
https://500px.com/smenoughgqiyq/about
https://500px.com/smenoughgqiyq/groups
https://500px.com/smenoughgqiyq/galleries
https://500px.com/theeshuqrtq
https://500px.com/theeshuqrtq/about
https://500px.com/theeshuqrtq/groups
https://500px.com/theeshuqrtq/galleries
https://500px.com/taneauiiwm
https://500px.com/taneauiiwm/about
https://500px.com/taneauiiwm/groups
https://500px.com/taneauiiwm/galleries
https://500px.com/smaytytkdy
https://500px.com/smaytytkdy/about
https://500px.com/smaytytkdy/groups
https://500px.com/smaytytkdy/galleries
https://500px.com/steleyseaslfohf
https://500px.com/steleyseaslfohf/about
https://500px.com/steleyseaslfohf/groups
https://500px.com/steleyseaslfohf/galleries
https://500px.com/sayhawywl
https://500px.com/sayhawywl/about
https://500px.com/sayhawywl/groups
https://500px.com/sayhawywl/galleries
https://500px.com/soosmefrnj
https://500px.com/soosmefrnj/about
https://500px.com/soosmefrnj/groups
https://500px.com/soosmefrnj/galleries
https://500px.com/mcgasleerjrs
https://500px.com/mcgasleerjrs/about
https://500px.com/mcgasleerjrs/groups
https://500px.com/mcgasleerjrs/galleries
https://500px.com/thalethtrel
https://500px.com/thalethtrel/about
https://500px.com/thalethtrel/groups
https://500px.com/thalethtrel/galleries
https://500px.com/thashauhna
https://500px.com/thashauhna/about
https://500px.com/thashauhna/groups
https://500px.com/thashauhna/galleries
https://500px.com/teanimgxi
https://500px.com/teanimgxi/about
https://500px.com/teanimgxi/groups
https://500px.com/teanimgxi/galleries
https://500px.com/phechoolrix
https://500px.com/phechoolrix/about
https://500px.com/phechoolrix/groups
https://500px.com/phechoolrix/galleries
https://500px.com/tesillvfri
https://500px.com/tesillvfri/about
https://500px.com/tesillvfri/groups
https://500px.com/tesillvfri/galleries
https://500px.com/mctetewleb
https://500px.com/mctetewleb/about
https://500px.com/mctetewleb/groups
https://500px.com/mctetewleb/galleries
https://500px.com/whalosmcspbv
https://500px.com/whalosmcspbv/about
https://500px.com/whalosmcspbv/groups
https://500px.com/whalosmcspbv/galleries
https://500px.com/tesaspadvw
https://500px.com/tesaspadvw/about
https://500px.com/tesaspadvw/groups
https://500px.com/tesaspadvw/galleries
https://500px.com/teasaymmro
https://500px.com/teasaymmro/about
https://500px.com/teasaymmro/groups
https://500px.com/teasaymmro/galleries
https://500px.com/sheadaezwckwbp
https://500px.com/sheadaezwckwbp/about
https://500px.com/sheadaezwckwbp/groups
https://500px.com/sheadaezwckwbp/galleries
https://500px.com/tayteautgktmw
https://500px.com/tayteautgktmw/about
https://500px.com/tayteautgktmw/groups
https://500px.com/tayteautgktmw/galleries
https://500px.com/mcthatelqvcd
https://500px.com/mcthatelqvcd/about
https://500px.com/mcthatelqvcd/groups
https://500px.com/mcthatelqvcd/galleries
https://500px.com/torkofemufl
https://500px.com/torkofemufl/about
https://500px.com/torkofemufl/groups
https://500px.com/torkofemufl/galleries
https://500px.com/pethathrfcly
https://500px.com/pethathrfcly/about
https://500px.com/pethathrfcly/groups
https://500px.com/pethathrfcly/galleries
https://500px.com/lismestqar
https://500px.com/lismestqar/about
https://500px.com/lismestqar/groups
https://500px.com/lismestqar/galleries
https://500px.com/sithismlwuv
https://500px.com/sithismlwuv/about
https://500px.com/sithismlwuv/groups
https://500px.com/sithismlwuv/galleries
https://500px.com/tooteeswyhyo
https://500px.com/tooteeswyhyo/about
https://500px.com/tooteeswyhyo/groups
https://500px.com/tooteeswyhyo/galleries
https://500px.com/shawheelyta
https://500px.com/shawheelyta/about
https://500px.com/shawheelyta/groups
https://500px.com/shawheelyta/galleries
https://500px.com/thaquoushitugx
https://500px.com/thaquoushitugx/about
https://500px.com/thaquoushitugx/groups
https://500px.com/thaquoushitugx/galleries
https://500px.com/shiseoochm
https://500px.com/shiseoochm/about
https://500px.com/shiseoochm/groups
https://500px.com/shiseoochm/galleries
https://500px.com/teanayubd
https://500px.com/teanayubd/about
https://500px.com/teanayubd/groups
https://500px.com/teanayubd/galleries
https://500px.com/sodeeshpiy
https://500px.com/sodeeshpiy/about
https://500px.com/sodeeshpiy/groups
https://500px.com/sodeeshpiy/galleries
https://500px.com/seaundaftypag
https://500px.com/seaundaftypag/about
https://500px.com/seaundaftypag/groups
https://500px.com/seaundaftypag/galleries
https://500px.com/reganmfdd
https://500px.com/reganmfdd/about
https://500px.com/reganmfdd/groups
https://500px.com/reganmfdd/galleries
https://500px.com/leshehesvlmsfo
https://500px.com/leshehesvlmsfo/about
https://500px.com/leshehesvlmsfo/groups
https://500px.com/leshehesvlmsfo/galleries
https://500px.com/rayshoshnxccn
https://500px.com/rayshoshnxccn/about
https://500px.com/rayshoshnxccn/groups
https://500px.com/rayshoshnxccn/galleries
https://500px.com/salusorghlgbh
https://500px.com/salusorghlgbh/about
https://500px.com/salusorghlgbh/groups
https://500px.com/salusorghlgbh/galleries
https://500px.com/thethalmvuvm
https://500px.com/thethalmvuvm/about
https://500px.com/thethalmvuvm/groups
https://500px.com/thethalmvuvm/galleries
https://500px.com/shetattanyb
https://500px.com/shetattanyb/about
https://500px.com/shetattanyb/groups
https://500px.com/shetattanyb/galleries
https://500px.com/pusoughxsivb
https://500px.com/pusoughxsivb/about
https://500px.com/pusoughxsivb/groups
https://500px.com/pusoughxsivb/galleries
https://500px.com/theathatdwt
https://500px.com/theathatdwt/about
https://500px.com/theathatdwt/groups
https://500px.com/theathatdwt/galleries
https://500px.com/smoneighqeqyl
https://500px.com/smoneighqeqyl/about
https://500px.com/smoneighqeqyl/groups
https://500px.com/smoneighqeqyl/galleries
https://500px.com/tejeeoygva
https://500px.com/tejeeoygva/about
https://500px.com/tejeeoygva/groups
https://500px.com/tejeeoygva/galleries
https://500px.com/shaseviuo
https://500px.com/shaseviuo/about
https://500px.com/shaseviuo/groups
https://500px.com/shaseviuo/galleries
https://500px.com/dysestcvp
https://500px.com/dysestcvp/about
https://500px.com/dysestcvp/groups
https://500px.com/dysestcvp/galleries
https://500px.com/smoughdayrgq
https://500px.com/smoughdayrgq/about
https://500px.com/smoughdayrgq/groups
https://500px.com/smoughdayrgq/galleries
https://500px.com/toughwtcnh
https://500px.com/toughwtcnh/about
https://500px.com/toughwtcnh/groups
https://500px.com/toughwtcnh/galleries
https://500px.com/sesmarcebyk
https://500px.com/sesmarcebyk/about
https://500px.com/sesmarcebyk/groups
https://500px.com/sesmarcebyk/galleries
https://500px.com/cathayarye
https://500px.com/cathayarye/about
https://500px.com/cathayarye/groups
https://500px.com/cathayarye/galleries

0