summaryrefslogtreecommitdiff
path: root/patches/wownero/0005-coin-control.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/wownero/0005-coin-control.patch')
-rw-r--r--patches/wownero/0005-coin-control.patch225
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
+