diff --git a/src/wallet/feebumper.cpp b/src/wallet/feebumper.cpp index 73de23952..fe3871a91 100644 --- a/src/wallet/feebumper.cpp +++ b/src/wallet/feebumper.cpp @@ -42,7 +42,7 @@ int64_t CalculateMaximumSignedTxSize(const CTransaction &tx, const CWallet *pWal CFeeBumper::CFeeBumper(const CWallet *pWallet, const uint256 txidIn, int newConfirmTarget, bool specifiedConfirmTarget, CAmount totalFee, bool newTxReplaceable) : - txid(txidIn), + txid(std::move(txidIn)), nOldFee(0), nNewFee(0) { @@ -229,6 +229,11 @@ CFeeBumper::CFeeBumper(const CWallet *pWallet, const uint256 txidIn, int newConf currentResult = BumpFeeResult::OK; } +bool CFeeBumper::signTransaction(CWallet *pWallet) +{ + return pWallet->SignTransaction(mtx); +} + bool CFeeBumper::commit(CWallet *pWallet) { AssertLockHeld(pWallet->cs_wallet); diff --git a/src/wallet/feebumper.h b/src/wallet/feebumper.h index 42b0ccad3..1a3049989 100644 --- a/src/wallet/feebumper.h +++ b/src/wallet/feebumper.h @@ -28,9 +28,19 @@ public: const std::vector& getErrors() const { return vErrors; } CAmount getOldFee() const { return nOldFee; } CAmount getNewFee() const { return nNewFee; } - CMutableTransaction* getBumpedTxRef() { return &mtx; } uint256 getBumpedTxId() const { return bumpedTxid; } + /* signs the new transaction, + * returns false if the tx couldn't be found or if it was + * improssible to create the signature(s) + */ + bool signTransaction(CWallet *pWallet); + + /* commits the fee bump, + * returns true, in case of CWallet::CommitTransaction was successful + * but, eventually sets vErrors if the tx could not be added to the mempool (will try later) + * or if the old transaction could not be marked as replaced + */ bool commit(CWallet *pWalletNonConst); private: diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index f746c54f2..2cc3072c1 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2895,7 +2895,7 @@ UniValue bumpfee(const JSONRPCRequest& request) } // sign bumped transaction - if (!pwallet->SignTransaction(*feeBump.getBumpedTxRef())) { + if (!feeBump.signTransaction(pwallet)) { throw JSONRPCError(RPC_WALLET_ERROR, "Can't sign transaction."); } // commit the bumped transaction