Skip to content

Commit 92993aa

Browse files
committed
Change SignTransaction's input_errors to use bilingual_str
1 parent 171366e commit 92993aa

File tree

12 files changed

+29
-24
lines changed

12 files changed

+29
-24
lines changed

src/rpc/rawtransaction_util.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <univalue.h>
1919
#include <util/rbf.h>
2020
#include <util/strencodings.h>
21+
#include <util/translation.h>
2122

2223
CMutableTransaction ConstructTransaction(const UniValue& inputs_in, const UniValue& outputs_in, const UniValue& locktime, bool rbf)
2324
{
@@ -280,22 +281,22 @@ void SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore,
280281
int nHashType = ParseSighashString(hashType);
281282

282283
// Script verification errors
283-
std::map<int, std::string> input_errors;
284+
std::map<int, bilingual_str> input_errors;
284285

285286
bool complete = SignTransaction(mtx, keystore, coins, nHashType, input_errors);
286287
SignTransactionResultToJSON(mtx, complete, coins, input_errors, result);
287288
}
288289

289-
void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map<COutPoint, Coin>& coins, const std::map<int, std::string>& input_errors, UniValue& result)
290+
void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map<COutPoint, Coin>& coins, const std::map<int, bilingual_str>& input_errors, UniValue& result)
290291
{
291292
// Make errors UniValue
292293
UniValue vErrors(UniValue::VARR);
293294
for (const auto& err_pair : input_errors) {
294-
if (err_pair.second == "Missing amount") {
295+
if (err_pair.second.original == "Missing amount") {
295296
// This particular error needs to be an exception for some reason
296297
throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing amount for %s", coins.at(mtx.vin.at(err_pair.first).prevout).out.ToString()));
297298
}
298-
TxInErrorToJSON(mtx.vin.at(err_pair.first), vErrors, err_pair.second);
299+
TxInErrorToJSON(mtx.vin.at(err_pair.first), vErrors, err_pair.second.original);
299300
}
300301

301302
result.pushKV("hex", EncodeHexTx(CTransaction(mtx)));

src/rpc/rawtransaction_util.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <map>
99
#include <string>
1010

11+
struct bilingual_str;
1112
class FillableSigningProvider;
1213
class UniValue;
1314
struct CMutableTransaction;
@@ -25,7 +26,7 @@ class SigningProvider;
2526
* @param result JSON object where signed transaction results accumulate
2627
*/
2728
void SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, const std::map<COutPoint, Coin>& coins, const UniValue& hashType, UniValue& result);
28-
void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map<COutPoint, Coin>& coins, const std::map<int, std::string>& input_errors, UniValue& result);
29+
void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map<COutPoint, Coin>& coins, const std::map<int, bilingual_str>& input_errors, UniValue& result);
2930

