aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2018-06-04 20:24:09 -0400
committerMarcoFalke <falke.marco@gmail.com>2018-06-11 15:08:50 -0400
commitfa6e49731bb7d390c9ed66fc2d8ce3c4fa9b074f (patch)
tree7f7df585b0138b18132c9c052ad86b7ab6834bf5 /src/rpc
parent0de7cc848e07d942e09bb3bb60189985e53d2bb5 (diff)
rpc: Avoid "duplicate" return value for invalid submitblock
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/mining.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
index 203fac39e2..b2d857108e 100644
--- a/src/rpc/mining.cpp
+++ b/src/rpc/mining.cpp
@@ -725,7 +725,6 @@ static UniValue submitblock(const JSONRPCRequest& request)
}
uint256 hash = block.GetHash();
- bool fBlockPresent = false;
{
LOCK(cs_main);
const CBlockIndex* pindex = LookupBlockIndex(hash);
@@ -736,8 +735,6 @@ static UniValue submitblock(const JSONRPCRequest& request)
if (pindex->nStatus & BLOCK_FAILED_MASK) {
return "duplicate-invalid";
}
- // Otherwise, we might only have the header - process the block before returning
- fBlockPresent = true;
}
}
@@ -749,13 +746,15 @@ static UniValue submitblock(const JSONRPCRequest& request)
}
}
+ bool new_block;
submitblock_StateCatcher sc(block.GetHash());
RegisterValidationInterface(&sc);
- bool fAccepted = ProcessNewBlock(Params(), blockptr, true, nullptr);
+ bool accepted = ProcessNewBlock(Params(), blockptr, /* fForceProcessing */ true, /* fNewBlock */ &new_block);
UnregisterValidationInterface(&sc);
- if (fBlockPresent) {
- if (fAccepted && !sc.found) {
- return "duplicate-inconclusive";
+ if (!new_block) {
+ if (!accepted) {
+ // TODO Maybe pass down fNewBlock to AcceptBlockHeader, so it is properly set to true in this case?
+ return "invalid";
}
return "duplicate";
}