Commit Graph
1461 Commits
Author SHA1 Message Date
tobtohtandjwinterm 36bbd1a2c7 wallet2: throw if reserve proof can't be parsed
(cherry picked from commit f855ffe87ddc593b286ad02f84b24b804872773a)
2026-05-06 10:52:36 -04:00
selstaandjwinterm 0bf3b9f441 wallet2: ensure daemon returns correct tx for spend proof
(cherry picked from commit 04eeb3ba1fc2ed0239eb10e885136d86b7e98ad0)
2026-05-06 10:52:36 -04:00
selstaandjwinterm 21b51550e5 wallet2: remove deprecated txs_as_hex
also add missing underflow check

(cherry picked from commit 54abe12f94abe5c0ca2e8ae63e3fea2d8cd41c9a)
2026-05-05 18:20:53 -04:00
j-bermanandjwinterm da44d4ea4c cryptonote_basic: pruned hash return bool
(cherry picked from commit 874c771975257c82e275c17af72899b301a63d5f)
2026-05-05 18:20:53 -04:00
selstaandjwinterm af6a55c941 wallet2: add parse multisig tx sanity checks
(cherry picked from commit 2094d38c86bab8ab23bb5ddfb5cd7ce3a7957a63)
2026-05-05 18:20:53 -04:00
Lee *!* Clagettandjwinterm c7227454e8 Add Socks v5 support to daemon and wallet
(cherry picked from commit 23e29a5074)
(cherry picked from commit ce5437f0677966c15d2946bc7c068975aa6bfd83)
2026-05-05 18:20:53 -04:00
woodserandjwinterm 4cbc74bed0 multisig: add flag to skip refresh after multisig import
(cherry picked from commit 7b1e9ca29801d1e380291371e40c8c37ac43d18d)
2026-05-05 18:20:53 -04:00
selstaandjwinterm 33b967d231 wallet2: fix background wallet detection in verify_password()
(cherry picked from commit e7b121ac17d6e0c3bb6f17911ae9ab18132b3c67)
2026-05-05 18:20:52 -04:00
j-bermanandjwinterm 0d9df28884 wallet2: fix edge case where tx's ki's remain marked unspent
If a tx is marked as failed (because it never shows up in the
daemon's pool), its key images get reset back to unspent so they
can be used in future txs.

If the tx re-enters the daemon's pool (e.g. it's removed from the
pool and then relayed back), then the wallet incorrectly maintains
that the tx's key images are unspent.

This change ensures the wallet re-marks the tx's key images as
spent if the tx re-appears in the node's pool.

(cherry picked from commit c147e2dfe2cecb241735e5e625b4cc31009a2b6e)
2026-05-05 18:19:53 -04:00
j-bermanandjwinterm 0ea75b1e3e wallet: identify spends in pool when scanning
- Make sure to mark identified spends in the pool as spends. The
wallet might not know these have been spent if it wasn't the wallet
that relayed the tx to the daemon, or the wallet was cleared via
rescan_bc.
- Make sure to add spends to m_unconfirmed_txs if not present.
- Make sure to process the entire pool again if refreshing for
the first time. The wallet fetches pool and blocks at the same
time. The wallet scans blocks first, then pool. If the wallet
identifies received outputs in the chain, then it may have spent
those received outputs in the pool. So we make sure to re-process
the entire pool again after scanning the chain for the first time.
- Multisig wallets that know about spent key images can now detect
spend txs in the pool. Update tests for that.

(cherry picked from commit 9239d36691bfe94dda12cc925903fed5e761fbe3)
2026-05-05 18:19:53 -04:00
j-bermanandwowario cfd2a69624 wallet2: warn instead of throw when RingDB doesn't include spend
A reorg can end up causing an output's position in the chain to
move. Since the wallet doesn't update the RingDB on reorg, it
may refer to the output's stale position in the chain.

