aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet2.cpp (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2024-03-08wallet2: adjust fee during backlog, fix set priorityselsta1-2/+2
2024-02-20wallet: feature: transfer amount with fee includedjeffro2561-24/+140
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-18Daemon-specific proxy for the wallet-rpc.0xFFFC00001-2/+11
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.
2023-11-28serialization: remove container wrappers and serialize directlyjeffro2561-5/+5
Some downstream code (most notably PR https://github.com/UkoeHB/monero/pull/25) wants to use the src/serialization lib for storing information persistently. When one builds classes/machines wishing to serialize containers, they must use the `serializable_*` container classes. In this case, this makes the Seraphis library code unnecessarily tightly coupled with the src/serialization code since one cannot swap out their type of storage format without major refactoring of class field types. By serializing STL containers directly, we can abstract the serialization details away, making for much cleaner design. Also small bonus side effect of this change is that STL containers with custom Comparators, Allocators, and Hashers are serializable. `std::multimap` is added to the list of serializable containers. Depends upon https://github.com/monero-project/monero/pull/9069.
2023-11-02wallet: sign_tx: get tx pubkey from extratobtoht1-3/+1
2023-11-02wallet: fix multisig key memory leakjeffro2561-0/+26
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-10-17wallet: mitigate statistical dependence for decoy selection within ringsjeffro2561-16/+43
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.
2023-09-26wallet2: call on_reorg callback in handle_reorgj-berman1-4/+4
2023-09-21wallet: store watch-only wallet correctly when `change_password()` is calledjeff1-2/+2
The Monero GUI code was calling `Monero::wallet::setPassword()` on every open/close for some reason, and the old `store_to()` code called `store_keys()` with `watch_only=false`, even for watch-only wallets. This caused a bug where the watch-only keys file got saved with with the JSON field `watch_only` set to 0, and after saving a watch-only wallet once, a user could never open it back up against because `load()` errored out. This never got brought up before this because you would have to change the file location of the watch-only wallet to see this bug, and I guess that didn't happen often, but calling the new `store_to()` function with the new `force_rewrite` parameter set to `true` triggers key restoring and the bug appeared.
2023-08-23wallet2: fix `store_to()` and `change_password()`jeffro2561-28/+74
Resolves #8932 and: 2. Not storing cache when new path is different from old in `store_to()` and 3. Detecting same path when new path contains entire string of old path in `store_to()` and 4. Changing your password / decrypting your keys (in this method or others) and providing a bad original password and getting no error and 5. Changing your password and storing to a new file
2023-08-17wallet2: fix version check at hf version 1j-berman1-1/+1
2023-07-28wallet-rpc: restore from multisig seedjeffro2561-21/+26
2023-07-19scan_tx: fix custom comparator for == case; fixes #8951j-berman1-4/+9
Co-authored-by: woodser <woodser@protonmail.com>
2023-07-16wallet2: when checking frozen multisig tx set, don't assume orderjeffro2561-4/+4
2023-06-27wallet: remove CLI code for non default ring sizesJeffro2561-5/+1
2023-06-15wallet2: fix rescanning tx via scan_txj-berman1-47/+314
- Detach & re-process txs >= lowest scan height - ensures that if a user calls scan_tx(tx1) after scanning tx2, the wallet correctly processes tx1 and tx2 - if a user provides a tx with a height higher than the wallet's last scanned height, the wallet will scan starting from that tx's height - scan_tx requires trusted daemon iff need to re-process existing txs: in addition to querying a daemon for txids, if a user provides a txid of a tx with height *lower* than any *already* scanned txs in the wallet, then the wallet will also query the daemon for all the *higher* txs as well. This is likely unexpected behavior to a caller, and so to protect a caller from revealing txid's to an untrusted daemon in an unexpected way, require the daemon be trusted.
2023-06-12wallet: respect frozen key images in multisig walletsjeffro2561-2/+39
Before this change, if a multisig peer asked you to sign a transaction with a frozen enote, the wallet will do it without any error or warning. This change makes it so that wallets will refuse to sign multisig transactions with frozen enotes. Disclaimer: This PR was generously funded by @LocalMonero.
2023-06-10wallet2: take ignored-by-value outputs into account in balanceCrypto City1-0/+4
2023-05-30wallet2: do not lose exception in current thread on refreshCrypto City1-0/+1
2023-05-30wallet2: fix missing exceptions from failing wallet refreshCrypto City1-0/+1
2023-05-27wallet2: ensure transfers and sweeps use same fee calc logicj-berman1-3/+3
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-04-25remove defunct light wallet codetobtoht1-686/+16
2023-04-25wallet, simplewallet: Drop support for mine-to-use RPC systemJeffrey Ryan1-135/+13
Using post-PR wallet with pre-PR node will generate error message specific to this PR and not generic "command failed" mesages.
2023-04-02gamma picker: relax constructor requirements and test for selecting outputs ↵jeffro2561-2/+2
from first spendable block
2023-03-30wallet2: fix infinite loop in fake out selectionCrypto City1-3/+3
The gamma picker and the caller code did not quite agree on the number of rct outputs available for use - by one block - which caused an infinite loop if the picker could never pick outputs from that block but already had picked all other outputs from previous blocks. Also change the range to select from using code from UkoeHB.
2023-03-21wallet2: make m_process_pool_txs local to refresh methodjeffro2561-9/+9
2023-03-21wallet2: do not commit transactions more than oncemoneromooo-monero1-0/+18
Fixes #8793
2023-03-19wallet2: fix outdated wallet checkCrypto City1-4/+9
it was mistaking the number of forks in the fork table for the last fork, and assuming the table was including every single fork
2023-03-07Enforce restricted # pool txs served via RPC + optimize chunked reqsj-berman1-92/+101
- `/getblocks.bin` respects the `RESTRICTED_TX_COUNT` (=100) when returning pool txs via a restricted RPC daemon. - A restricted RPC daemon includes a max of `RESTRICTED_TX_COUNT` txs in the `added_pool_txs` field, and returns any remaining pool hashes in the `remaining_added_pool_txids` field. The client then requests the remaining txs via `/gettransactions` in chunks. - `/gettransactions` no longer does expensive no-ops for ALL pool txs if the client requests a subset of pool txs. Instead it searches for the txs the client explicitly requests. - Reset `m_pool_info_query_time` when a user: (1) rescans the chain (so the wallet re-requests the whole pool) (2) changes the daemon their wallets points to (a new daemon would have a different view of the pool) - `/getblocks.bin` respects the `req.prune` field when returning pool txs. - Pool extension fields in response to `/getblocks.bin` are optional with default 0'd values.
2023-01-19wallet2: add on_reorg callbackCrypto City1-1/+4
2023-01-16Copyright: Update to 2023mj-xmr1-1/+1
Co-authored-by: plowsof <plowsof@protonmail.com> extra files
2022-12-30wallet2, RPC: Optimize RPC calls for periodic refresh from 3 down to 1 callrbrunner71-119/+312
2022-12-22common: move boost_serialization_helper.h out and cleanup includesJeffrey Ryan1-1/+2
2022-10-18wallet2: fix create view-only wallet from existing walletj-berman1-6/+2
2022-09-21wallet2: fail to establish daemon cxn == "Disconnected" cxn statusj-berman1-0/+1
2022-09-21add an option to force-update multisig key exchange under some circumstanceskoe1-11/+20
2022-09-20Second thread pool for IOSChernykh1-3/+3
2022-09-12wallet2: check wallet compatibility with daemon's hard fork versionj-berman1-12/+141
2022-09-06Fix missing semi-colon in error messagej-berman1-1/+1
Co-authored-by: woodser <woodser@protonmail.com>
2022-09-06multisig: fix #8537 seed restore (suggestions by @UkoeHB)j-berman1-7/+5
- spend secret key is no longer the sum of multisig key shares; no need to check that is the case upon restore. - restoring a multisig wallet from multisig info means that the wallet must have already completed all setup rounds. Upon restore, set the number of rounds completed accordingly.
2022-08-24wallet2: ensure imported outputs subaddresses are createdmoneromooo-monero1-0/+4
reported by j-berman
2022-08-18wallet2: better test on whether to allow output importmoneromooo-monero1-3/+8
Being offline is not a good enough heuristic, so we keep track of whether the wallet ever refreshed from a daemon, which is a lot better, and probably the best we can do without manual user designation (which would break existing cold wallet setups till the user designates those wallets)
2022-08-18allow exporting outputs in chunksmoneromooo-monero1-30/+64
this will make it easier huge wallets to do so without hitting random limits (eg, max string size in node).
2022-08-16wallet2: fixes for export/import output flowj-berman1-2/+6
- only allow offline wallets to import outputs - don't import empty outputs - export subaddress indexes when exporting outputs
2022-08-16wallet2: do not assume imported outputs must be non emptymoneromooo-monero1-2/+2
2022-08-16wallet2: prevent importing outputs in a hot walletmoneromooo-monero1-0/+2
2022-08-16wallet2: fix missing subaddress indices in "light" exported outputsmoneromooo-monero1-1/+3
2022-07-13derive multisig tx secret keys from an entropy source plus the tx inputs' ↵koe1-0/+4
key images
2022-07-11GCC: fix some unused warningsJeffrey Ryan1-0/+4
hash_extra: don't test for success in `jh_hash` and `skein_hash` since its guaranteed device_ledger: move anonymous global variable apdu_verbose into .cpp file Add comments to `refreshed` method variable in wallet2
2022-06-30multisig: fix critical vulnerabilities in signinganon1-92/+214
2022-06-28wallet2: don't use DNS to obtain segregation heightstobtoht1-37/+0
2022-06-27Chunk /gettransactions to avoid hitting restricted RPC limittobtoht1-7/+11
2022-06-25wallet2: force using output distribution for ringct outstobtoht1-9/+14
Co-authored-by: j-berman <justinberman@protonmail.com>
2022-06-24wallet2: remove obsolete rpc version checktobtoht1-26/+1
2022-06-20cryptonote_basic: catch crypto api errorsmoneromooo-monero1-1/+2
2022-06-03wallet_rpc_server: chunk refresh to keep responding to RPC while refreshingmoneromooo-monero1-2/+2
2022-06-01Improve consistency between on_money_received and on_money_received_unconfirmedLuke Parker1-3/+4
unconfirmed solely uses a - b, and received now accepts b so it can provide more detailed logs on what occurred (printing a - b, yet with a and b).
2022-05-17disable multisig by defaultmoneromooo-monero1-1/+8
There are vulnerabilities in multisig protocol if the parties do not trust each other, and while there is a patch for it, it has not been throroughly reviewed yet, so it is felt safer to disable multisig by default for now. If all parties in a multisig setup trust each other, then it is safe to enable multisig.
2022-05-15wallet2: fix spurious reorg detection with untrusted nodesmoneromooo-monero1-9/+5
When forced to deal with an untrusted node, a wallet will quantize its current height to disguise the real height to the adversary, to try and minimize the daemon's ability to distinguish returning wallets. Daemons will thus return more blocks than the wallet needs, starting from earlier in the chain. These extra blocks will be disregarded by the wallet, which had already scanned them. However, for the purposes of reorg size detection, the wallet assumes all blocks the daemon sends are different, which is only correct if the wallet hasn't been coy, which is only the case for trusted daemons (which you should use). This causes an issue when the size of this "fake reorg" is above the sanity check threshold at which the wallet refuses a reorg. To fix this, the reorg size check is moved later on, when the reorg is about to actually happen, after the wallet has checked which blocks are actually different from the ones it expects.
2022-05-13wallet2: speedup large tx construction: reserve vector memorymoneromooo-monero1-1/+7
2.8 seconds -> 2.6 seconds on a test case
2022-05-13wallet2: speedup large tx construction: batch ringdb lookupsCrypto City1-4/+35
3.3 seconds -> 2.8 seconds on a test case
2022-05-13wallet2: speedup large tx construction: batch ringdb updatesCrypto City1-2/+14
5.2 seconds -> 4.1 seconds on a test case
2022-05-13wallet2: speedup large tx construction: cache public key validitymoneromooo-monero1-23/+31
5.9 second -> 5.2 seconds on a test case
2022-05-02wallet2: fix a couple unused variable warningsselsta1-6/+1
2022-04-29multisig: add post-kex verification round to check that all participants ↵koe1-3/+6
have completed the multisig address
2022-04-21Preserve commitment format inside transactionsLuke Parker1-3/+1
2022-04-18Bump ring size to 16 for v15 & remove set default in wallet clij-berman1-0/+4
2022-04-18Add view tags to outputs to reduce wallet scanning timej-berman1-128/+177
Implements view tags as proposed by @UkoeHB in MRL issue https://github.com/monero-project/research-lab/issues/73 At tx construction, the sender adds a 1-byte view tag to each output. The view tag is derived from the sender-receiver shared secret. When scanning for outputs, the receiver can check the view tag for a match, in order to reduce scanning time. When the view tag does not match, the wallet avoids the more expensive EC operations when deriving the output public key using the shared secret.
2022-04-10wallet2: use BP+ for cold signingmoneromooo-monero1-1/+1
reported by ukoehb
2022-04-10Fee changes from ArticMinemoneromooo-monero1-32/+62
https://github.com/ArticMine/Monero-Documents/blob/master/MoneroScaling2021-02.pdf with a change to use 1.7 instead of 2.0 for the max long term increase rate
2022-04-05store outPk/8 in the tx for speedmoneromooo-monero1-1/+3
It avoids dividing by 8 when deserializing a tx, which is a slow operation, and multiplies by 8 when verifying and extracing the amount, which is much faster as well as less frequent
2022-04-05plug bulletproofs plus into consensusmoneromooo-monero1-37/+48
2022-03-29wallet2: decrease the amount of data exchanged for output exportmoneromooo-monero1-7/+125
2022-03-10Make the wallet name optional when locked.Norman Moeschter1-0/+7
2022-03-04Copyright: Update to 2022mj-xmr1-1/+1
2022-03-01wallet2: update stagenet rollback blocksselsta1-4/+4
2022-02-22multisig key exchange update and refactorkoe1-447/+147
2022-01-31Balance includes unconfirmed transfers to selfwoodser1-0/+13
2021-12-24wallet inits cache if file and blob missingwoodser1-4/+5
2021-11-30`make_uri` disallows standalone payment idswoodser1-6/+2
2021-10-20wallet2: remove 2 unused variablesselsta1-2/+0
2021-10-19wallet2: fix key encryption when changing ask-password from 0/1 to 2moneromooo-monero1-20/+3
we reuse the wallet_keys_unlocker object, which does the right thing in conjunction with other users of decrypt/encrypt (ie, refresh).
2021-10-04Decrease the "recent spend window" in gamma re-select to 15 blocksj-berman1-1/+1
- combined with patching integer truncation (#7798), this gets the algorithm marginally closer to mirroring empirically observed output ages - 50 was originally chosen assuming integer truncation would remain in the client for that client release version. But patching integer truncation causes the client to select more outputs in the 10-100 block range, and therefore the benefit of choosing a larger recent spend window of 50 has less merit - 15 seems well-suited to cover the somewhat sizable observable gap in the early window of blocks
2021-09-12Fix precision of average_output_timej-berman1-7/+1
The fix as suggested by <jberman> on IRC. Before the fix, it would truncate 1.9 to 1 skewing the output selection.
2021-08-28wallet: fix unused lambda capture warningselsta1-1/+1
2021-08-26Wallet2: fix optimize-coinbase for p2pool payoutsSChernykh1-4/+5
RefreshOptimizeCoinbase was an optimization to speed up scanning of coinbase transactions before RingCT (tx version 2) where they split miner reward into multiple denominations, all to the same wallet. When RingCT was introduced, all coinbase transactions became 1 output only, so this optimization does nothing now. With p2pool, this optimization will skip scanning p2pool payouts because they use more than 1 output in coinbase transaction. Fix it by applying this optimization only to pre-RingCT transactions (version < 2).
2021-08-20monero-wallet-rpc: Prevent --password-file from being used with --wallet-dirKermit Alexander II1-4/+6
2021-08-19Protect client from divide by 0 caused by integer truncationj-berman1-0/+6
2021-08-19Apply gamma distr from chain tip when selecting decoysj-berman1-0/+31
- matches the paper by Miller et al to apply the gamma from chain tip, rather than after unlock time - if the gamma produces an output more recent than the unlock time, the algo packs that output into one of the first 50 spendable blocks, respecting the block density factor
2021-08-11Make sure node returns to wallet that real output is unlockedj-berman1-1/+2
2021-08-03trezor: try empty passphrase firstDusan Klinec1-1/+20
- Try empty passphrase first when opening a wallet, as all Trezors will have passphrase enabled by default by Trezor Suite by default. This feature enables easier access to all users using disabled passphrase (or empty passhprase) - If wallet address differs from device address with empty passphrase, another opening attempt is made, without passphrase suppression, so user can enter his passhprase if using some. In this scenario, nothing changes to user, wallet opening just consumes one more call to Trezor (get wallet address with empty passphrase) - also change how m_passphrase is used. Previous version did not work well with recent passphrase entry mechanism change (made in Trezor), thus this commit fixes the behaviour).
2021-07-15wallet2: chunk get_outs.bin calls to avoid sanity limitsmoneromooo-monero1-8/+20
2021-07-14wallet2: Don't auto lock device on process parsed blockstobtoht1-2/+1
2021-07-14wallet: rephrase error message on invalid device addressDusan Klinec1-1/+1
2021-07-14fix #7784 - deinit wallet in wallet dtorDusan Klinec1-3/+6
2021-06-04wallet2: refresh: check error and throw before potentially breaking out of looptobtoht1-8/+9
2021-06-04wallet: Reset RPC Pay ID on node switchtobtoht1-0/+3
RPC pay client ID is sent with each RPC request, set a new secret every time we switch nodes to mitigate trivial correlation
2021-04-25Wallet2: Update 'approximate_testnet_rolled_back_blocks'rbrunner71-1/+1
2021-04-23wallet2: Fix rescan_bc keep_ki optionNathan Dorfman1-21/+26
2021-04-16Split epee/string_tools.h and encapsulate boost::lexical_castmj-xmr1-0/+1
2021-04-15rpc: send confirmations in get_transactions resultmoneromooo-monero1-4/+14
if the wallet does it, it would get a wrong result (possibly even negative) if its local chain is not synced up to the daemon's yet
2021-04-07monero-wallet-cli: improve error message when tx amount is zeroElliot Wirrick1-4/+4
2021-03-25wallet2: fix unlocked mixup in light wallet modemoneromooo-monero1-2/+2
2021-03-05fix serialization being different on macmoneromooo-monero1-5/+15
On Mac, size_t is a distinct type from uint64_t, and some types (in wallet cache as well as cold/hot wallet transfer data) use pairs/containers with size_t as fields. Mac would save those as full size, while other platforms would save them as varints. Might apply to other platforms where the types are distinct. There's a nasty hack for backward compatibility, which can go after a couple forks.
2021-02-17monero-wallet-cli: Added command scan_txHoria Mihai David1-0/+42
To implement this feature, the wallet2::scan_tx API was implemented.
2021-02-09Remove unused variables in monero codebaseKevin Barbour1-9/+1
There are quite a few variables in the code that are no longer (or perhaps never were) in use. These were discovered by enabling compiler warnings for unused variables and cleaning them up. In most cases where the unused variables were the result of a function call the call was left but the variable assignment removed, unless it was obvious that it was a simple getter with no side effects.
2021-01-28Removing unused namespace aliasLee Clagett1-2/+0
2021-01-25Attempt to carve the fee from a partial payment earlyAlex Opie1-20/+34
Do this for both the estimate and actual fee. #7337
2021-01-25Stop adding more outputs than bulletproof allowsAlex Opie1-7/+35
If more outputs are requested, they are split across multiple transactions. #7322
2021-01-23Improve cryptonote (block and tx) binary read performanceLee Clagett1-19/+8
2020-12-22restrict public node checks a littlemoneromooo-monero1-0/+1
do not include blocked hosts in peer lists or public node lists by default, warn about no https on clearnet and about untrusted peers likely being spies
2020-12-03wallet2: set propagation timeout to current max timeoutselsta1-1/+2
2020-11-24wallet2: check imported multisig curve points are in main subgroupCrypto City1-0/+14
2020-11-06Balance includes unconfirmed paymentswoodser1-0/+8
2020-10-18wallet2: wait for propagation timeout before marking tx as failedxiphon1-2/+6
2020-10-13wallet2: skip reorgs exceeding max-reorg-depth wallet settingxiphon1-0/+21
2020-10-10Change epee binary output from std::stringstream to byte_streamLee Clagett1-5/+4
2020-09-24fix a couple bugs found by OSS-fuzzmoneromooo-monero1-0/+2
- index out of bounds when importing outputs - accessing invalid CLSAG data
2020-09-15wallet2: adapt to deterministic unlock timeTheCharlatan1-10/+21
2020-09-12wallet2: fix tx sanity check triggering on pre-rct outputsmoneromooo-monero1-3/+8
2020-09-09Fix typo in command line argument descriptionReinaldulin1-1/+1
2020-09-04enable CLSAG support for Trezor clientDusan Klinec1-1/+1
2020-09-01update error message "No unlocked balance in the specified account"woodser1-1/+1
2020-09-01threadpool: guard against exceptions in jobs, and armour platingmoneromooo-monero1-15/+15
Those would, if uncaught, exit run and leave the waiter to wait indefinitely for the number of active jobs to reach 0
2020-08-28Bind signature to full address and signing modeSarang Noether1-24/+40
2020-08-28wallet: allow signing a message with spend or view keymoneromooo-monero1-19/+82
2020-08-27Integrate CLSAGs into moneromoneromooo-monero1-30/+64
They are allowed from v12, and MLSAGs are rejected from v13.
2020-08-17Revert "Use domain-separated ChaCha20 for in-memory key encryption"luigi11111-16/+0
This reverts commit 921dd8dde5d381052d0aa2936304a3541a230c55.
2020-08-17replace most boost serialization with existing monero serializationmoneromooo-monero1-45/+196
This reduces the attack surface for data that can come from malicious sources (exported output and key images, multisig transactions...) since the monero serialization is already exposed to the outside, and the boost lib we were using had a few known crashers. For interoperability, a new load-deprecated-formats wallet setting is added (off by default). This allows loading boost format data if there is no alternative. It will likely go at some point, along with the ability to load those. Notably, the peer lists file still uses the boost serialization code, as the data it stores is define in epee, while the new serialization code is in monero, and migrating it was fairly hairy. Since this file is local and not obtained from anyone else, the marginal risk is minimal, but it could be migrated later if needed. Some tests and tools also do, this will stay as is for now.
2020-08-10simplewallet: allow setting tx keys when sending to a subaddressmoneromooo-monero1-1/+11
The tx key derivation is different then
2020-08-09Use domain-separated ChaCha20 for in-memory key encryptionSarang Noether1-0/+16
2020-08-09Updates InProofV1, OutProofV1, and ReserveProofV1 to new V2 variants that ↵Sarang Noether1-17/+29
include all public proof parameters in Schnorr challenges, along with hash function domain separators. Includes new randomized unit tests.
2020-08-08wallet2: fix setting tx keys when another is already setmoneromooo-monero1-10/+10
insert doesn't actually insert if another element with the same key is already in the map
2020-08-05Fix broken multisig pubkey sortingJason Rhinelander1-2/+2
The sort predicate is a boolean ordered-before value, but these are returning the memcmp value directly, and thus returns true whenever the pubkeys aren't equal. This means: - it isn't actually sorting. - it can (and does) segfault for some inputs.
2020-07-31wallet2: fix wrong name when checking RPC costmoneromooo-monero1-1/+1
2020-07-20wallet2_api: implement runtime proxy configurationxiphon1-28/+12
2020-07-20wallet2: throw a error on wallet initialization failurexiphon1-1/+4
2020-06-06fix warning by removing std::move() on temporary http_client objectwoodser1-1/+1
2020-05-31Fix boost <1.60 compilation and fix boost 1.73+ warningsLee Clagett1-1/+1
2020-05-25fix typo in pick_preferred_rct_inputsDenis Smirnov1-1/+1
2020-05-19wallet2: fix multisig data clearing stomping on a vectormoneromooo-monero1-1/+1
2020-05-13simplewallet: don't complain about incoming payment ids on changemoneromooo-monero1-2/+16
2020-05-06Update copyright year to 2020SomaticFanatic1-1/+1
Update copyright year to 2020
2020-05-05wallet2: fix keys file deserialization exception handlingxiphon1-7/+1
2020-04-27wallet2: fix subaddress expansion when receiving moneromoneromooo-monero1-3/+15
2020-04-27trezor: adapt to new passphrase mechanismDusan Klinec1-2/+6
- choice where to enter passphrase is now made on the host - use wipeable string in the comm stack - wipe passphrase memory - protocol optimizations, prepare for new firmware version - minor fixes and improvements - tests fixes, HF12 support
2020-04-26wallet2: check_connection return false on get_version status != OKxiphon1-3/+2
2020-04-22simplewallet: report timestamp based expected unlock time on balancemoneromooo-monero1-12/+25
2020-04-15Allow wallet2.h to run in WebAssemblywoodser1-134/+205
- Add abstract_http_client.h which http_client.h extends. - Replace simple_http_client with abstract_http_client in wallet2, message_store, message_transporter, and node_rpc_proxy. - Import and export wallet data in wallet2. - Use #if defined __EMSCRIPTEN__ directives to skip incompatible code.
2020-04-15use memwipe on secret k/alpha valuesmoneromooo-monero1-6/+10
Reported by UkoeHB_ and sarang
2020-04-07simplewallet: new "address one-off <major> <minor>" commandmoneromooo-monero1-3/+12
2020-04-01Hash domain separationSarang Noether1-5/+1
2020-03-31cryptonote_basic: drop unused verification_context::m_not_rct fieldxiphon1-2/+0
2020-03-09Move hex->bin conversion to monero copyright files and with less includesLee Clagett1-1/+1
2020-03-07wallet2: remember daemon address overrides when loading a new walletmoneromooo-monero1-2/+21
2020-02-07wallet2: mention --daemon-ssl-allow-any-cert in --proxy error msgxiphon1-0/+1
2020-01-26wallet: do not split integrated addresses in address book apimoneromooo-monero1-4/+6
2020-01-25wallet2_api: implement estimateTransactionFeexiphon1-14/+14
2020-01-24wallet2: fix store-tx-info loadingmoneromooo-monero1-3/+12
The backward compatibility code was always setting it to 1 in modern wallets since store_tx_keys was not present and thus assumed to be 1 by default. Reported by SeventhAlpaca
2020-01-16wallet2: reject zero keys in json inputmoneromooo-monero1-0/+4
Because the user might do this for reasons unknown. Values beyond l-1 will be reduced, so are accepted. Reported by who-biz.
2020-01-14wallet: reroll fake outs selection on local tx_sanity_check failurexiphon1-2/+44
2020-01-11Wallet: Distingush amounts for a single subaddressTadeas Moravec1-1/+27
Adding a new `amounts` field ot the output of `get_transfers` RPC method. This field specifies individual payments made to a single subaddress in a single transaction, e.g., made by this command: transfer <addr1> <amount1> <addr1> <amount2>
2020-01-09wallet2: do not remove known rings when a tx failsmoneromooo-monero1-1/+0
Even if it fails, the ring composition is known to a potential adversary, and so we should reuse the same ring next time
2019-12-31wallet: allow message sign/verify for subaddressesmoneromooo-monero1-2/+16
2019-12-30wallet: fix exceptions getting the hash of a pruned txmoneromooo-monero1-7/+7
2019-12-17wallet2: guard against race with multiple decrypt_keys usersmoneromooo-monero1-0/+7
If more than one thread wants to make sure of the spend secret key, then we decrypt on the first caller and reencrypt on the last caller, otherwise we could use an invalid secret key.
2019-12-14wallet2: fix hang in wallet refreshmoneromooo-monero1-1/+1
If the hashes received would move the current blockchain past the stop point, the short history would not be updated, since we do not expect another loop, but the daemon might return earlier hashes, causing the end index to not be enough to reach the threshold and this require another loop, which will download the same hashes and cause an infinite loop.
2019-11-28wallet2: better error when restoring a wallet with the wrong keysmoneromooo-monero1-1/+1
2019-11-19wallet: don't issue node rpc proxy requests in '--offline' modexiphon1-0/+1
2019-11-06wallet_rpc_server: new estimate_tx_size_and_weight RPCmoneromooo-monero1-0/+18
2019-11-05wallet2: don't try to lock an empty filenamemoneromooo-monero1-0/+6
2019-11-04wallet2: fix pool txes not being flushed when minedmoneromooo-monero1-1/+1
2019-11-01wallet2: fix is_synced checking target height, not heightmoneromooo-monero1-1/+1
Target height would be appropriate for the daemon, which syncs off other daemons, but the wallet syncs off the daemon it's connected to, and its target is the daemon's current height.
2019-11-01wallet: fix another facet of "did I get some monero" information leakmoneromooo-monero1-10/+30
We get new pool txes before processing any tx, pool or not. This ensures that if we're asked for a password, this does not cause a measurable delay in the txpool query after the last block query.
2019-11-01wallet2: do not send an unnecessary last getblocks.bin call on refreshmoneromooo-monero1-5/+15
The "everything refreshed" state was detected when a refresh call did not return any new blocks. This can be detected without that extra "empty" call by comparing the claimed node height to the height of the last block retrieved. Doing this avoids that last call, saves some bandwidth, and makes the common refresh case use only one call rather than two. As a side effect, it prevents an information leak reported by Tramèr et al: if the wallet retrieves a set of blocks which includes an output sent to the refreshing wallet, the wallet will prompt the user for the password to decode the amount and calculate the key image for the new output, and this will delay subsequent calls to getblocks.bin, allowing a passive adversary to note the delay and deduce when the wallet receives at least one output. This can still happen if the wallet downloads more than 1000 blocks, since this will be split in several calls, but then the most the adversary can tell is which 1000 block section the user received some monero (the adversary can estimate the heights of the blocks by calculating how many "large" transfers are done, which will be sections of blocks, the last of which will usually be below 1000, but the size of the data should allow the actual number of blocks sent to be determined fairly accurately). This timing trick still be used via the subsequent scan for incoming txes in the txpool, which will be fixed later.
2019-11-01wallet2: do not repeatedly ask for pool txes sent to usmoneromooo-monero1-5/+0
This lets a passive attacker with access to the network link between node and wallet perform traffic analysis to deduce when an idle wallet receives a transaction. Reported by Tramèr et al.
2019-10-29wallet2: make keys unlocker reentrantmoneromooo-monero1-3/+21
protects against having your keys mangled
2019-10-25simplewallet: add public_nodes commandmoneromooo-monero1-0/+21
Lists nodes exposing their RPC port for public use
2019-10-25daemon, wallet: new pay for RPC use systemmoneromooo-monero1-245/+420
Daemons intended for public use can be set up to require payment in the form of hashes in exchange for RPC service. This enables public daemons to receive payment for their work over a large number of calls. This system behaves similarly to a pool, so payment takes the form of valid blocks every so often, yielding a large one off payment, rather than constant micropayments. This system can also be used by third parties as a "paywall" layer, where users of a service can pay for use by mining Monero to the service provider's address. An example of this for web site access is Primo, a Monero mining based website "paywall": https://github.com/selene-kovri/primo This has some advantages: - incentive to run a node providing RPC services, thereby promoting the availability of third party nodes for those who can't run their own - incentive to run your own node instead of using a third party's, thereby promoting decentralization - decentralized: payment is done between a client and server, with no third party needed - private: since the system is "pay as you go", you don't need to identify yourself to claim a long lived balance - no payment occurs on the blockchain, so there is no extra transactional load - one may mine with a beefy server, and use those credits from a phone, by reusing the client ID (at the cost of some privacy) - no barrier to entry: anyone may run a RPC node, and your expected revenue depends on how much work you do - Sybil resistant: if you run 1000 idle RPC nodes, you don't magically get more revenue - no large credit balance maintained on servers, so they have no incentive to exit scam - you can use any/many node(s), since there's little cost in switching servers - market based prices: competition between servers to lower costs - incentive for a distributed third party node system: if some public nodes are overused/slow, traffic can move to others - increases network security - helps counteract mining pools' share of the network hash rate - zero incentive for a payer to "double spend" since a reorg does not give any money back to the miner And some disadvantages: - low power clients will have difficulty mining (but one can optionally mine in advance and/or with a faster machine) - payment is "random", so a server might go a long time without a block before getting one - a public node's overall expected payment may be small Public nodes are expected to compete to find a suitable level for cost of service. The daemon can be set up this way to require payment for RPC services: monerod --rpc-payment-address 4xxxxxx \ --rpc-payment-credits 250 --rpc-payment-difficulty 1000 These values are an example only. The --rpc-payment-difficulty switch selects how hard each "share" should be, similar to a mining pool. The higher the difficulty, the fewer shares a client will find. The --rpc-payment-credits switch selects how many credits are awarded for each share a client finds. Considering both options, clients will be awarded credits/difficulty credits for every hash they calculate. For example, in the command line above, 0.25 credits per hash. A client mining at 100 H/s will therefore get an average of 25 credits per second. For reference, in the current implementation, a credit is enough to sync 20 blocks, so a 100 H/s client that's just starting to use Monero and uses this daemon will be able to sync 500 blocks per second. The wallet can be set to automatically mine if connected to a daemon which requires payment for RPC usage. It will try to keep a balance of 50000 credits, stopping mining when it's at this level, and starting again as credits are spent. With the example above, a new client will mine this much credits in about half an hour, and this target is enough to sync 500000 blocks (currently about a third of the monero blockchain). There are three new settings in the wallet: - credits-target: this is the amount of credits a wallet will try to reach before stopping mining. The default of 0 means 50000 credits. - auto-mine-for-rpc-payment-threshold: this controls the minimum credit rate which the wallet considers worth mining for. If the daemon credits less than this ratio, the wallet will consider mining to be not worth it. In the example above, the rate is 0.25 - persistent-rpc-client-id: if set, this allows the wallet to reuse a client id across runs. This means a public node can tell a wallet that's connecting is the same as one that connected previously, but allows a wallet to keep their credit balance from one run to the other. Since the wallet only mines to keep a small credit balance, this is not normally worth doing. However, someone may want to mine on a fast server, and use that credit balance on a low power device such as a phone. If left unset, a new client ID is generated at each wallet start, for privacy reasons. To mine and use a credit balance on two different devices, you can use the --rpc-client-secret-key switch. A wallet's client secret key can be found using the new rpc_payments command in the wallet. Note: anyone knowing your RPC client secret key is able to use your credit balance. The wallet has a few new commands too: - start_mining_for_rpc: start mining to acquire more credits, regardless of the auto mining settings - stop_mining_for_rpc: stop mining to acquire more credits - rpc_payments: display information about current credits with the currently selected daemon The node has an extra command: - rpc_payments: display information about clients and their balances The node will forget about any balance for clients which have been inactive for 6 months. Balances carry over on node restart.
2019-10-23wallet2: error out when we need a daemon password but have no prompt functionmoneromooo-monero1-0/+5
2019-10-23wallet2: fix the logged number of detached transfersmoneromooo-monero1-0/+1
2019-10-14wallet: remove long payment ID sending supportmoneromooo-monero1-7/+0
2019-10-14wallet2: ignore received unencrypted payment IDs (but warn hard)moneromooo-monero1-6/+18
2019-10-04wallet2: don't delete file that may not existselsta1-5/+5
2019-10-02wallet2: add ignore-outputs-{above/below} optionstoffu1-1/+35
https://github.com/aeonix/aeon/pull/131
2019-09-27monerod can now sync from pruned blocksmoneromooo-monero1-1/+1
If the peer (whether pruned or not itself) supports sending pruned blocks to syncing nodes, the pruned version will be sent along with the hash of the pruned data and the block weight. The original tx hashes can be reconstructed from the pruned txes and theur prunable data hash. Those hashes and the block weights are hashes and checked against the set of precompiled hashes, ensuring the data we received is the original data. It is currently not possible to use this system when not using the set of precompiled hashes, since block weights can not otherwise be checked for validity. This is off by default for now, and is enabled by --sync-pruned-blocks
2019-09-17wallet: add edit_address_book RPCmoneromooo-monero1-0/+15
2019-09-10wallet2: enable ignoring fractional outputs also when sweepingstoffu1-0/+16
2019-09-06wallet2: resolve CID 203918 null pointer deference (NULL_RETURNS)anonimal1-0/+6
2019-09-05wallet: fix mismatch between two concepts of "balance"moneromooo-monero1-34/+58
One considers the blockchain, while the other considers the blockchain and some recent actions, such as a recently created transaction which spend some outputs, but isn't yet mined. Typically, the "balance" command wants the latter, to reflect the recent action, but things like proving ownership wants the former. This fixes a crash in get_reserve_proof, where a preliminary check and the main code used two concepts of "balance".
2019-09-02Removed unused boost/value_init headerLev Sizov1-1/+0
2019-09-02Changed the use of boost:value_initialized for C++ list initializerJesus Ramirez1-4/+4
2019-08-28simplewallet: lock console on inactivitymoneromooo-monero1-0/+9
2019-08-28rpc: move a leftover light wallet RPC out of daemon RPCmoneromooo-monero1-2/+2
2019-08-24wallet2: fix unset_ring tx retrieval checksmoneromooo-monero1-3/+1
2019-08-23wallet2: fix cold signing losing tx keysmoneromooo-monero1-1/+1
2019-08-22Wallet: Option to export data to ASCIITadeas Moravec1-21/+108
New CLI wallet variable: export-format with options "binary" (the default), or "ascii". "Binary" behaves as before, "ascii" forces the wallet to convert data to ASCII using base64. Reading files from the disk tries to auto detect what format has been used (using a magic string added when exporting the data). Implements https://github.com/monero-project/monero/issues/2859
2019-08-22wallet: add --extra-entropy command line flagmoneromooo-monero1-0/+11
It lets the user add custom entropy to the PRNG. It does this by hashing the new data and xoring the resulting hash with the PRNG state.
2019-08-19reject setting lookahead major or minor to 0moneromooo-monero1-0/+2
2019-08-15Replace std::random_shuffle with std::shuffleTom Smeding1-2/+2
According to [1], std::random_shuffle is deprecated in C++14 and removed in C++17. Since std::shuffle is available since C++11 as a replacement and monero already requires C++11, this is a good replacement. A cryptographically secure random number generator is used in all cases to prevent people from perhaps copying an insecure std::shuffle call over to a place where a secure one would be warranted. A form of defense-in-depth. [1]: https://en.cppreference.com/w/cpp/algorithm/random_shuffle