33// file COPYING or http://www.opensource.org/licenses/mit-license.php.
44
55#include " main.h"
6- #include " init.h"
7-
86#include " masternode-sync.h"
97#include " masternode.h"
8+ #include " masternodeman.h"
109#include " util.h"
1110#include " addrman.h"
1211
@@ -15,11 +14,10 @@ CMasternodeSync masternodeSync;
1514
1615CMasternodeSync::CMasternodeSync ()
1716{
18- c = 0 ;
1917 lastMasternodeList = 0 ;
2018 lastMasternodeWinner = 0 ;
2119 lastBudgetItem = 0 ;
22- RequestedMasternodeAssets = 0 ;
20+ RequestedMasternodeAssets = MASTERNODE_INITIAL ;
2321 RequestedMasternodeAttempt = 0 ;
2422}
2523
@@ -63,96 +61,98 @@ void CMasternodeSync::GetNextAsset()
6361 RequestedMasternodeAssets = MASTERNODE_LIST_SYNCED;
6462 break ;
6563 }
64+ RequestedMasternodeAttempt = 0 ;
6665}
6766
68- void CMasternodeSync::Process ()
67+ void CMasternodeSync::Process ()
6968{
69+ static int c = 0 ;
70+
7071 if (IsSynced ()) return ;
7172
73+ if (c++ % MASTERNODE_SYNC_TIMEOUT != 0 ) return ;
74+
75+ if (fDebug ) LogPrintf (" CMasternodeSync::Process() - RequestedMasternodeAssets %d c %d\n " , RequestedMasternodeAssets, c);
76+
7277 // request full mn list only if Masternodes.dat was updated quite a long time ago
7378 if (RequestedMasternodeAssets == MASTERNODE_INITIAL) GetNextAsset ();
7479
7580 CBlockIndex* pindexPrev = chainActive.Tip ();
7681 if (pindexPrev == NULL ) return ;
7782
78- // try to sync the Masternode list and payment list every 5 seconds from at least 3 nodes
79- if (c % 5 == 0 ){
80- LOCK (cs_vNodes);
81- BOOST_FOREACH (CNode* pnode, vNodes )
83+ LOCK (cs_vNodes);
84+ BOOST_FOREACH (CNode* pnode, vNodes)
85+ {
86+ if ( pnode-> nVersion >= MIN_POOL_PEER_PROTO_VERSION )
8287 {
83- if (pnode->nVersion >= MIN_POOL_PEER_PROTO_VERSION)
84- {
85-
86- if (RequestedMasternodeAssets == MASTERNODE_SPORK_SETTINGS){
87- if (pnode->HasFulfilledRequest (" getspork" )) continue ;
88- pnode->FulfilledRequest (" getspork" );
89-
90- if (RequestedMasternodeAttempt <= 2 ){
91- pnode->PushMessage (" getsporks" ); // get current network sporks
92- if (RequestedMasternodeAttempt == 2 ) GetNextAsset ();
93- RequestedMasternodeAttempt++;
94- }
95- return ;
96- }
9788
98- if (IsInitialBlockDownload ()) return ;
89+ if (RequestedMasternodeAssets == MASTERNODE_SPORK_SETTINGS){
90+ if (pnode->HasFulfilledRequest (" getspork" )) continue ;
91+ pnode->FulfilledRequest (" getspork" );
9992
100- if (RequestedMasternodeAssets == MASTERNODE_SYNC_LIST){
101- if (lastMasternodeList > 0 && lastMasternodeList < GetTime () - 5 ){ // hasn't received a new item in the last five seconds, so we'll move to the
102- GetNextAsset ();
103- return ;
104- }
93+ if (RequestedMasternodeAttempt <= 2 ){
94+ pnode->PushMessage (" getsporks" ); // get current network sporks
95+ if (RequestedMasternodeAttempt == 2 ) GetNextAsset ();
96+ RequestedMasternodeAttempt++;
97+ }
98+ return ;
99+ }
105100
106- if (pnode->HasFulfilledRequest (" mnsync" )) continue ;
107- pnode->FulfilledRequest (" mnsync" );
101+ if (IsInitialBlockDownload ()) return ;
108102
109- if ((lastMasternodeList == 0 || lastMasternodeList > GetTime () - 5 ) && RequestedMasternodeAttempt <= 4 ){
110- mnodeman.DsegUpdate (pnode);
111- pnode->PushMessage (" getsporks" ); // get current network sporks
112- AddedMasternodeList ();
113- RequestedMasternodeAttempt++;
114- }
103+ if (RequestedMasternodeAssets == MASTERNODE_SYNC_LIST){
104+ if (lastMasternodeList > 0 && lastMasternodeList < GetTime () - MASTERNODE_SYNC_TIMEOUT){ // hasn't received a new item in the last five seconds, so we'll move to the
105+ GetNextAsset ();
115106 return ;
116107 }
117108
118- if (RequestedMasternodeAssets == MASTERNODE_SYNC_MNW){
119- if (lastMasternodeWinner > 0 && lastMasternodeWinner < GetTime () - 5 ){ // hasn't received a new item in the last five seconds, so we'll move to the
120- GetNextAsset ();
121- return ;
122- }
109+ if (pnode->HasFulfilledRequest (" mnsync" )) continue ;
110+ pnode->FulfilledRequest (" mnsync" );
123111
124- if (pnode->HasFulfilledRequest (" mnwsync" )) continue ;
125- pnode->FulfilledRequest (" mnwsync" );
112+ if ((lastMasternodeList == 0 || lastMasternodeList > GetTime () - MASTERNODE_SYNC_TIMEOUT)
113+ && RequestedMasternodeAttempt <= 2 ){
114+ mnodeman.DsegUpdate (pnode);
115+ RequestedMasternodeAttempt++;
116+ }
117+ return ;
118+ }
126119
127- if ((lastMasternodeWinner == 0 || lastMasternodeWinner > GetTime () - 5 ) && RequestedMasternodeAttempt <= 6 ){
128- pnode->PushMessage (" mnget" ); // sync payees
129- AddedMasternodeWinner ();
130- RequestedMasternodeAttempt++;
131- }
120+ if (RequestedMasternodeAssets == MASTERNODE_SYNC_MNW){
121+ if (lastMasternodeWinner > 0 && lastMasternodeWinner < GetTime () - MASTERNODE_SYNC_TIMEOUT){ // hasn't received a new item in the last five seconds, so we'll move to the
122+ GetNextAsset ();
132123 return ;
133124 }
134-
135- if (RequestedMasternodeAssets == MASTERNODE_SYNC_BUDGET){
136- if (lastBudgetItem > 0 && lastBudgetItem < GetTime () - 5 ){ // hasn't received a new item in the last five seconds, so we'll move to the
137- GetNextAsset ();
138- return ;
139- }
140-
141- if (pnode->HasFulfilledRequest (" busync" )) continue ;
142- pnode->FulfilledRequest (" busync" );
143-
144- if ((lastBudgetItem == 0 || lastBudgetItem > GetTime () - 5 ) && RequestedMasternodeAttempt <= 8 ){
145- uint256 n = 0 ;
146-
147- pnode->PushMessage (" mnvs" , n); // sync masternode votes
148- AddedBudgetItem ();
149- RequestedMasternodeAttempt++;
150- }
125+
126+ if (pnode->HasFulfilledRequest (" mnwsync" )) continue ;
127+ pnode->FulfilledRequest (" mnwsync" );
128+
129+ if ((lastMasternodeWinner == 0 || lastMasternodeWinner > GetTime () - MASTERNODE_SYNC_TIMEOUT)
130+ && RequestedMasternodeAttempt <= 2 ){
131+ pnode->PushMessage (" mnget" ); // sync payees
132+ RequestedMasternodeAttempt++;
133+ }
134+ return ;
135+ }
136+
137+ if (RequestedMasternodeAssets == MASTERNODE_SYNC_BUDGET){
138+ if (lastBudgetItem > 0 && lastBudgetItem < GetTime () - MASTERNODE_SYNC_TIMEOUT){ // hasn't received a new item in the last five seconds, so we'll move to the
139+ GetNextAsset ();
151140 return ;
152141 }
153142
143+ if (pnode->HasFulfilledRequest (" busync" )) continue ;
144+ pnode->FulfilledRequest (" busync" );
145+
146+ if ((lastBudgetItem == 0 || lastBudgetItem > GetTime () - MASTERNODE_SYNC_TIMEOUT)
147+ && RequestedMasternodeAttempt <= 2 ){
148+ uint256 n = 0 ;
149+
150+ pnode->PushMessage (" mnvs" , n); // sync masternode votes
151+ RequestedMasternodeAttempt++;
152+ }
153+ return ;
154154 }
155+
155156 }
156157 }
157- c++;
158- }
158+ }
0 commit comments