This seems a reasonable solution rather than introducing complex
logic to update the stale ring member's value on rerog, since
RingDB can be deprecated with FCMP++.
2025-10-10 08:49:03 +03:00
wowario 9f429cfc89 wownero skin pack 2025-09-19 21:01:45 +03:00
wowario de22caa968 cleanup old bp 2025-09-19 21:01:43 +03:00
wowario 30dba37f1f bump unlock time to 288 blks 2025-09-19 21:01:40 +03:00
wowario 076254eb38 config wallet2 settings 2025-09-19 21:01:40 +03:00
wowario 220c474ac1 fix mismatched daemon check bug 2025-09-19 21:01:38 +03:00
wowario e38bf823fd adjust approx_blockchain_height 2025-09-19 21:01:37 +03:00
wowario f3631823a8 bump ring size to 22 2025-09-19 21:01:36 +03:00
jeffro256andj-berman 8f98dac4f0 wallet: deprecate wallet2::find_and_save_rings()
Rings for outgoing transactions are stored within the scanning code since the last hardfork,
so this code is largely unneccessary now.

Co-authored-by: j-berman <justinberman@protonmail.com>
2025-07-29 12:32:20 -05:00
jeffro256andnahuhh 1da19dac54 wallet: refactor subaddress expansion & add to transfer test 2025-07-07 22:21:46 +00:00
Justin Bermanandnahuhh e23d51bc16 wallet: improve lookahead logic & make rpc persistent 2025-07-07 22:21:43 +00:00
benevanoffandnahuhh 8f5a7b0f1a wallet: ensure subaddress keys table is at least size of requested lookahead 2025-07-03 16:10:29 +00:00
SNeedlewoods 5550c0a876 fix: multisig stale data after failed refresh 2025-04-24 12:42:39 +02:00
tzadiko ba2dadb0d4 Correct Max / Min Block Waiting Periods 2025-03-25 18:55:04 -05:00
tobtoht 5b045d70e0 Merge pull request #8617
e44e8b164 wallet: background sync with just the view key (j-berman)
2025-02-13 17:43:24 +00:00
luigi1111 3e07750ea3 Merge pull request #9602
34c7d31 wallet: shortchain history should include base block (0xFFFC0000)
2025-01-06 12:23:28 -05:00
luigi1111 ee345b9695 Merge pull request #9590
cd1c060 Daemon-specific proxy for the wallet-rpc. 1. Daemon-specific proxy is exclusive with global proxy (--proxy). 2. If you set global proxy (--proxy) you cannot set daemon-specific proxy. 3. If you don't set global proxy, you can set proxy (or not set) proxy for each daemon connection with the proxy field in jsonrpc to the wallet-rpc. (0xFFFC0000)
2024-12-23 11:01:38 -05:00
luigi1111 1ed12f9b00 Merge pull request #9506
a928cbc wallet2: fix error throw if unable to load cache (tobtoht)
2024-12-23 10:40:43 -05:00
0xFFFC0000 34c7d31efb wallet: shortchain history should include base block 2024-12-04 16:15:20 +00:00
0xFFFC0000andwoodser cd1c06038c Daemon-specific proxy for the wallet-rpc.
1. Daemon-specific proxy is exclusive with global proxy (--proxy).
2. If you set global proxy (--proxy) you cannot set daemon-specific proxy.
3. If you don't set global proxy, you can set proxy (or not set) proxy for
each daemon connection with the proxy field in jsonrpc to the wallet-rpc.
2024-11-23 14:11:25 -05:00
tobtoht a928cbc20f wallet2: fix error throw if unable to load cache 2024-10-07 00:38:40 +02:00
jeffro256 65568d3a88 build: fix build with Boost 1.85 and remove instances of viewkey logging [RELEASE]
1. Use std::is_standard_layout and std::is_trivially_copyable instead of std::is_pod for KV byte-wise serialization, which fixes compile issue for Boost UUIDs
2. Removed reimplementation of std::hash for boost::uuids::uuid
3. Removed << operator overload for crypto::secret_key
4. Removed instances in code where private view key was dumped to the log in plaintext

