Skip to content

Commit c7baeb0

Browse files
author
coin-server
committed
Merge branch 'fix-spork-keys' into 'master'
Change of mainnet spork keys See merge request ProjectMerge/merge!35
2 parents f336165 + 5871146 commit c7baeb0

File tree

4 files changed

+36
-11
lines changed

4 files changed

+36
-11
lines changed

src/chainparams.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ class CMainParams : public CChainParams
9999
nMaxMoneyOut = 100000000 * COIN;
100100
nLastPOWBlock = 57601;
101101
nModifierUpdateBlock = 50;
102+
nEnforceNewSporkKey = 1554685200;
103+
nRejectOldSporkKey = 1557277200;
102104

103105
const char* pszTimestamp = "ABC News 24/DEC/2018 Trump's Treasury Secretary to convene 'Plunge Protection Team' to deal with Wall Street rout";
104106
CMutableTransaction txNew;
@@ -142,7 +144,8 @@ class CMainParams : public CChainParams
142144
fHeadersFirstSyncingActive = false;
143145

144146
nPoolMaxTransactions = 3;
145-
strSporkKey = "0421783d5f8b38c2f71f10a7e8a4c5df39bfe1d3ca10dd17e5fc76ff5b523ab21e89ae0276aae967d0d7f26c3f34136acdc0a2f41bab19cc262658703f38a3da55";
147+
strSporkKey = "04b86d4321e8aa926be7d366057ba41dbad32fdc7e5efa78d284ffc9d45ea63c796d58dc2f9050d9c83006bc7bce31d79f7bc84a59a4472718e245dccfe763b435";
148+
strSporkKeyOld = "0421783d5f8b38c2f71f10a7e8a4c5df39bfe1d3ca10dd17e5fc76ff5b523ab21e89ae0276aae967d0d7f26c3f34136acdc0a2f41bab19cc262658703f38a3da55";
146149
strObfuscationPoolDummyAddress = "MERGEXXXXXXXXXXXXXXXXXXXXXXXYmkoB4";
147150
nStartMasternodePayments = genesis.nTime + 5400;
148151
nBudget_Fee_Confirmations = 6;

src/chainparams.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ class CChainParams
9191
virtual const Checkpoints::CCheckpointData& Checkpoints() const = 0;
9292
int PoolMaxTransactions() const { return nPoolMaxTransactions; }
9393
std::string SporkKey() const { return strSporkKey; }
94+
std::string SporkKeyOld() const { return strSporkKeyOld; }
95+
int64_t NewSporkStart() const { return nEnforceNewSporkKey; }
96+
int64_t RejectOldSporkKey() const { return nRejectOldSporkKey; }
9497
std::string ObfuscationPoolDummyAddress() const { return strObfuscationPoolDummyAddress; }
9598
int64_t StartMasternodePayments() const { return nStartMasternodePayments; }
9699
int64_t Budget_Fee_Confirmations() const { return nBudget_Fee_Confirmations; }
@@ -139,6 +142,9 @@ class CChainParams
139142
bool fHeadersFirstSyncingActive;
140143
int nPoolMaxTransactions;
141144
std::string strSporkKey;
145+
std::string strSporkKeyOld;
146+
int64_t nEnforceNewSporkKey;
147+
int64_t nRejectOldSporkKey;
142148
std::string strObfuscationPoolDummyAddress;
143149
int64_t nStartMasternodePayments;
144150
int64_t nBudget_Fee_Confirmations;

src/spork.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,22 @@ void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv)
7777
uint256 hash = spork.GetHash();
7878
if (mapSporksActive.count(spork.nSporkID)) {
7979
if (mapSporksActive[spork.nSporkID].nTimeSigned >= spork.nTimeSigned) {
80-
if (fDebug) LogPrintf("spork - seen %s block %d \n", hash.ToString(), chainActive.Tip()->nHeight);
80+
if (fDebug) LogPrintf("%s : seen %s block %d \n", __func__, hash.ToString(), chainActive.Tip()->nHeight);
8181
return;
8282
} else {
83-
if (fDebug) LogPrintf("spork - got updated spork %s block %d \n", hash.ToString(), chainActive.Tip()->nHeight);
83+
if (fDebug) LogPrintf("%s : got updated spork %s block %d \n", __func__, hash.ToString(), chainActive.Tip()->nHeight);
8484
}
8585
}
8686

