diff --git a/src/validation.cpp b/src/validation.cpp index 2f51ccaf59..acd85346f6 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2357,7 +2357,7 @@ CScript calculate_contract(const CScript& federationRedeemScript, const CScript& return scriptDestination; } -bool IsValidPeginWitness(const CScriptWitness& pegin_witness, const COutPoint& prevout) { +bool IsValidPeginWitness(const CScriptWitness& pegin_witness, const COutPoint& prevout, bool check_depth) { // Format on stack is as follows: // 1) value - the value of the pegin output @@ -2473,8 +2473,7 @@ bool IsValidPeginWitness(const CScriptWitness& pegin_witness, const COutPoint& p } // Finally, validate peg-in via rpc call - if (GetBoolArg("-validatepegin", DEFAULT_VALIDATE_PEGIN)) { - // TODO-PEGIN return useful error message + if (check_depth && GetBoolArg("-validatepegin", DEFAULT_VALIDATE_PEGIN)) { return IsConfirmedBitcoinBlock(merkle_block.header.GetHash(), GetArg("-peginconfirmationdepth", DEFAULT_PEGIN_CONFIRMATION_DEPTH)); } return true; diff --git a/src/validation.h b/src/validation.h index 6695ee53b6..0a1542ccc3 100644 --- a/src/validation.h +++ b/src/validation.h @@ -263,7 +263,7 @@ void ThreadScriptCheck(); /** Check if bitcoind connection via RPC is correctly working*/ bool BitcoindRPCCheck(bool init); /** Checks pegin witness for validity */ -bool IsValidPeginWitness(const CScriptWitness& pegin_witness, const COutPoint& prevout); +bool IsValidPeginWitness(const CScriptWitness& pegin_witness, const COutPoint& prevout, bool check_depth = true); /** Extracts an output from pegin witness for evaluation as a normal output */ CTxOut GetPeginOutputFromWitness(const CScriptWitness& pegin_witness); /** Check whether we are doing an initial block download (synchronizing from disk or network) */ diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index aa0f7218b6..81f942f967 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -3662,9 +3662,7 @@ UniValue createrawpegin(const JSONRPCRequest& request) // Peg-in witness isn't valid, even though the block header is(without depth check) // We re-check depth before returning with more descriptive result - if (GetBoolArg("-validatepegin", DEFAULT_VALIDATE_PEGIN) && - !IsConfirmedBitcoinBlock(merkleBlock.header.GetHash(), 0) && - !IsValidPeginWitness(pegin_witness, mtx.vin[0].prevout)) { + if (!IsValidPeginWitness(pegin_witness, mtx.vin[0].prevout, false)) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Constructed peg-in witness is invalid."); }