diff --git a/src/rpc/rawtransaction_util.cpp b/src/rpc/rawtransaction_util.cpp index fc39a6d6a6..57ee8f83b6 100644 --- a/src/rpc/rawtransaction_util.cpp +++ b/src/rpc/rawtransaction_util.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include template @@ -531,7 +532,7 @@ void ParsePrevouts(const UniValue& prevTxsUnival, FillableSigningProvider* keyst } // ELEMENTS: check whether pegin inputs make sense against the current fedpegscript -bool ValidateTransactionPeginInputs(const CMutableTransaction& mtx, const CBlockIndex* active_chain_tip, std::map& input_errors) +bool ValidateTransactionPeginInputs(const CMutableTransaction& mtx, const CBlockIndex* active_chain_tip, std::map& input_errors) { const auto& fedpegscripts = GetValidFedpegScripts(active_chain_tip, Params().GetConsensus(), true /* nextblock_validation */); // Track an immature peg-in that's otherwise valid, give warning @@ -541,7 +542,7 @@ bool ValidateTransactionPeginInputs(const CMutableTransaction& mtx, const CBlock const CTxIn& txin = mtx.vin[i]; std::string err; if (txin.m_is_pegin && (mtx.witness.vtxinwit.size() <= i || !IsValidPeginWitness(mtx.witness.vtxinwit[i].m_pegin_witness, fedpegscripts, txin.prevout, err, false))) { - input_errors[i] = "Peg-in input has invalid proof."; + input_errors[i] = _("Peg-in input has invalid proof."); continue; } // Report warning about immature peg-in though @@ -559,23 +560,23 @@ void SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, int nHashType = ParseSighashString(hashType); // Script verification errors - std::map input_errors; + std::map input_errors; bool immature_pegin = ValidateTransactionPeginInputs(mtx, active_chain_tip, input_errors); bool complete = SignTransaction(mtx, keystore, coins, nHashType, Params().HashGenesisBlock(), input_errors); SignTransactionResultToJSON(mtx, complete, coins, input_errors, immature_pegin, result); } -void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map& coins, const std::map& input_errors, bool immature_pegin, UniValue& result) +void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map& coins, const std::map& input_errors, bool immature_pegin, UniValue& result) { // Make errors UniValue UniValue vErrors(UniValue::VARR); for (const auto& err_pair : input_errors) { - if (err_pair.second == "Missing amount") { + if (err_pair.second.original == "Missing amount") { // This particular error needs to be an exception for some reason throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing amount for %s", coins.at(mtx.vin.at(err_pair.first).prevout).out.ToString())); } - TxInErrorToJSON(mtx.vin.at(err_pair.first), mtx.witness.vtxinwit.at(err_pair.first), vErrors, err_pair.second); + TxInErrorToJSON(mtx.vin.at(err_pair.first), mtx.witness.vtxinwit.at(err_pair.first), vErrors, err_pair.second.original); } result.pushKV("hex", EncodeHexTx(CTransaction(mtx))); @@ -590,4 +591,3 @@ void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const result.pushKV("warning", "Possibly immature peg-in input(s) detected, signed anyways."); } } - diff --git a/src/rpc/rawtransaction_util.h b/src/rpc/rawtransaction_util.h index 274f508ae3..c8a15cc9c8 100644 --- a/src/rpc/rawtransaction_util.h +++ b/src/rpc/rawtransaction_util.h @@ -17,6 +17,7 @@ #include #include +struct bilingual_str; class FillableSigningProvider; class UniValue; struct CMutableTransaction; @@ -34,7 +35,7 @@ class SigningProvider; * @param result JSON object where signed transaction results accumulate */ void SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, const std::map& coins, const UniValue& hashType, UniValue& result, const CBlockIndex* active_chain_tip); -void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map& coins, const std::map& input_errors, bool immature_pegin, UniValue& result); +void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map& coins, const std::map& input_errors, bool immature_pegin, UniValue& result); /** * Parse a prevtxs UniValue array and get the map of coins from it @@ -55,6 +56,6 @@ void CreatePegInInput(CMutableTransaction& mtx, uint32_t input_idx, CTransaction void CreatePegInInput(CMutableTransaction& mtx, uint32_t input_idx, Sidechain::Bitcoin::CTransactionRef& tx_btc, Sidechain::Bitcoin::CMerkleBlock& merkle_block, const std::set& claim_scripts, const std::vector& txData, const std::vector& txOutProofData, const CBlockIndex* active_chain_tip); /** Check a peg-in input against the current fedpeg parameters */ -bool ValidateTransactionPeginInputs(const CMutableTransaction& mtx, const CBlockIndex* active_chain_tip, std::map& input_errors); +bool ValidateTransactionPeginInputs(const CMutableTransaction& mtx, const CBlockIndex* active_chain_tip, std::map& input_errors); #endif // BITCOIN_RPC_RAWTRANSACTION_UTIL_H diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 74603ab7fa..e0e6e96ed5 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -13,6 +13,7 @@ #include