diff options
Diffstat (limited to 'patches/wownero/0005-coin-control.patch')
| -rw-r--r-- | patches/wownero/0005-coin-control.patch | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/patches/wownero/0005-coin-control.patch b/patches/wownero/0005-coin-control.patch new file mode 100644 index 0000000..6dcff9f --- /dev/null +++ b/patches/wownero/0005-coin-control.patch @@ -0,0 +1,225 @@ +From 9f9937ef8f4822c498e10e5bbfc57dfdfb7137f7 Mon Sep 17 00:00:00 2001 +From: Czarek Nakamoto <cyjan@mrcyjanek.net> +Date: Wed, 27 Mar 2024 16:31:36 +0100 +Subject: [PATCH 5/9] coin control + +--- + src/wallet/api/coins.cpp | 62 ++++++++++++++++++++++++++++++++++++ + src/wallet/api/coins.h | 4 +++ + src/wallet/api/wallet.cpp | 4 +-- + src/wallet/api/wallet2_api.h | 3 ++ + src/wallet/wallet2.cpp | 22 +++++++++++++ + src/wallet/wallet2.h | 4 +++ + 6 files changed, 97 insertions(+), 2 deletions(-) + +diff --git a/src/wallet/api/coins.cpp b/src/wallet/api/coins.cpp +index fe54b82cf..5ce69b5b9 100644 +--- a/src/wallet/api/coins.cpp ++++ b/src/wallet/api/coins.cpp +@@ -90,6 +90,26 @@ namespace Monero { + } + } + ++ void CoinsImpl::setFrozen(std::string public_key) ++ { ++ crypto::public_key pk; ++ if (!epee::string_tools::hex_to_pod(public_key, pk)) ++ { ++ LOG_ERROR("Invalid public key: " << public_key); ++ return; ++ } ++ ++ try ++ { ++ m_wallet->m_wallet->freeze(pk); ++ refresh(); ++ } ++ catch (const std::exception& e) ++ { ++ LOG_ERROR("setFrozen: " << e.what()); ++ } ++ } ++ + void CoinsImpl::setFrozen(int index) + { + try +@@ -103,6 +123,26 @@ namespace Monero { + } + } + ++ void CoinsImpl::thaw(std::string public_key) ++ { ++ crypto::public_key pk; ++ if (!epee::string_tools::hex_to_pod(public_key, pk)) ++ { ++ LOG_ERROR("Invalid public key: " << public_key); ++ return; ++ } ++ ++ try ++ { ++ m_wallet->m_wallet->thaw(pk); ++ refresh(); ++ } ++ catch (const std::exception& e) ++ { ++ LOG_ERROR("thaw: " << e.what()); ++ } ++ } ++ + void CoinsImpl::thaw(int index) + { + try +@@ -120,4 +160,26 @@ namespace Monero { + return m_wallet->m_wallet->is_transfer_unlocked(unlockTime, blockHeight); + } + ++ void CoinsImpl::setDescription(const std::string &public_key, const std::string &description) ++ { ++ crypto::public_key pk; ++ if (!epee::string_tools::hex_to_pod(public_key, pk)) ++ { ++ LOG_ERROR("Invalid public key: " << public_key); ++ return; ++ } ++ ++ try ++ { ++ const size_t index = m_wallet->m_wallet->get_transfer_details(pk); ++ const tools::wallet2::transfer_details &td = m_wallet->m_wallet->get_transfer_details(index); ++ m_wallet->m_wallet->set_tx_note(td.m_txid, description); ++ refresh(); ++ } ++ catch (const std::exception& e) ++ { ++ LOG_ERROR("setDescription: " << e.what()); ++ } ++ } ++ + } // namespace +diff --git a/src/wallet/api/coins.h b/src/wallet/api/coins.h +index 3293d8ae9..bcd8b517f 100644 +--- a/src/wallet/api/coins.h ++++ b/src/wallet/api/coins.h +@@ -18,11 +18,15 @@ namespace Monero { + std::vector<CoinsInfo*> getAll() const override; + void refresh() override; + ++ void setFrozen(std::string public_key) override; + void setFrozen(int index) override; ++ void thaw(std::string public_key) override; + void thaw(int index) override; + + bool isTransferUnlocked(uint64_t unlockTime, uint64_t blockHeight) override; + ++ void setDescription(const std::string &public_key, const std::string &description) override; ++ + private: + WalletImpl *m_wallet; + std::vector<CoinsInfo*> m_rows; +diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp +index 1c9a709d4..b935723f7 100644 +--- a/src/wallet/api/wallet.cpp ++++ b/src/wallet/api/wallet.cpp +@@ -2018,11 +2018,11 @@ PendingTransaction *WalletImpl::createTransactionMultDest(const std::vector<stri + if (amount) { + transaction->m_pending_tx = m_wallet->create_transactions_2(dsts, fake_outs_count, 0 /* unlock_time */, + adjusted_priority, +- extra, subaddr_account, subaddr_indices); ++ extra, subaddr_account, subaddr_indices, {}, preferred_input_list); + } else { + transaction->m_pending_tx = m_wallet->create_transactions_all(0, info.address, info.is_subaddress, 1, fake_outs_count, 0 /* unlock_time */, + adjusted_priority, +- extra, subaddr_account, subaddr_indices); ++ extra, subaddr_account, subaddr_indices, preferred_input_list); + } + pendingTxPostProcess(transaction); + +diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h +index 39b942ef4..678f9b6b9 100644 +--- a/src/wallet/api/wallet2_api.h ++++ b/src/wallet/api/wallet2_api.h +@@ -352,9 +352,12 @@ struct Coins + virtual CoinsInfo * coin(int index) const = 0; + virtual std::vector<CoinsInfo*> getAll() const = 0; + virtual void refresh() = 0; ++ virtual void setFrozen(std::string public_key) = 0; + virtual void setFrozen(int index) = 0; + virtual void thaw(int index) = 0; ++ virtual void thaw(std::string public_key) = 0; + virtual bool isTransferUnlocked(uint64_t unlockTime, uint64_t blockHeight) = 0; ++ virtual void setDescription(const std::string &public_key, const std::string &description) = 0; + }; + + struct SubaddressRow { +diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp +index f996863ff..c53b1de67 100644 +--- a/src/wallet/wallet2.cpp ++++ b/src/wallet/wallet2.cpp +@@ -2094,11 +2094,21 @@ bool wallet2::frozen(const multisig_tx_set& txs) const + return false; + } + //---------------------------------------------------------------------------------------------------- ++void wallet2::freeze(const crypto::public_key &pk) ++{ ++ freeze(get_transfer_details(pk)); ++} ++//---------------------------------------------------------------------------------------------------- + void wallet2::freeze(const crypto::key_image &ki) + { + freeze(get_transfer_details(ki)); + } + //---------------------------------------------------------------------------------------------------- ++void wallet2::thaw(const crypto::public_key &pk) ++{ ++ thaw(get_transfer_details(pk)); ++} ++//---------------------------------------------------------------------------------------------------- + void wallet2::thaw(const crypto::key_image &ki) + { + thaw(get_transfer_details(ki)); +@@ -2109,6 +2119,18 @@ bool wallet2::frozen(const crypto::key_image &ki) const + return frozen(get_transfer_details(ki)); + } + //---------------------------------------------------------------------------------------------------- ++size_t wallet2::get_transfer_details(const crypto::public_key &pk) const ++{ ++ for (size_t idx = 0; idx < m_transfers.size(); ++idx) ++ { ++ const transfer_details &td = m_transfers[idx]; ++ if (td.get_public_key() == pk) { ++ return idx; ++ } ++ } ++ CHECK_AND_ASSERT_THROW_MES(false, "Public key not found"); ++} ++//---------------------------------------------------------------------------------------------------- + size_t wallet2::get_transfer_details(const crypto::key_image &ki) const + { + for (size_t idx = 0; idx < m_transfers.size(); ++idx) +diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h +index 51dbb5b89..5e27e46cf 100644 +--- a/src/wallet/wallet2.h ++++ b/src/wallet/wallet2.h +@@ -1563,6 +1563,8 @@ private: + uint64_t get_num_rct_outputs(); + size_t get_num_transfer_details() const { return m_transfers.size(); } + const transfer_details &get_transfer_details(size_t idx) const; ++ size_t get_transfer_details(const crypto::public_key &pk) const; ++ + + uint8_t get_current_hard_fork(); + void get_hard_fork_info(uint8_t version, uint64_t &earliest_height); +@@ -1793,7 +1795,9 @@ private: + void freeze(size_t idx); + void thaw(size_t idx); + bool frozen(size_t idx) const; ++ void freeze(const crypto::public_key &pk); + void freeze(const crypto::key_image &ki); ++ void thaw(const crypto::public_key &pk); + void thaw(const crypto::key_image &ki); + bool frozen(const crypto::key_image &ki) const; + bool frozen(const transfer_details &td) const; +-- +2.44.0 + |