87-
LogPrintf("spork - new %s ID %d Time %d bestHeight %d\n", hash.ToString(), spork.nSporkID, spork.nValue, chainActive.Tip()->nHeight);
87+
LogPrintf("%s : new %s ID %d Time %d bestHeight %d\n", __func__, hash.ToString(), spork.nSporkID, spork.nValue, chainActive.Tip()->nHeight);
88+
89+
if (spork.nTimeSigned >= Params().NewSporkStart()) {
90+
if (!sporkManager.CheckSignature(spork, true)) {
91+
LogPrintf("%s : Invalid Signature\n", __func__);
92+
Misbehaving(pfrom->GetId(), 100);
93+
return;
94+
}
95+
}
8896

8997
if (!sporkManager.CheckSignature(spork)) {
9098
LogPrintf("spork - invalid signature\n");
@@ -130,7 +138,7 @@ int64_t GetSporkValue(int nSporkID)
130138
if (nSporkID == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) r = SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT;
131139
if (nSporkID == SPORK_16_ZEROCOIN_MAINTENANCE_MODE) r = SPORK_16_ZEROCOIN_MAINTENANCE_MODE_DEFAULT;
132140

133-
if (r == -1) LogPrintf("GetSpork::Unknown Spork %d\n", nSporkID);
141+
if (r == -1) LogPrintf("%s : Unknown Spork %d\n", __func__, nSporkID);
134142
}
135143

136144
return r;
@@ -176,13 +184,23 @@ void ReprocessBlocks(int nBlocks)
176184
}
177185
}
178186

179-
bool CSporkManager::CheckSignature(CSporkMessage& spork)
187+
bool CSporkManager::CheckSignature(CSporkMessage& spork, bool fCheckSigner)
180188
{
181189
//note: need to investigate why this is failing
182190
std::string strMessage = boost::lexical_cast<std::string>(spork.nSporkID) + boost::lexical_cast<std::string>(spork.nValue) + boost::lexical_cast<std::string>(spork.nTimeSigned);
183191
CPubKey pubkeynew(ParseHex(Params().SporkKey()));
184192
std::string errorMessage = "";
185-
if (obfuScationSigner.VerifyMessage(pubkeynew, spork.vchSig, strMessage, errorMessage)) {
193+
if (fCheckSigner && !obfuScationSigner.VerifyMessage(pubkeynew, spork.vchSig,strMessage, errorMessage))
194+
return false;
195+
196+
if (GetAdjustedTime() < Params().RejectOldSporkKey()) {
197+
CPubKey pubkeyold(ParseHex(Params().SporkKeyOld()));
198+
if (obfuScationSigner.VerifyMessage(pubkeynew, spork.vchSig, strMessage, errorMessage) ||
199+
obfuScationSigner.VerifyMessage(pubkeyold, spork.vchSig, strMessage, errorMessage)) {
200+
return true;
201+
}
202+
}
203+
else if (obfuScationSigner.VerifyMessage(pubkeynew, spork.vchSig, strMessage, errorMessage)) {
186204
return true;
187205
}
188206

@@ -247,7 +265,7 @@ bool CSporkManager::SetPrivKey(std::string strPrivKey)
247265

248266
Sign(msg);
249267

250-
if (CheckSignature(msg)) {
268+
if (CheckSignature(msg, true)) {
251269
LogPrintf("CSporkManager::SetPrivKey - Successfully initialized as spork signer\n");
252270
return true;
253271
} else {
@@ -288,4 +306,3 @@ std::string CSporkManager::GetSporkNameByID(int id)
288306

289307
return "Unknown";
290308
}
291-

src/spork.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,9 @@ class CSporkManager
117117
int GetSporkIDByName(std::string strName);
118118
bool UpdateSpork(int nSporkID, int64_t nValue);
119119
bool SetPrivKey(std::string strPrivKey);
120-
bool CheckSignature(CSporkMessage& spork);
120+
bool CheckSignature(CSporkMessage& spork, bool fCheckSigner = false);
121121
bool Sign(CSporkMessage& spork);
122122
void Relay(CSporkMessage& msg);
123123
};
124124

125125
#endif
126-

0 commit comments

Comments
 (0)