return result;
}
-// ppcoin: send checkpoint
-Value sendcheckpoint(const Array& params, bool fHelp)
+// ppcoin: set checkpoint key
+Value setcheckpointkey(const Array& params, bool fHelp)
{
- if (fHelp || params.size() > 2 || params.size() < 1 )
+ if (fHelp || params.size() != 1)
throw runtime_error(
- "sendcheckpoint <privatekey> [checkpointhash]\n"
- "<privatekey> is hex string of checkpoint master private key\n"
- "<checkpointhash> is the hash of checkpoint block\n");
+ "setcheckpointkey <privatekey>\n"
+ "<privatekey> is hex string of checkpoint master private key\n");
CSyncCheckpoint checkpoint;
- CKey key;
-
- // TODO: omit checkpointhash parameter
- if (params.size() > 1)
- {
- checkpoint.hashCheckpoint = uint256(params[1].get_str());
- if (!mapBlockIndex.count(checkpoint.hashCheckpoint))
- throw runtime_error(
- "Provided checkpoint block is not on main chain\n");
- }
- else
- {
- checkpoint.hashCheckpoint = Checkpoints::AutoSelectSyncCheckpoint();
- if (checkpoint.hashCheckpoint == Checkpoints::hashSyncCheckpoint)
- throw runtime_error(
- "Unable to select a more recent sync-checkpoint");
- }
-
+ checkpoint.hashCheckpoint = hashGenesisBlock;
CDataStream sMsg(SER_NETWORK, PROTOCOL_VERSION);
sMsg << (CUnsignedSyncCheckpoint)checkpoint;
checkpoint.vchMsg = vector<unsigned char>(sMsg.begin(), sMsg.end());
vector<unsigned char> vchPrivKey = ParseHex(params[0].get_str());
+ CKey key;
key.SetPrivKey(CPrivKey(vchPrivKey.begin(), vchPrivKey.end())); // if key is not correct openssl may crash
if (!key.Sign(Hash(checkpoint.vchMsg.begin(), checkpoint.vchMsg.end()), checkpoint.vchSig))
throw runtime_error(
"Unable to sign checkpoint, check private key?\n");
- if(!checkpoint.ProcessSyncCheckpoint(NULL))
- throw runtime_error(
- "Failed to process checkpoint.\n");
- // Relay checkpoint
- {
- LOCK(cs_vNodes);
- BOOST_FOREACH(CNode* pnode, vNodes)
- checkpoint.RelayTo(pnode);
- }
+ CSyncCheckpoint::strMasterPrivKey = params[0].get_str();
- Object result;
- result.push_back(Pair("checkpoint", Checkpoints::hashSyncCheckpoint.ToString().c_str()));
- result.push_back(Pair("height", mapBlockIndex[Checkpoints::hashSyncCheckpoint]->nHeight));
- result.push_back(Pair("timestamp", DateTimeStrFormat("%x %H:%M:%S", mapBlockIndex[Checkpoints::hashSyncCheckpoint]->GetBlockTime()).c_str()));
- return result;
+ return "checkpoint master key has been set.";
}
{ "repairwallet", &repairwallet, false},
{ "makekeypair", &makekeypair, false},
{ "sendalert", &sendalert, false},
- { "sendcheckpoint", &sendcheckpoint, false},
+ { "setcheckpointkey", &setcheckpointkey, false},
};
CRPCTable::CRPCTable()