Release version of #9450, containing C++14 modified assertions
2024-09-10 16:07:36 -05:00
Lee Clagett 1f733fb868 Make wallet2::estimate_fee static 2024-08-07 17:43:03 -04:00
jeffro256 8c254e42e3 wallet: fetch pool txs in pruned form [RELEASE] 2024-06-21 08:15:26 -05:00
j-berman e44e8b1640 wallet: background sync with just the view key
- When background syncing, the wallet wipes the spend key
from memory and processes all new transactions. The wallet saves
all receives, spends, and "plausible" spends of receives the
wallet does not know key images for.
- When background sync disabled, the wallet processes all
background synced txs and then clears the background sync cache.
- Adding "plausible" spends to the background sync cache ensures
that the wallet does not need to query the daemon to see if any
received outputs were spent while background sync was enabled.
This would harm privacy especially for users of 3rd party daemons.
- To enable the feature in the CLI wallet, the user can set
background-sync to reuse-wallet-password or
custom-background-password and the wallet automatically syncs in
the background when the wallet locks, then processes all
background synced txs when the wallet is unlocked.
- The custom-background-password option enables the user to
open a distinct background wallet that only has a view key saved
and can be opened/closed/synced separately from the main wallet.
When the main wallet opens, it processes the background wallet's
cache.
- To enable the feature in the RPC wallet, there is a new
`/setup_background_sync` endpoint.
- HW, multsig and view-only wallets cannot background sync.
2024-05-24 20:42:59 -07:00
luigi1111 1ec7eae036 Merge pull request #9311
dd47d03 Enforce Tx unlock_time is Zero by Relay Rule [RELEASE] (jeffro256)
2024-05-20 23:42:54 -05:00
luigi1111 2f0503d7f3 Merge pull request #9309
4634b8b wallet2: fix stagenet get_approximate_blockchain_height (selsta)
2024-05-20 23:40:31 -05:00
luigi1111 b13e597e8e Merge pull request #9306
755dddd common: support boost filesystem copy_options. Co-authored-by: selsta <selsta@sent.at> (0xFFFC0000)
2024-05-20 23:39:01 -05:00
0xFFFC0000andselsta 755dddd2bc common: support boost filesystem copy_options.
Co-authored-by: selsta <selsta@sent.at>
2024-05-01 02:51:08 +03:30
jeffro256 dd47d03cf2 Enforce Tx unlock_time is Zero by Relay Rule [RELEASE]
Related to https://github.com/monero-project/research-lab/issues/78

Added a relay rule that enforces the `unlock_time` field is equal to 0 for non-coinbase transactions.

UIs changed:
* Removed `locked_transfer` and `locked_sweep_all` commands from `monero-wallet-cli`

APIs changed:
* Removed `unlock_time` parameters from `wallet2` transfer methods
* Wallet RPC transfer endpoints send error codes when requested unlock time is not 0
* Removed `unlock_time` parameters from `construct_tx*` cryptonote core functions