3031
/**
3132
* Parse a prevtxs UniValue array and get the map of coins from it

src/script/sign.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <script/signingprovider.h>
1212
#include <script/standard.h>
1313
#include <uint256.h>
14+
#include <util/translation.h>
1415
#include <util/vector.h>
1516

1617
typedef std::vector<unsigned char> valtype;
@@ -626,7 +627,7 @@ bool IsSegWitOutput(const SigningProvider& provider, const CScript& script)
626627
return false;
627628
}
628629

629-
bool SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, const std::map<COutPoint, Coin>& coins, int nHashType, std::map<int, std::string>& input_errors)
630+
bool SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, const std::map<COutPoint, Coin>& coins, int nHashType, std::map<int, bilingual_str>& input_errors)
630631
{
631632
bool fHashSingle = ((nHashType & ~SIGHASH_ANYONECANPAY) == SIGHASH_SINGLE);
632633

@@ -658,7 +659,7 @@ bool SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore,
658659
CTxIn& txin = mtx.vin[i];
659660
auto coin = coins.find(txin.prevout);
660661
if (coin == coins.end() || coin->second.IsSpent()) {
661-
input_errors[i] = "Input not found or already spent";
662+
input_errors[i] = _("Input not found or already spent");
662663
continue;
663664
}
664665
const CScript& prevPubKey = coin->second.out.scriptPubKey;
@@ -674,20 +675,20 @@ bool SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore,
674675

675676
// amount must be specified for valid segwit signature
676677
if (amount == MAX_MONEY && !txin.scriptWitness.IsNull()) {
677-
input_errors[i] = "Missing amount";
678+
input_errors[i] = _("Missing amount");
678679
continue;
679680
}
680681

681682
ScriptError serror = SCRIPT_ERR_OK;
682683
if (!VerifyScript(txin.scriptSig, prevPubKey, &txin.scriptWitness, STANDARD_SCRIPT_VERIFY_FLAGS, TransactionSignatureChecker(&txConst, i, amount, txdata, MissingDataBehavior::FAIL), &serror)) {
683684
if (serror == SCRIPT_ERR_INVALID_STACK_OPERATION) {
684685
// Unable to sign input and verification failed (possible attempt to partially sign).
685-
input_errors[i] = "Unable to sign input, invalid stack size (possibly missing key)";
686+
input_errors[i] = Untranslated("Unable to sign input, invalid stack size (possibly missing key)");
686687
} else if (serror == SCRIPT_ERR_SIG_NULLFAIL) {
687688
// Verification failed (possibly due to insufficient signatures).
688-
input_errors[i] = "CHECK(MULTI)SIG failing with non-zero signature (possibly need more signatures)";
689+
input_errors[i] = Untranslated("CHECK(MULTI)SIG failing with non-zero signature (possibly need more signatures)");
689690
} else {
690-
input_errors[i] = ScriptErrorString(serror);
691+
input_errors[i] = Untranslated(ScriptErrorString(serror));
691692
}
692693
} else {
693694
// If this input succeeds, make sure there is no error set for it

src/script/sign.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class CScript;
2121
class CTransaction;
2222
class SigningProvider;
2323

24+
struct bilingual_str;
2425
struct CMutableTransaction;
2526

2627
/** Interface for signature creators. */
@@ -178,6 +179,6 @@ bool IsSolvable(const SigningProvider& provider, const CScript& script);
178179
bool IsSegWitOutput(const SigningProvider& provider, const CScript& script);
179180

180181
/** Sign the CMutableTransaction */
181-
bool SignTransaction(CMutableTransaction& mtx, const SigningProvider* provider, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors);
182+
bool SignTransaction(CMutableTransaction& mtx, const SigningProvider* provider, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors);
182183

183184
#endif // BITCOIN_SCRIPT_SIGN_H

src/test/fuzz/script_sign.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <test/fuzz/FuzzedDataProvider.h>
1414
#include <test/fuzz/fuzz.h>
1515
#include <test/fuzz/util.h>
16+
#include <util/translation.h>
1617

1718
#include <cassert>
1819
#include <cstdint>
@@ -135,7 +136,7 @@ FUZZ_TARGET_INIT(script_sign, initialize_script_sign)
135136
}
136137
coins[*outpoint] = *coin;
137138
}
138-
std::map<int, std::string> input_errors;
139+
std::map<int, bilingual_str> input_errors;
139140
(void)SignTransaction(sign_transaction_tx_to, &provider, coins, fuzzed_data_provider.ConsumeIntegral<int>(), input_errors);
140141
}
141142
}

