Browse Source

checkpoints + soft checkpoint update

miguelfreitas
Miguel Freitas 11 years ago
parent
commit
85fa3d4b9a
  1. 5
      src/checkpoints.cpp
  2. 24
      src/softcheckpoint.cpp

5
src/checkpoints.cpp

@ -44,11 +44,12 @@ namespace Checkpoints @@ -44,11 +44,12 @@ namespace Checkpoints
( 18050, uint256("0xef0d4c9e318a952dd45fcb1c867996df309a0fb586811479c08cf18a176a8864"))
( 18973, uint256("0x5f3f60fec53ac03434907ca980b5349875822794a4a0b50b78bcf0411d0c95fe"))
( 20200, uint256("0x31f84d32e843baa1fd73b0013466c206ad8a783aaaeab61219bcea2475e1d05d"))
( 20988, uint256("0x8e022eb85240176a82bac5e9ba5ad7bd05cb43f2073e08c462b1ba1ac012ba42"))
;
static const CCheckpointData data = {
&mapCheckpoints,
1389861305, // * UNIX timestamp of last checkpoint block
24805, // * total number of transactions between genesis and last checkpoint
1390337493, // * UNIX timestamp of last checkpoint block
36312, // * total number of transactions between genesis and last checkpoint
// (the tx=... number in the SetBestChain debug.log lines)
144.0 // * estimated number of transactions per day after checkpoint
};

24
src/softcheckpoint.cpp

@ -38,6 +38,10 @@ namespace SoftCheckpoints @@ -38,6 +38,10 @@ namespace SoftCheckpoints
boost::assign::list_of
("mf1")("mf1a")("mf2")("mf2a")("mf3");
static std::set<std::string> upcomingUsersList =
boost::assign::list_of
("_gltest2")("wn41")("quietpatron");
void SetSoftCPBestChain() {
// requires cs_main and cs_softCP locked (in this order)
@ -84,13 +88,13 @@ namespace SoftCheckpoints @@ -84,13 +88,13 @@ namespace SoftCheckpoints
if( (nBestHeight % SOFT_CHECKPOINT_PERIOD) == 0 &&
nBestHeight > Checkpoints::GetHighestCheckpoint() &&
nBestHeight > lastSoftCP.first + SOFT_CHECKPOINT_PERIOD &&
nBestHeight >= lastSoftCP.first + SOFT_CHECKPOINT_PERIOD &&
!fImporting && !fReindex) {
LOCK(pwalletMain->cs_wallet);
BOOST_FOREACH(const PAIRTYPE(CKeyID, CKeyMetadata)& item, pwalletMain->mapKeyMetadata)
{
const std::string &username = item.second.username;
if(uniqueUsersList.count(username)) {
if(uniqueUsersList.count(username) || upcomingUsersList.count(username)) {
int height = nBestHeight - SOFT_CHECKPOINT_PERIOD;
dbgprintf("SoftCheckpoints::NewBlockAccepted: user '%s' will vote for %d\n",
username.c_str(), height);
@ -123,6 +127,14 @@ namespace SoftCheckpoints @@ -123,6 +127,14 @@ namespace SoftCheckpoints
}
}
}
if( uncheckedCandidates.size() && nBestHeight > Checkpoints::GetHighestCheckpoint() ) {
// pending unchecked
dbgprintf("SoftCheckpoints::NewBlockAccepted process %zd pending unchecked (not implemented)\n",
uncheckedCandidates.size());
uncheckedCandidates.clear();
}
}
bool CastVerifiedVote(Checkpoint &cp, const std::string &username, const std::string &sign) {
@ -177,7 +189,7 @@ namespace SoftCheckpoints @@ -177,7 +189,7 @@ namespace SoftCheckpoints
return false;
}
if( !uniqueUsersList.count(username) ) {
if( !uniqueUsersList.count(username) && !upcomingUsersList.count(username) ) {
dbgprintf("SoftCheckpoints::CastVoteSoftCheckpoint: username '%s' not accepted\n", username.c_str());
return false;
}
@ -196,7 +208,8 @@ namespace SoftCheckpoints @@ -196,7 +208,8 @@ namespace SoftCheckpoints
return false;
}
dbgprintf("SoftCheckpoints::CastVoteSoftCheckpoint: signature by '%s' verified, casting vote\n", username.c_str());
dbgprintf("SoftCheckpoints::CastVoteSoftCheckpoint: signature by '%s' verified for %d, casting vote\n",
username.c_str(), height);
return CastVerifiedVote( cp, username, sign );
}
@ -213,7 +226,8 @@ namespace SoftCheckpoints @@ -213,7 +226,8 @@ namespace SoftCheckpoints
void RelayCP(const CSoftCheckpoint& cp, CNode* pfrom) {
LOCK(cs_vNodes);
dbgprintf("SoftCheckpoints::RelayCP: relaying softCP height %d\n", cp.nHeight);
dbgprintf("SoftCheckpoints::RelayCP: relaying softCP height %d from %s\n",
cp.nHeight, !pfrom ? "localhost" : pfrom->addr.ToString().c_str());
BOOST_FOREACH(CNode* pnode, vNodes) {
if(pnode == pfrom)
continue;

Loading…
Cancel
Save