aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/wallet2.h (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2023-08-23wallet2: fix `store_to()` and `change_password()`jeffro2561-6/+16
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-17wallet_rpc_server: chunk refresh to keep responding to RPC while refreshingmoneromooo-monero1-1/+1
2023-08-10wallet-rpc: restore from multisig seedjeffro2561-1/+1
2023-07-09Enforce restricted # pool txs served via RPC + optimize chunked reqs ↵j-berman1-1/+2
[release-v0.18] - `/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-07-09wallet2, RPC: Optimize RPC calls for periodic refresh from 3 down to 1 call ↵rbrunner71-6/+12
[release-v0.18]
2023-06-12wallet: respect frozen key images in multisig wallets [RELEASE]jeffro2561-0/+1
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-03-25wallet2: fix infinite loop in fake out selectionCrypto City1-0/+1
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-13wallet2: fix rescanning tx via scan_txj-berman1-3/+34
- 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.
2022-09-21add an option to force-update multisig key exchange under some circumstanceskoe1-1/+2
2022-09-12wallet2: check wallet compatibility with daemon's hard fork versionj-berman1-1/+6
2022-09-07wallet2: better test on whether to allow output importmoneromooo-monero1-3/+17
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-09-07allow exporting outputs in chunksmoneromooo-monero1-13/+51
this will make it easier huge wallets to do so without hitting random limits (eg, max string size in node).
2022-09-06wallet2: fixes for export/import output flowj-berman1-0/+2
- only allow offline wallets to import outputs - don't import empty outputs - export subaddress indexes when exporting outputs
2022-09-06wallet2: fix missing subaddress indices in "light" exported outputsmoneromooo-monero1-1/+5
2022-09-01multisig: fix #8537 seed restore (suggestions by @UkoeHB)j-berman1-1/+2
- 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-07-13derive multisig tx secret keys from an entropy source plus the tx inputs' ↵koe1-0/+8
key images
2022-07-05wallet2: prevent crash when reading tx w/fewer outputs than expectedj-berman1-0/+2
2022-06-30multisig: fix critical vulnerabilities in signinganon1-3/+20
2022-06-01Improve consistency between on_money_received and on_money_received_unconfirmedLuke Parker1-1/+1
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-0/+3
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-13wallet2: speedup large tx construction: batch ringdb lookupsCrypto City1-0/+1
3.3 seconds -> 2.8 seconds on a test case
2022-05-13wallet2: speedup large tx construction: batch ringdb updatesCrypto City1-0/+1
5.2 seconds -> 4.1 seconds on a test case
2022-05-13wallet2: speedup large tx construction: cache public key validitymoneromooo-monero1-5/+5
5.9 second -> 5.2 seconds on a test case
2022-04-18Add view tags to outputs to reduce wallet scanning timej-berman1-8/+42
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-10Fee changes from ArticMinemoneromooo-monero1-1/+2
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-05plug bulletproofs plus into consensusmoneromooo-monero1-1/+1
2022-03-29wallet2: decrease the amount of data exchanged for output exportmoneromooo-monero1-3/+42
2022-03-10Make the wallet name optional when locked.Norman Moeschter1-0/+3
2022-03-04Copyright: Update to 2022mj-xmr1-1/+1
2022-02-22multisig key exchange update and refactorkoe1-39/+7
2021-10-19wallet2: fix key encryption when changing ask-password from 0/1 to 2moneromooo-monero1-3/+1
we reuse the wallet_keys_unlocker object, which does the right thing in conjunction with other users of decrypt/encrypt (ie, refresh).
2021-10-01wallet2: keep around transaction prefix for confirmed transferstobtoht1-2/+5
2021-04-23wallet2: Fix rescan_bc keep_ki optionNathan Dorfman1-1/+1
2021-03-05fix serialization being different on macmoneromooo-monero1-5/+5
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-20wallet_rpc_payments: implement multithreadinggdmojo1-1/+1
2021-02-17monero-wallet-cli: Added command scan_txHoria Mihai David1-0/+2
To implement this feature, the wallet2::scan_tx API was implemented.
2020-12-10simplewallet: don't complain about connecting to the daemon when offlinemoneromooo-monero1-0/+1
2020-10-13wallet2: skip reorgs exceeding max-reorg-depth wallet settingxiphon1-0/+4
2020-10-12wallet2: fix missing m_state field in wallet serializationmoneromooo-monero1-1/+3
2020-09-15wallet2: adapt to deterministic unlock timeTheCharlatan1-8/+10
2020-09-12wallet2: fix tx sanity check triggering on pre-rct outputsmoneromooo-monero1-1/+1
2020-08-28Bind signature to full address and signing modeSarang Noether1-1/+1
2020-08-28wallet: allow signing a message with spend or view keymoneromooo-monero1-2/+4
2020-08-27Integrate CLSAGs into moneromoneromooo-monero1-1/+1
They are allowed from v12, and MLSAGs are rejected from v13.
2020-08-17Revert "Use domain-separated ChaCha20 for in-memory key encryption"luigi11111-11/+0
This reverts commit 921dd8dde5d381052d0aa2936304a3541a230c55.
2020-08-17replace most boost serialization with existing monero serializationmoneromooo-monero1-33/+170
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-16Fix build with Boost 1.74moneromooo-monero1-0/+3
Thanks iDunk for testing
2020-08-10simplewallet: allow setting tx keys when sending to a subaddressmoneromooo-monero1-1/+1
The tx key derivation is different then
2020-08-09Use domain-separated ChaCha20 for in-memory key encryptionSarang Noether1-0/+11
2020-07-20wallet2_api: implement runtime proxy configurationxiphon1-3/+4
2020-05-13simplewallet: don't complain about incoming payment ids on changemoneromooo-monero1-1/+2
2020-05-06Update copyright year to 2020SomaticFanatic1-1/+1
Update copyright year to 2020
2020-04-27wallet2: fix subaddress expansion when receiving moneromoneromooo-monero1-0/+2
2020-04-27trezor: adapt to new passphrase mechanismDusan Klinec1-3/+3
- 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-22simplewallet: report timestamp based expected unlock time on balancemoneromooo-monero1-3/+3
2020-04-15Allow wallet2.h to run in WebAssemblywoodser1-10/+30
- 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-07simplewallet: new "address one-off <major> <minor>" commandmoneromooo-monero1-0/+1
2020-03-07wallet2: remember daemon address overrides when loading a new walletmoneromooo-monero1-0/+5
2020-01-26wallet: do not split integrated addresses in address book apimoneromooo-monero1-5/+30
2020-01-25wallet2_api: implement estimateTransactionFeexiphon1-0/+1
2020-01-14wallet: reroll fake outs selection on local tx_sanity_check failurexiphon1-0/+1
2020-01-11Wallet: Distingush amounts for a single subaddressTadeas Moravec1-1/+6
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>
2019-12-31wallet: allow message sign/verify for subaddressesmoneromooo-monero1-1/+1
2019-12-30wallet: fix exceptions getting the hash of a pruned txmoneromooo-monero1-2/+2
2019-12-17wallet2: guard against race with multiple decrypt_keys usersmoneromooo-monero1-0/+2
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-11-06wallet_rpc_server: new estimate_tx_size_and_weight RPCmoneromooo-monero1-0/+2
2019-11-01wallet: fix another facet of "did I get some monero" information leakmoneromooo-monero1-1/+2
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-2/+2
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-10-29wallet2: make keys unlocker reentrantmoneromooo-monero1-0/+2
protects against having your keys mangled
2019-10-25simplewallet: add public_nodes commandmoneromooo-monero1-0/+2
Lists nodes exposing their RPC port for public use
2019-10-25daemon, wallet: new pay for RPC use systemmoneromooo-monero1-17/+66
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-14wallet: remove long payment ID sending supportmoneromooo-monero1-3/+0
2019-10-14wallet2: ignore received unencrypted payment IDs (but warn hard)moneromooo-monero1-1/+1
2019-10-02wallet2: add ignore-outputs-{above/below} optionstoffu1-0/+6
https://github.com/aeonix/aeon/pull/131
2019-09-17wallet: add edit_address_book RPCmoneromooo-monero1-0/+1
2019-09-05wallet: fix mismatch between two concepts of "balance"moneromooo-monero1-7/+9
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-08-28simplewallet: lock console on inactivitymoneromooo-monero1-0/+3
2019-08-22Wallet: Option to export data to ASCIITadeas Moravec1-0/+12
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-07-02simplewallet: optional all flag to export_outputs/export_key_imagesmoneromooo-monero1-1/+1
2019-06-17device: show address on device displayDusan Klinec1-0/+2
- Trezor: support for device address display (subaddress, integrated address) - Wallet::API support added - Simplewallet: - address device [<index>] - address new <label> // shows address on device also - integrated_address [device] <payment_id|address> // new optional "device" arg to display also on the device
2019-06-02Remember RPC version on initial connectHoward Chu1-0/+1
Don't keep asking for it on an intact connection Wallet is too chatty over the wire
2019-05-16wallet: add unlock_time details to show_transfersmoneromooo-monero1-1/+1
also add a note when receiving the tx, because the user might not notice the "XXX blocks to unlock" in the balance.
2019-05-02wallet: distinguish between empty and absent attributesmoneromooo-monero1-1/+1
2019-04-18wallet2: "output lineup" fake out selectionmoneromooo-monero1-0/+25
Based on python code by sarang: https://github.com/SarangNoether/skunkworks/blob/outputs/outputs/simulate.py
2019-04-15wallet: new --offline optionmoneromooo-monero1-4/+9
It will avoid connecting to a daemon (so useful for cold signing using a RPC wallet), and not perform DNS queries.
2019-04-11simplewallet: new net_stats commandmoneromooo-monero1-0/+3
displays total sent and received bytes
2019-04-10wallet_rpc_server: add a all flag to export_outputsmoneromooo-monero1-2/+2
if we don't want to export new outputs only
2019-04-07device/trezor: add button pressed requestDusan Klinec1-0/+3
2019-04-07Pass SSL arguments via one class and use shared_ptr instead of referenceLee Clagett1-8/+2
2019-04-06Change SSL certificate file list to OpenSSL builtin load_verify_locationLee Clagett1-2/+2
Specifying SSL certificates for peer verification does an exact match, making it a not-so-obvious alias for the fingerprints option. This changes the checks to OpenSSL which loads concatenated certificate(s) from a single file and does a certificate-authority (chain of trust) check instead. There is no drop in security - a compromised exact match fingerprint has the same worse case failure. There is increased security in allowing separate long-term CA key and short-term SSL server keys. This also removes loading of the system-default CA files if a custom CA file or certificate fingerprint is specified.
2019-04-06wallet: add number of blocks required for the balance to fully unlockmoneromooo-monero1-3/+3
2019-04-04wallet: new option to start background miningmoneromooo-monero1-0/+9
The setup-background-mining option can be used to select background mining when a wallet loads. The user will be asked the first time the wallet is created.
2019-04-04wallet2: add --no-dns flagmoneromooo-monero1-0/+2
2019-04-02simplewallet: new unset_ring commandmoneromooo-monero1-0/+2
Useful when debugging, though not much for users
2019-04-01wallet: add number of blocks required for the balance to fully unlockmoneromooo-monero1-3/+3
2019-04-01wallet_rpc_server: add a set_daemon RPCmoneromooo-monero1-0/+6
2019-03-27wallet2: factor the watchonly/multisig/etc fields on creationmoneromooo-monero1-0/+1
There's half a dozen calls, and it's easy to miss some when adding a new field.
2019-03-25wallet2: skip derivation precalc for blocks we know we'll skipmoneromooo-monero1-0/+3
2019-03-25Added socks proxy (tor/i2pd/kovri) support to walletLee Clagett1-1/+3
2019-03-22wallet: add freeze/thaw/frozen commandsmoneromooo-monero1-1/+25
These commands let one freeze outputs by key image, so they do not appear in balance, nor are considered when creating a transaction, etc This is helpful when receiving an output from a suspected spy, who might try to track your other outputs by seeing with what other outputs it gets spent. The frozen command may be used without parameters to list all currently frozen outputs.
2019-03-21wallet: fix offline signing calling a daemon RPCmoneromooo-monero1-4/+20
2019-03-21wallet2: sanity check new tx before sendingmoneromooo-monero1-0/+4
We generate and check tx proofs and verify the amounts in those match what the original amounts were.
2019-03-20device/trezor: HF10 support added, wallet::APIDusan Klinec1-11/+16
- import only key images generated by cold signing process - wallet_api: trezor methods added - wallet: button request code added - const added to methods - wallet2::get_tx_key_device() tries to decrypt stored tx private keys using the device. - simplewallet supports get_tx_key and get_tx_proof on hw device using the get_tx_key feature - live refresh enables refresh with trezor i.e. computing key images on the fly. More convenient and efficient for users. - device: has_ki_live_refresh added - a thread is watching whether live refresh is being computed, if not for 30 seconds, it terminates the live refresh process - switches Trezor state
2019-03-17wallet: flush output cache upon reorgmoneromooo-monero1-1/+1
Fixes output usage tracking
2019-03-15wallet: move light wallet RPC out of core RPCmoneromooo-monero1-2/+3
It's not nothing to do with it
2019-03-15wallet: adds rescan_bc option with preserving key imagesDusan Klinec1-1/+5
- enables to perform rescan_spent / ki sync with untrusted daemon. Spent check status involves RPC calls which require trusted daemon status as it leaks information. The new call performs soft reset while preserving key images thus a sequence: refresh, ki sync / import, rescan_bc keep_ki will correctly perform spent checking without need for trusted daemon. - useful to detect spent outputs with untrusted daemon on watch_only / multisig / hw-cold wallets after expensive key image sync. - cli: rescan_bc keep_ki
2019-03-05Update 2019 copyrightbinaryFate1-1/+1
2019-03-05add multisig tx sets to describe_transfer rpc endpointspoke01-0/+1
2019-03-05epee: add SSL supportMartijn Otto1-1/+2
RPC connections now have optional tranparent SSL. An optional private key and certificate file can be passed, using the --{rpc,daemon}-ssl-private-key and --{rpc,daemon}-ssl-certificate options. Those have as argument a path to a PEM format private private key and certificate, respectively. If not given, a temporary self signed certificate will be used. SSL can be enabled or disabled using --{rpc}-ssl, which accepts autodetect (default), disabled or enabled. Access can be restricted to particular certificates using the --rpc-ssl-allowed-certificates, which takes a list of paths to PEM encoded certificates. This can allow a wallet to connect to only the daemon they think they're connected to, by forcing SSL and listing the paths to the known good certificates. To generate long term certificates: openssl genrsa -out /tmp/KEY 4096 openssl req -new -key /tmp/KEY -out /tmp/REQ openssl x509 -req -days 999999 -sha256 -in /tmp/REQ -signkey /tmp/KEY -out /tmp/CERT /tmp/KEY is the private key, and /tmp/CERT is the certificate, both in PEM format. /tmp/REQ can be removed. Adjust the last command to set expiration date, etc, as needed. It doesn't make a whole lot of sense for monero anyway, since most servers will run with one time temporary self signed certificates anyway. SSL support is transparent, so all communication is done on the existing ports, with SSL autodetection. This means you can start using an SSL daemon now, but you should not enforce SSL yet or nothing will talk to you.
2019-03-05device/trezor: debugging features, trezor testsDusan Klinec1-0/+2
2019-03-03wallet2: fix mishandling rct outputs in coinbase txmoneromooo-monero1-1/+1
Reported by cutcoin
2019-02-02epee: add SSL supportmoneromooo-monero1-2/+6
RPC connections now have optional tranparent SSL. An optional private key and certificate file can be passed, using the --{rpc,daemon}-ssl-private-key and --{rpc,daemon}-ssl-certificate options. Those have as argument a path to a PEM format private private key and certificate, respectively. If not given, a temporary self signed certificate will be used. SSL can be enabled or disabled using --{rpc}-ssl, which accepts autodetect (default), disabled or enabled. Access can be restricted to particular certificates using the --rpc-ssl-allowed-certificates, which takes a list of paths to PEM encoded certificates. This can allow a wallet to connect to only the daemon they think they're connected to, by forcing SSL and listing the paths to the known good certificates. To generate long term certificates: openssl genrsa -out /tmp/KEY 4096 openssl req -new -key /tmp/KEY -out /tmp/REQ openssl x509 -req -days 999999 -sha256 -in /tmp/REQ -signkey /tmp/KEY -out /tmp/CERT /tmp/KEY is the private key, and /tmp/CERT is the certificate, both in PEM format. /tmp/REQ can be removed. Adjust the last command to set expiration date, etc, as needed. It doesn't make a whole lot of sense for monero anyway, since most servers will run with one time temporary self signed certificates anyway. SSL support is transparent, so all communication is done on the existing ports, with SSL autodetection. This means you can start using an SSL daemon now, but you should not enforce SSL yet or nothing will talk to you.
2019-01-22add a bulletproof version, new bulletproof type, and rct configmoneromooo-monero1-1/+1
This makes it easier to modify the bulletproof format
2019-01-16wallet2: remember which output keys map to which key imagesmoneromooo-monero1-6/+14
This allows filling in transfer_details when a cold signed tx gets seen in a block next
2019-01-09wallet: do not check txpool in background modemoneromooo-monero1-2/+2
This avoids the constant message about needed to run refresh to enter a password. Also mention the txpool when asking for the password if the reason is a pool tx.
2018-12-31wallet2: speedup output trackingmoneromooo-monero1-3/+4
It can get heavy for large wallets
2018-12-31wallet: optionally keep track of owned outputs usesmoneromooo-monero1-1/+9
2018-12-30wallet: do not display daemon controlled text if untrustedmoneromooo-monero1-0/+3
2018-12-24wallet_rpc_server: add all field to export_key_imagesmoneromooo-monero1-1/+1
To use if you want all key images, not just the ones for recently imported outputs
2018-12-12MMS (Multisig Messaging System): Initial versionrbrunner71-1/+13
2018-12-04device/trezor: ask for KI sync on first refreshDusan Klinec1-1/+6
When doing a first refresh on HW-token based wallet KI sync is required if money were received. Received money may indicate wallet was already used before the restore I.e., some transaction could have been already sent from the wallet. The spent UTXO would not be detected as spent which could lead to double spending errors on submitting a new transaction. Thus if the wallet is HW-token based with the cold signing protocol and the first refresh detected received money the user is asked to perform the key image sync.
2018-12-04device: enable to use multiple independent device walletsDusan Klinec1-0/+4
- adds a new option `--hw-device-deriv-path` to the simple wallet. Enables to specify wallet derivation path / wallet code (path avoided so it can be misinterpreted as a file path). - devices can use different derivation mechanisms. Trezor uses standard SLIP-10 mechanism with fixed SLIP-44 prefix for Monero - Trezor: when empty, the default derivation mechanism is used with 44'/128'/0'. When entered the derivation path is 44'/128'/PATH. - Trezor: the path is always taken as elements are hardened (1<<31 bit turned on)
2018-11-29device/trezor: passphrase entry on hostDusan Klinec1-0/+22
- simple device callback object added. Device can request passphrase/PIN entry via the callback or notify user some action is required - callback is routed to wallet2, which routes the callback to i_wallet_callback so CLI or GUI wallets can support passphrase entry for HW tokens - wallet: device open needs wallet callback first - passphrase protected device needs wallet callback so user can enter passphrase
2018-11-23a few minor (but easy) performance tweaksmoneromooo-monero1-2/+2
Found by codacy.com
2018-11-20Fix issue 4793 - M/N multisig transaction signaturenaughtyfox1-2/+2
2018-11-15Removed a lot of unnecessary includesMartijn Otto1-0/+2
2018-11-04wallet2: only export necessary outputs and key imagesmoneromooo-monero1-6/+18
and disable annoying test that requires ridiculous amounts of skullduggery every time some format changes
2018-11-03wallet: add a non destructive blockchain rescanmoneromooo-monero1-1/+1
2018-11-02device/trezor: trezor support addedDusan Klinec1-2/+20
2018-10-29wallet2: initialize amount to 0 in tx_scan_info_t ctormoneromooo-monero1-1/+1
It seems the more prudent thing to do here. It will not catch attempts to use that value before it is initialized when using ASAN or valgrind, but in a case where it does, it will have smaller repercussions. So it seems appropriate in this particular case. Coverity 182498
2018-10-25simplewallet: display locked/unlocked state in show_transfersmoneromooo-monero1-1/+2
it doesn't display the details, which are already displayed in show_transfer
2018-10-01Arbitrary M/N multisig schemes:naughtyfox1-0/+17
* support in wallet2 * support in monero-wallet-cli * support in monero-wallet-rpc * support in wallet api * support in monero-gen-trusted-multisig * unit tests for multisig wallets creation
2018-10-01wallet: fix --generate-from-json using wrong passwordmoneromooo-monero1-1/+1
2018-09-29Merge pull request #4333Riccardo Spagni1-0/+5
73403004 add --block-notify to monerod and --tx-notify to monero-wallet-{cli,rpc} (moneromooo-monero)
2018-09-29Merge pull request #4458Riccardo Spagni1-1/+1
921b0fb1 use default create_address_file argument (m2049r)
2018-09-19query backing devicem2049r1-2/+4
2018-09-18wallet: add 'outputs' option for sweep_* commandswhythat1-3/+3
'outputs' option allows to specify the number of separate outputs of smaller denomination that will be created by sweep operation. rebased by moneromooo
2018-09-17api/wallet: properly disable key encryptionstoffu1-2/+2
2018-09-14hw_device: support for multiple devices added [for review]Dusan Klinec1-0/+5
- device name is a new wallet property - full device name is now a bit more structured so we can address particular device vendor + device path. Example: 'Ledger', 'Trezor:udp', 'Trezor:udp:127.0.0.1:21324', 'Trezor:bridge:usb01'. The part before ':' identifies HW device implementation, the optional part after ':' is device path to look for. - new --hw-device parameter added to the wallet, can name the hardware device - device reconnect added
2018-09-14wallet: ask-password can now ask without encrypting the secret spend keymoneromooo-monero1-10/+16
2018-09-14remove obsolete daemon selection of fake outs and old tx constructionmoneromooo-monero1-201/+0
2018-09-11v8: per byte fee, pad bulletproofs, fixed 11 ring sizemoneromooo-monero1-13/+11
2018-09-11bulletproofs: add multi output bulletproofs to rctmoneromooo-monero1-2/+2
2018-09-10record blackballs as amount/offset, and add export abilitymoneromooo-monero1-4/+4
2018-09-03wallet2: factor the creation of a new wallet keys filemoneromooo-monero1-1/+3
2018-09-03wallet2: factor new blockchain setupmoneromooo-monero1-0/+2
2018-08-23wallet: store trusted-daemon flag in wallet2stoffu1-20/+24
2018-08-16store secret keys encrypted where possiblemoneromooo-monero1-18/+39
The secret spend key is kept encrypted in memory, and decrypted on the fly when needed. Both spend and view secret keys are kept encrypted in a JSON field in the keys file. This avoids leaving the keys in memory due to being manipulated by the JSON I/O API.
2018-08-16wallet: wipe seed from memory where appropriatemoneromooo-monero1-4/+7
2018-08-16wallet2: make --restricted-rpc available for wallet RPC onlystoffu1-3/+1
2018-08-08wallet: allow adjusting number of rounds for the key derivation functionstoffu1-2/+3
2018-08-03wallet: distinguish coinbase from other txes in show_transfersmoneromooo-monero1-2/+10
2018-07-31wallet-rpc: add get_address_index commandstoffu1-0/+1
2018-07-30simplewallet: add set_tx_key for importing tx keys from 3rd party walletsstoffu1-0/+1
2018-07-16wallet2: recover from index out of hashchain bounds errormoneromooo-monero1-1/+1
This can happen when there's a very large reorg on the daemon (ie, on testnet)
2018-07-08wallet2: ensure outputs are processed only oncemoneromooo-monero1-0/+1
This should be proof against any way one might get to multiple processing, such as generating the same derivation from the same pubkey, etc
2018-07-03wallet2: use a gamma distribution to pick fake outsmoneromooo-monero1-1/+1
as per "An Empirical Analysis of Linkability in the Monero Blockchain", by Miller et al.
2018-07-03wallet2: unlock keys file before calling verify_password (needed for Windows)stoffu1-1/+4
Also added notes to WalletManager::verifyWalletPassword (which afaik seems unused by anyone at the moment) regarding the need to unlock the keys file beforehand.
2018-07-03Allow fractional outputs to be ignoredstoffu1-0/+3
2018-06-28wallet: prevent the same wallet file from being opened by multiple processesstoffu1-0/+1
2018-06-27wallet: include a suggested number of confirmations based on amountmoneromooo-monero1-1/+9
This is based on how much an attacking miner stands to lose in block rewardy by mining a private chain which double spends a payment. This is not foolproof, since mining is based on luck, and breaks down as the attacking miner nears 50% of the network hash rate, and the estimation is based on a constant block reward.
2018-06-26wallet2: cache ringdb key while refreshingmoneromooo-monero1-0/+14
Speeds up syncing with a lot of outgoing outputs as key generation runs Cryptonight.
2018-06-26wallet2: remove old blockchain size cache hackmoneromooo-monero1-2/+1
2018-06-26wallet2: speedup refreshmoneromooo-monero1-2/+20
key derivation and checking for incoming outputs are threaded in batch before adding blocks to the local blockchain. Other minor bits and bobs are also cached.
2018-06-26wallet2: avoid re-parsing blocks when refreshing in a loopmoneromooo-monero1-1/+1
2018-06-26wallet2: parse blocks in the RPC thread, not the processing threadmoneromooo-monero1-2/+10
Processing typically is the bottleneck
2018-06-26replace std::list with std::vector on some hot pathsmoneromooo-monero1-4/+4
also use reserve where appropriate
2018-06-13wallet: on first refresh, start off with a quantized heightmoneromooo-monero1-5/+6
for privacy reasons, so an untrusted node can't easily track wallets from IP address to IP address, etc. The granularity is 1024 blocks, which is about a day and a half.
2018-06-13wallet: allow unspendable unmixable outputs to be discardedstoffu1-0/+1
2018-06-07wallet2: fix bulletproof cold signingmoneromooo-monero1-1/+7
Cold signing was always using Borromean range proofs, causing a larger tx, and an incorrect fee
2018-06-03wallet-rpc: watch-only and cold wallet features addedDusan Klinec1-0/+7
- unsigned_txset, signed_txset in transfer / submit_transfer / sign_transfer - export_outputs, import_outputs Squashed commits: [f4d9f3d4] wallet-rpc: do_not_relay removed from submit_transfer [5b16a86f] wallet-rpc: review-fix - method signature changes, renaming [b7fbb10a] wallet-rpc: naming fixes (unsigned vs signed), consts renamed [8c7d2727] wallet-rpc: sign_transfer added [481d024a] wallet2: sign_tx splitted to work with strings and structs, more granular [2a474db9] wallet-rpc: wallet2::load_unsigned_tx split to load from str, file [b1e3a018] wallet-rpc: review fix, load_tx_from_str variable rename [1f6373be] wallet-rpc: review fix: save_tx_to_{str,file} [2a08eafc] wallet-rpc: review comments fixes - redundant this removed from wallet2.cpp - load_tx_from_str, load_tx_from_file [43498052] wallet-rpc: submit_transfer added [9c45d1ad] wallet-rpc: watch_only check, return unsigned_txset [62831396] wallet2: added string variants to load_tx, save_tx - analogously to save_multisig_tx - required for monero-wallet-rpc to support watch-only wallet
2018-05-15simple-wallet-cli: Add warnings about inaccurate balances to to watch-only ↵jcktm1-0/+1
wallet
2018-04-25Wallet: added methods to sign and verify arbitrary message with multisig ↵naughtyfox1-0/+16
public signer's key (libwallet & wallet api)
2018-03-31wallet: warn if not using the default ring sizemoneromooo-monero1-0/+3
2018-03-28WalletApi: getMultisigInfo entry for gui walletsnaughtyfox1-0/+1
WalletApi: makeMultisig call introduced WalletApi: finalizeMultisig call introduced WalletApi: new calls exportMultisigImages and importMultisigImages WalletApi: method to return multisig wallet creation state WalletApi: create multisig transaction, sign multisig transaction, commit transaction and get multisig data are added WalletApi: identation and style fixes
2018-03-21wallet: catch exceptions dealing with ringdb and warnmoneromooo-monero1-1/+1
2018-03-17wallet: make the segregation height settablemoneromooo-monero1-0/+5
via user setting first, then DNS TXT record, hardcoded fallback
2018-03-16Add command line option allowing to restrict the default sub-address ↵stoffu1-0/+1
lookahead in order to avoid so looooong time of set-up when creating a HW based wallet.
2018-03-16wallet: more user friendly print_ringmoneromooo-monero1-3/+12
It can now take a txid (to display rings for all its inputs), and will print rings in a format that set_ring understands
2018-03-16wallet: add a set_ring commandmoneromooo-monero1-0/+1
This is so one can set rings for spent key images in case the attackers don't merge the ring matching patch set.
2018-03-16wallet: make ringdb an object with database statemoneromooo-monero1-6/+10
2018-03-16wallet: add an output blackball list to avoid using those in ringsmoneromooo-monero1-0/+5
2018-03-16wallet: key reuse mitigation optionsmoneromooo-monero1-0/+6
If a pre-fork output is spent on both Monero and attack chain, any post-fork output can be deduced to be a fake output, thereby decreasing the effective ring size. The segregate-per-fork-outputs option, on by default, allows selecting only pre-fork outputs in this case, so that the same ring can be used when spending it on the other side, which does not decrease the effective ring size. This is intended to be SET when intending to spend Monero on the attack fork, and to be UNSET if not intending to spend Monero on the attack fork (since it leaks the fact that the output being spent is pre-fork). If the user is not certain yet whether they will spend pre-fork outputs on a key reusing fork, the key-reuse-mitigation2 option should be SET instead. If you use this option and intend to spend Monero on both forks, then spend real Monero first.
2018-03-16wallet: add shared ring databasemoneromooo-monero1-1/+16
This maps key images to rings, so that different forks can reuse the rings by key image. This avoids revealing the real inputs like would happen if two forks spent the same outputs with different rings. This database is meant to be shared with all Monero forks which don't bother making a new chain, putting users' privacy at risk in the process. It is placed in a shared data directory by default ($HOME/.shared-ringdb on UNIX like systems). You may use --shared-ringdb-dir to override this location, and should then do so for all Monero forks for them to share the database.
2018-03-16add RPC to get a histogram of outputs of a given amountmoneromooo-monero1-0/+2
2018-03-15wallet2+cli+rpc: eliminate redundant m_http_client from cli/rpc and delegate ↵stoffu1-0/+19
calls to wallet2
2018-03-14wallet2: Update function parameter documentationLeon Klingele1-13/+15
This completes and fixes various parameters docs
2018-03-10wallet2 / simplewallet: Must opt-in to create '.address.txt' files for new ↵Leon Klingele1-20/+24
wallets Previously, a file containing the unencrypted Monero address was created by default in the wallet's directory. This file might pose as a privacy risk. The creation of this file is now opt-in and can be enabled by providing --create-address-file
2018-03-07wallet: fixes and tweaks to the save_watch_only commandmoneromooo-monero1-1/+1
- save the new keys file as FOO-watchonly.keys, not FOO.keys-watchonly - catch any exception (eg, I/O errors) and error out - print the new keys filename in simplewallet
2018-03-05Stagenetstoffu1-5/+6
2018-03-04Code modifications to integrate Ledger HW device into monero-wallet-cli.cslashm1-1/+11
The basic approach it to delegate all sensitive data (master key, secret ephemeral key, key derivation, ....) and related operations to the device. As device has low memory, it does not keep itself the values (except for view/spend keys) but once computed there are encrypted (with AES are equivalent) and return back to monero-wallet-cli. When they need to be manipulated by the device, they are decrypted on receive. Moreover, using the client for storing the value in encrypted form limits the modification in the client code. Those values are transfered from one C-structure to another one as previously. The code modification has been done with the wishes to be open to any other hardware wallet. To achieve that a C++ class hw::Device has been introduced. Two initial implementations are provided: the "default", which remaps all calls to initial Monero code, and the "Ledger", which delegates all calls to Ledger device.
2018-02-16wallet2: remove unused m_subaddresses_invmoneromooo-monero1-2/+2
2018-02-16wallet2: speed up subaddress generation (by about a third)moneromooo-monero1-0/+1
2018-01-28wallet: automatically use low priority if safe (no backlog & recent blocks ↵stoffu1-0/+4
not full)
2018-01-28wallet2: split estimate_backlog to allow for raw fee levelsmoneromooo-monero1-0/+1
2018-01-26Update 2018 copyrightxmr-eric1-1/+1
2018-01-26wallet2: remove {set|get}_default_decimal_point and use the same funcs under ↵stoffu1-2/+0
cryptonote:: instead
2018-01-26wallet2: make scan_output const and omit keys argstoffu1-1/+1
2018-01-26wallet2: make member functions const when possiblestoffu1-17/+17
2018-01-26wallet rpc: show fees when querying incoming transfersstoffu1-1/+8