src/test/util/setup_common.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ CMutableTransaction TestChain100Setup::CreateValidMempoolTransaction(CTransactio
294294
input_coins.insert({outpoint_to_spend, utxo_to_spend});
295295
// - Default signature hashing type
296296
int nHashType = SIGHASH_ALL;
297-
std::map<int, std::string> input_errors;
297+
std::map<int, bilingual_str> input_errors;
298298
assert(SignTransaction(mempool_txn, &keystore, input_coins, nHashType, input_errors));
299299

300300
// If submit=true, add transaction to the mempool.

src/wallet/rpcwallet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3389,7 +3389,7 @@ RPCHelpMan signrawtransactionwithwallet()
33893389
int nHashType = ParseSighashString(request.params[2]);
33903390

33913391
// Script verification errors
3392-
std::map<int, std::string> input_errors;
3392+
std::map<int, bilingual_str> input_errors;
33933393

33943394
bool complete = pwallet->SignTransaction(mtx, coins, nHashType, input_errors);
33953395
UniValue result(UniValue::VOBJ);

src/wallet/scriptpubkeyman.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ bool LegacyScriptPubKeyMan::CanProvide(const CScript& script, SignatureData& sig
592592
}
593593
}
594594

595-
bool LegacyScriptPubKeyMan::SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const
595+
bool LegacyScriptPubKeyMan::SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors) const
596596
{
597597
return ::SignTransaction(tx, this, coins, sighash, input_errors);
598598
}
@@ -2046,7 +2046,7 @@ bool DescriptorScriptPubKeyMan::CanProvide(const CScript& script, SignatureData&
20462046
return IsMine(script);
20472047
}
20482048

2049-
bool DescriptorScriptPubKeyMan::SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const
2049+
bool DescriptorScriptPubKeyMan::SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors) const
20502050
{
20512051
std::unique_ptr<FlatSigningProvider> keys = std::make_unique<FlatSigningProvider>();
20522052
for (const auto& coin_pair : coins) {

src/wallet/scriptpubkeyman.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ class ScriptPubKeyMan
230230
virtual bool CanProvide(const CScript& script, SignatureData& sigdata) { return false; }
231231

232232
/** Creates new signatures and adds them to the transaction. Returns whether all inputs were signed */
233-
virtual bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const { return false; }
233+
virtual bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors) const { return false; }
234234
/** Sign a message with the given script */
235235
virtual SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const { return SigningResult::SIGNING_FAILED; };
236236
/** Adds script and derivation path information to a PSBT, and optionally signs it. */
@@ -396,7 +396,7 @@ class LegacyScriptPubKeyMan : public ScriptPubKeyMan, public FillableSigningProv
396396

397397
bool CanProvide(const CScript& script, SignatureData& sigdata) override;
398398

399-
bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const override;
399+
bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors) const override;
400400
SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const override;
401401
TransactionError FillPSBT(PartiallySignedTransaction& psbt, const PrecomputedTransactionData& txdata, int sighash_type = 1 /* SIGHASH_ALL */, bool sign = true, bool bip32derivs = false, int* n_signed = nullptr) const override;
402402

@@ -601,7 +601,7 @@ class DescriptorScriptPubKeyMan : public ScriptPubKeyMan
601601

602602
bool CanProvide(const CScript& script, SignatureData& sigdata) override;
603603

604-
bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, std::string>& input_errors) const override;
604+
bool SignTransaction(CMutableTransaction& tx, const std::map<COutPoint, Coin>& coins, int sighash, std::map<int, bilingual_str>& input_errors) const override;
605605
SigningResult SignMessage(const std::string& message, const PKHash& pkhash, std::string& str_sig) const override;
606606
TransactionError FillPSBT(PartiallySignedTransaction& psbt, const PrecomputedTransactionData& txdata, int sighash_type = 1 /* SIGHASH_ALL */, bool sign = true, bool bip32derivs = false, int* n_signed = nullptr) const override;
607607

src/wallet/test/wallet_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ static CMutableTransaction TestSimpleSpend(const CTransaction& from, uint32_t in
6868
keystore.AddKey(key);
6969
std::map<COutPoint, Coin> coins;
7070
coins[mtx.vin[0].prevout].out = from.vout[index];
71-
std::map<int, std::string> input_errors;
71+
std::map<int, bilingual_str> input_errors;
7272
BOOST_CHECK(SignTransaction(mtx, &keystore, coins, SIGHASH_ALL, input_errors));
7373
return mtx;
7474
}

0 commit comments

Comments
 (0)