diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index be3c5d4877..ac8ca4a21b 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -1191,7 +1191,7 @@ bool EvalScript(vector >& stack, const CScript& script, un CScriptID expectedP2SH(scriptDestination); if (locktx.vout[nlocktxOut].scriptPubKey != GetScriptForDestination(expectedP2SH)) - return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT); + return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPTDEST); vcontract.erase(vcontract.begin() + 4, vcontract.begin() + 20); // Remove the nonce from the contract before further processing assert(vcontract.size() == 24); @@ -1210,14 +1210,14 @@ bool EvalScript(vector >& stack, const CScript& script, un if (!newLockOutput.nValue.IsAmount()) return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_BLINDED_AMOUNTS); if (newLockOutput.IsNull() || newLockOutput.scriptPubKey != relockScript || newLockOutput.nValue.GetAmount() < lockValueRequired) - return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT); + return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_RELOCK_SCRIPTVAL); } const CTxOut withdrawOutput = checker.GetOutputOffsetFromCurrent(0); if (!withdrawOutput.nValue.IsAmount()) return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_BLINDED_AMOUNTS); if (withdrawOutput.nValue.GetAmount() < withdrawVal) - return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT); + return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_VAL); CScript expectedWithdrawScriptPubKey; if (vcontract[0] == 'P' && vcontract[1] == '2' && vcontract[2] == 'S' && vcontract[3] == 'H') @@ -1228,7 +1228,7 @@ bool EvalScript(vector >& stack, const CScript& script, un return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_FORMAT); if (withdrawOutput.scriptPubKey != expectedWithdrawScriptPubKey) - return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT); + return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPT); #ifndef BITCOIN_SCRIPT_NO_CALLRPC if (GetBoolArg("-validatepegin", false) && !checker.IsConfirmedBitcoinBlock(genesishash, merkleBlock.header.GetHash(), flags & SCRIPT_VERIFY_INCREASE_CONFIRMATIONS_REQUIRED)) diff --git a/src/script/script_error.cpp b/src/script/script_error.cpp index 7c9083b9d0..6485cb92b1 100644 --- a/src/script/script_error.cpp +++ b/src/script/script_error.cpp @@ -99,6 +99,14 @@ const char* ScriptErrorString(const ScriptError serror) return "Withdraw proof validation failed - lock block was not sufficiently confirmed on sending chain"; case SCRIPT_ERR_WITHDRAW_VERIFY_BLINDED_AMOUNTS: return "Withdraw proof validation failed - amounts in outputs were blinded"; + case SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPTDEST: + return "Withdraw proof validation failed - Bitcoin output script destination does not match federation script"; + case SCRIPT_ERR_WITHDRAW_VERIFY_RELOCK_SCRIPTVAL: + return "Withdraw proof validation failed - Relock scriptpubkey or value is invalid"; + case SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_VAL: + return "Withdraw proof validation failed - Withdraw output value invalid"; + case SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPT: + return "Withdraw proof validation failed - Sidechain pegin destination does not match expected"; case SCRIPT_ERR_UNKNOWN_ERROR: case SCRIPT_ERR_ERROR_COUNT: default: break; diff --git a/src/script/script_error.h b/src/script/script_error.h index 7c4a208eb9..f4be314622 100644 --- a/src/script/script_error.h +++ b/src/script/script_error.h @@ -69,6 +69,11 @@ typedef enum ScriptError_t SCRIPT_ERR_WITHDRAW_VERIFY_BLOCK, SCRIPT_ERR_WITHDRAW_VERIFY_LOCKTX, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT, + SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPTDEST, + SCRIPT_ERR_WITHDRAW_VERIFY_RELOCK_SCRIPTVAL, + SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_VAL, + SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPT, + SCRIPT_ERR_WITHDRAW_VERIFY_BLOCKCONFIRMED, SCRIPT_ERR_WITHDRAW_VERIFY_BLINDED_AMOUNTS,