@tobtoht: undo rebase changes tx.dsts -> tx_dsts
2024-04-29 00:08:53 -05:00
selsta 4634b8b539 wallet2: fix stagenet get_approximate_blockchain_height 2024-04-28 21:16:14 +02:00
j-berman 8703b8a4cb wallet2: ensure transfers and sweeps use same fee calc logic rnd2
Looks like the logic from #8882 was accidentally removed in #8861
(regressing to the behavior noted in the #8882 description).
This commit brings that logic back.
2024-03-22 14:09:47 -07:00
selsta 32b3a56313 wallet2: adjust fee during backlog, fix set priority 2024-03-08 14:12:17 +01:00
luigi1111 2f912f8a58 Merge pull request #9130
dfb990e wallet: mitigate statistical dependence for decoy selection within rings (jeffro256)
2024-02-24 10:01:09 -05:00
luigi1111 81f113dd8c Merge pull request #9008
9a89e2d wallet2: call on_reorg callback in handle_reorg (j-berman)
1df5630 wallet2: add on_reorg callback (Crypto City)
2024-02-24 09:58:30 -05:00
jeffro256 51d7a6921c wallet: feature: transfer amount with fee included
To transfer ~5 XMR to an address such that your balance drops by exactly 5 XMR, provide a `subtractfeefrom` flag to the `transfer` command. For example:

    transfer 76bDHojqFYiFCCYYtzTveJ8oFtmpNp3X1TgV2oKP7rHmZyFK1RvyE4r8vsJzf7SyNohMnbKT9wbcD3XUTgsZLX8LU5JBCfm 5 subtractfeefrom=all

If my walet balance was exactly 30 XMR before this transaction, it will be exactly 25 XMR afterwards and the destination address will receive slightly
less than 5 XMR. You can manually select which destinations fund the transaction fee and which ones do not by providing the destination index.
For example:

    transfer 75sr8AAr... 3 74M7W4eg... 4 7AbWqDZ6... 5 subtractfeefrom=0,2

This will drop your balance by exactly 12 XMR including fees and will spread the fee cost proportionally (3:5 ratio) over destinations with addresses
`75sr8AAr...` and `7AbWqDZ6...`, respectively.

Disclaimer: This feature was paid for by @LocalMonero.
2024-02-20 17:08:42 -06:00
jeffro256 dfb990e8bb wallet: mitigate statistical dependence for decoy selection within rings
Since we are required to check for uniqueness of decoy picks within any given
ring, and since some decoy picks may fail due to unlock time or malformed EC points,
the wallet2 decoy selection code was building up a larger than needed *unique* set of
decoys for each ring according to a certain distribution *without replacement*. After
filtering out the outputs that it couldn't use, it chooses from the remaining decoys
uniformly random *without replacement*.

The problem with this is that the picks later in the picking process are not independent
from the picks earlier in the picking process, and the later picks do not follow the
intended decoy distribution as closely as the earlier picks. To understand this
intuitively, imagine that you have 1023 marbles. You label 512 marbles with the letter A,
label 256 with the letter B, so on and so forth, finally labelling one marble with the
letter J. You put them all into a bag, shake it well, and pick 8 marbles from the bag,
but everytime you pick a marble of a certain letter, you remove all the other marbles
from that bag with the same letter. That very first pick, the odds of picking a certain
marble are exactly how you would expect: you are twice as likely to pick A as you are B,
twice as likely to pick B as you are C, etc. However, on the second pick, the odds of
getting the first pick are 0%, and the chances for everything else is higher. As you go
down the line, your picked marbles will have letters that are increasingly more unlikely
to pick if you hadn't remove the other marbles. In other words, the distribution of the
later marbles will be more "skewed" in comparison to your original distribution of marbles.

In Monero's decoy selection, this same statistical effect applies. It is not as dramatic
since the distribution is not so steep, and we have more unique values to choose from,
but the effect *is* measureable. Because of the protocol rules, we cannot have duplicate
ring members, so unless that restriction is removed, we will never have perfectly
independent picking. However, since the earlier picks are less affected by this
statistical effect, the workaround that this commit offers is to store the order that
the outputs were picked and commit to this order after fetching output information over RPC.
2024-01-19 13:31:15 -06:00
jeffro256 fe47806afb wallet: fix multisig key memory leak
Multisig keys per-transfer were being wiped, but not erased, which lead to a ginormous
quadratic bloat the more transfers and exports you performed with the wallet.
2023-11-03 11:58:28 -05:00
j-berman bdebf680bd wallet2: ensure transfers and sweeps use same fee calc logic
Ensures both transfers and sweeps use a fee that's calculated
from the tx's weight. Using different logic could theoretically
enable distinguishability between the two types of txs. We don't
want that.
2023-10-16 01:10:05 -07:00
luigi1111 83d0d2338f Merge pull request #9011
03d51b7 wallet2: fix refresh function parameters (selsta)
2023-10-02 15:25:24 -04:00