mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 22:45:52 +00:00
RPC: Add ability to specify a custom secret in proof_verify.
This commit is contained in:
@@ -495,7 +495,7 @@ Json::Value RPCParser::parseProofSolve(const Json::Value& jvParams)
|
|||||||
return jvRequest;
|
return jvRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
// proof_verify <token> <solution>
|
// proof_verify <token> <solution> [<difficulty>] [<secret>]
|
||||||
Json::Value RPCParser::parseProofVerify(const Json::Value& jvParams)
|
Json::Value RPCParser::parseProofVerify(const Json::Value& jvParams)
|
||||||
{
|
{
|
||||||
Json::Value jvRequest;
|
Json::Value jvRequest;
|
||||||
@@ -503,6 +503,12 @@ Json::Value RPCParser::parseProofVerify(const Json::Value& jvParams)
|
|||||||
jvRequest["token"] = jvParams[0u].asString();
|
jvRequest["token"] = jvParams[0u].asString();
|
||||||
jvRequest["solution"] = jvParams[1u].asString();
|
jvRequest["solution"] = jvParams[1u].asString();
|
||||||
|
|
||||||
|
if (jvParams.size() >= 3)
|
||||||
|
jvRequest["difficulty"] = jvParams[2u].asInt();
|
||||||
|
|
||||||
|
if (jvParams.size() >= 4)
|
||||||
|
jvRequest["secret"] = jvParams[3u].asString();
|
||||||
|
|
||||||
return jvRequest;
|
return jvRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -735,7 +741,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams)
|
|||||||
// { "profile", &RPCParser::parseProfile, 1, 9 },
|
// { "profile", &RPCParser::parseProfile, 1, 9 },
|
||||||
{ "proof_create", &RPCParser::parseProofCreate, 0, 2 },
|
{ "proof_create", &RPCParser::parseProofCreate, 0, 2 },
|
||||||
{ "proof_solve", &RPCParser::parseProofSolve, 1, 1 },
|
{ "proof_solve", &RPCParser::parseProofSolve, 1, 1 },
|
||||||
{ "proof_verify", &RPCParser::parseProofVerify, 2, 2 },
|
{ "proof_verify", &RPCParser::parseProofVerify, 2, 4 },
|
||||||
{ "random", &RPCParser::parseAsIs, 0, 0 },
|
{ "random", &RPCParser::parseAsIs, 0, 0 },
|
||||||
{ "ripple_path_find", &RPCParser::parseRipplePathFind, 1, 2 },
|
{ "ripple_path_find", &RPCParser::parseRipplePathFind, 1, 2 },
|
||||||
{ "sign", &RPCParser::parseSignSubmit, 2, 2 },
|
{ "sign", &RPCParser::parseSignSubmit, 2, 2 },
|
||||||
|
|||||||
@@ -948,10 +948,13 @@ Json::Value RPCHandler::doProofSolve(Json::Value jvRequest, int& cost, ScopedLoc
|
|||||||
// {
|
// {
|
||||||
// token: <token>
|
// token: <token>
|
||||||
// solution: <solution>
|
// solution: <solution>
|
||||||
|
// // if either of these parameters is set, a custom verifier is used
|
||||||
|
// difficulty: <number> // optional
|
||||||
|
// secret: <secret> // optional
|
||||||
// }
|
// }
|
||||||
Json::Value RPCHandler::doProofVerify(Json::Value jvRequest, int& cost, ScopedLock& MasterLockHolder)
|
Json::Value RPCHandler::doProofVerify(Json::Value jvRequest, int& cost, ScopedLock& MasterLockHolder)
|
||||||
{
|
{
|
||||||
// XXX Add ability to check proof against arbitrary secret & time
|
// XXX Add ability to check proof against arbitrary time
|
||||||
|
|
||||||
Json::Value jvResult;
|
Json::Value jvResult;
|
||||||
|
|
||||||
@@ -964,8 +967,39 @@ Json::Value RPCHandler::doProofVerify(Json::Value jvRequest, int& cost, ScopedLo
|
|||||||
std::string strToken = jvRequest["token"].asString();
|
std::string strToken = jvRequest["token"].asString();
|
||||||
uint256 uSolution(jvRequest["solution"].asString());
|
uint256 uSolution(jvRequest["solution"].asString());
|
||||||
|
|
||||||
// XXX Proof should not be marked as used from this
|
POWResult prResult;
|
||||||
POWResult prResult = theApp->getPowGen().checkProof(strToken, uSolution);
|
if (jvRequest.isMember("difficulty") || jvRequest.isMember("secret"))
|
||||||
|
{
|
||||||
|
ProofOfWorkGenerator pgGen;
|
||||||
|
|
||||||
|
if (jvRequest.isMember("difficulty"))
|
||||||
|
{
|
||||||
|
if (!jvRequest["difficulty"].isIntegral())
|
||||||
|
return rpcError(rpcINVALID_PARAMS);
|
||||||
|
|
||||||
|
int iDifficulty = jvRequest["difficulty"].asInt();
|
||||||
|
|
||||||
|
if (iDifficulty < 0 || iDifficulty > ProofOfWork::sMaxDifficulty)
|
||||||
|
return rpcError(rpcINVALID_PARAMS);
|
||||||
|
|
||||||
|
pgGen.setDifficulty(iDifficulty);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jvRequest.isMember("secret"))
|
||||||
|
{
|
||||||
|
uint256 uSecret(jvRequest["secret"].asString());
|
||||||
|
pgGen.setSecret(uSecret);
|
||||||
|
}
|
||||||
|
|
||||||
|
prResult = pgGen.checkProof(strToken, uSolution);
|
||||||
|
|
||||||
|
jvResult["secret"] = pgGen.getSecret().GetHex();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// XXX Proof should not be marked as used from this
|
||||||
|
prResult = theApp->getPowGen().checkProof(strToken, uSolution);
|
||||||
|
}
|
||||||
|
|
||||||
std::string sToken;
|
std::string sToken;
|
||||||
std::string sHuman;
|
std::string sHuman;
|
||||||
|
|||||||
Reference in New Issue
Block a user