Make claimpegin fail in the case of a double claim

Currently it will commit to the transaction without it being able to
enter the mempool. This makes the block creation code include the tx
into the block and create an invalid block.
This commit is contained in:
Steven Roose 2019-05-08 12:12:14 +01:00
parent af2264665e
commit 48a82fa993
No known key found for this signature in database
GPG key ID: 2F2A88D7F8D68E87

View file

@ -5317,6 +5317,15 @@ UniValue claimpegin(const JSONRPCRequest& request)
throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX decode failed");
}
// To check if it's not double spending an existing pegin UTXO, we check mempool acceptance.
CValidationState acceptState;
bool accepted = ::AcceptToMemoryPool(mempool, acceptState, MakeTransactionRef(mtx), nullptr /* pfMissingInputs */,
nullptr /* plTxnReplaced */, false /* bypass_limits */, maxTxFee, true /* test_accept */);
if (!accepted) {
std::string strError = strprintf("Error: The transaction was rejected! Reason given: %s", FormatStateMessage(acceptState));
throw JSONRPCError(RPC_WALLET_ERROR, strError);
}
// Send it
CValidationState state;
mapValue_t mapValue;