aboutsummaryrefslogtreecommitdiff
path: root/src/wallet (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2022-07-13derive multisig tx secret keys from an entropy source plus the tx inputs' ↵koe2-0/+12
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 signinganon2-95/+234
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-24wallet2: remove obsolete rpc version checktobtoht1-26/+1
2022-06-20cryptonote_basic: catch crypto api errorsmoneromooo-monero1-1/+2
2022-06-01Remove erraneous commasLuke Parker1-3/+3
2022-06-01Improve consistency between on_money_received and on_money_received_unconfirmedLuke Parker3-7/+10
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-26wallet_api: add scanTransactions functionselsta3-0/+44
2022-05-17disable multisig by defaultmoneromooo-monero5-1/+48
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 City4-5/+58
3.3 seconds -> 2.8 seconds on a test case
2022-05-13wallet2: speedup large tx construction: batch ringdb updatesCrypto City4-5/+30
5.2 seconds -> 4.1 seconds on a test case
2022-05-13wallet2: speedup large tx construction: cache public key validitymoneromooo-monero2-28/+36
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 ↵koe2-4/+8
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-berman3-136/+220
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-monero5-36/+80
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-09Remove /includeJeffrey1-1/+0
* `IWallet.h` hasn't been touched since 2014, and has been replaced by `src/wallet/api/wallet2_api.h` * `INode.h` is in a similar situation with `src/p2p/net_node.h`
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-monero3-38/+50
2022-03-29wallet2: decrease the amount of data exchanged for output exportmoneromooo-monero2-10/+167
2022-03-13wallet_rpc_server: support regex for get_accounts tagreemuru2-3/+13
This commit adds a 'regexp' boolean field to the get_accounts request. The flag is set to false by default and maintains backwards compatibility. When set to true the user can search tags by regular expression filters. An additional error message was added for failed regular expression searches. Bump minor version to 25.
2022-03-11wallet_rpc_server: fix make_integrated_address with no payment idmoneromooo-monero1-6/+0
2022-03-10Make the wallet name optional when locked.Norman Moeschter2-0/+10
2022-03-04Copyright: Update to 2022mj-xmr42-42/+48
2022-03-01wallet2: update stagenet rollback blocksselsta1-4/+4
2022-02-22multisig key exchange update and refactorkoe7-574/+164
2022-01-31Balance includes unconfirmed transfers to selfwoodser1-0/+13
2022-01-17support authentication in monero-wallet-rpc set_daemonwoodser2-2/+10
2021-12-24wallet inits cache if file and blob missingwoodser1-4/+5
2021-11-30`make_uri` disallows standalone payment idswoodser1-6/+2
2021-11-05Avoid unnecessary 'Invalid hashing blob' error messagerbrunner71-1/+6
2021-10-22wallet_api: enable set_strict_default_file_permissionstobtoht2-1/+6
2021-10-22epee: add missing headerselsta1-0/+1
2021-10-20wallet2: remove 2 unused variablesselsta1-2/+0
2021-10-19wallet2: fix key encryption when changing ask-password from 0/1 to 2moneromooo-monero2-23/+4
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-10-01wallet2: keep around transaction prefix for confirmed transferstobtoht1-2/+5
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-09-07UB: Not calling virtual method in destructor of WalletImplmj-xmr1-1/+1
2021-08-28wallet: fix unused lambda capture warningselsta1-1/+1
2021-08-27wallet_rpc_server: fix help text remaining boldselsta1-1/+2
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 II4-4/+19
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-19wallet_api: add make_uritobtoht3-0/+7
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-08-02Fix describe_transfer for multiple txes in a txsetAlex Opie2-10/+54
This ensures each list of recipients is only the recipients for one transaction. It also adds a new field "summary" that describes the txset as a whole. Fixes #7344
2021-07-19wallet_api: expose offline mode statusrating89us3-0/+7
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-07-13cmake: fix undefined symbols and multiple definitionsanon1-0/+3
2021-07-05wallet_api: getPasswordtobtoht3-0/+7
2021-06-24wallet_api: get bytes sent/receivedtobtoht3-0/+19
2021-06-23wallet_api: fix typo in exportKeyImagesselsta1-1/+1
2021-06-15provide key images of spent outputs in wallet rpcwoodser3-9/+39
2021-06-08wallet/api: remove Bitmonero namespace aliasselsta16-38/+0
2021-06-08wallet_api: address_book: don't lose pid on setDescriptiontobtoht1-1/+1
2021-06-04wallet2: refresh: check error and throw before potentially breaking out of looptobtoht1-8/+9
2021-06-04wallet_api: signMessage: add sign with subaddresstobtoht3-4/+19
2021-06-04wallet_api: reconnectDevicetobtoht3-0/+21
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-06-04wallet_api: move adjust_mixin call within try blocktobtoht1-8/+3
2021-05-18support freeze, thaw, and frozen in wallet rpcwoodser3-1/+154
2021-05-14CMake: glob missing headers for wallet2mj-xmr1-12/+1
2021-04-27cmake: wallet_api doesn't need wallet_mergedselsta1-41/+0
2021-04-25Wallet2: Update 'approximate_testnet_rolled_back_blocks'rbrunner71-1/+1
2021-04-23wallet2: Fix rescan_bc keep_ki optionNathan Dorfman2-22/+27
2021-04-22wallet_api: import / export output functiontobtoht3-0/+77
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 Wirrick5-7/+24
2021-04-05expose set_offline to wallet apibenevanoff3-0/+12
2021-03-28Reduce compilation time of epee/portable_storage_template_helper.hmj-xmr3-2/+3
2021-03-25wallet2: fix unlocked mixup in light wallet modemoneromooo-monero1-2/+2
2021-03-12wallet_api: add isDeterministic()tobtoht3-0/+12
2021-03-12wallet_api: add seed_offset param to seed()tobtoht3-4/+4
2021-03-06wallet_rpc_server: set seed language in generate_from_keysmoneromooo-monero2-18/+16
Also sanity check language name
2021-03-05fix serialization being different on macmoneromooo-monero3-11/+21
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-03-04return output key for incoming transfersbenevanoff2-1/+4
2021-03-01wallet_rpc: add scan_txtobtoht3-1/+58
2021-02-20wallet_rpc_payments: implement multithreadinggdmojo2-38/+55
2021-02-17monero-wallet-cli: Added command scan_txHoria Mihai David2-0/+44
To implement this feature, the wallet2::scan_tx API was implemented.
2021-02-09Remove unused variables in monero codebaseKevin Barbour4-14/+5
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-02-06Reduce compilation time of epee/portable_storage.hmj-xmr2-0/+3
2021-01-28Remove copies from foreach loops (thanks to Clang)Lee Clagett1-1/+1
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 Clagett3-33/+13
2021-01-07wallet_rpc_server: don't abort on initial refresh failurexiphon1-1/+8
2021-01-02wallet_api: store fee for incoming txs in historyBen Evanoff1-0/+1
2020-12-25wallet api: allow wallet to fetch all key images via apibenevanoff3-4/+5
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-10simplewallet: don't complain about connecting to the daemon when offlinemoneromooo-monero1-0/+1
2020-12-03wallet2: set propagation timeout to current max timeoutselsta1-1/+2
2020-11-28Allow tx note edits via TransactionHistory object in wallet/apidsc3-0/+13
2020-11-24wallet2: check imported multisig curve points are in main subgroupCrypto City1-0/+14
2020-11-14wallet_api: TransactionHistory - fill unconfirmed out payments destsxiphon1-0/+4
2020-11-06Balance includes unconfirmed paymentswoodser1-0/+8
2020-10-18wallet2: wait for propagation timeout before marking tx as failedxiphon1-2/+6
2020-10-17wallet2_api: implement stop() to interrupt refresh() loop oncexiphon3-0/+11
2020-10-13wallet2: skip reorgs exceeding max-reorg-depth wallet settingxiphon3-0/+35
2020-10-12wallet2: fix missing m_state field in wallet serializationmoneromooo-monero1-1/+3
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-19Extend TransactionInfo with coinbase and description attributes in wallet/apidsc4-0/+23
2020-09-19Allow AddressBook description edits via wallet/api interfacedsc3-0/+21
2020-09-15wallet2: adapt to deterministic unlock timeTheCharlatan4-18/+44
2020-09-12wallet2: fix tx sanity check triggering on pre-rct outputsmoneromooo-monero2-4/+9
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 Noether4-29/+42
2020-08-28wallet: allow signing a message with spend or view keymoneromooo-monero6-25/+122
2020-08-27Integrate CLSAGs into moneromoneromooo-monero3-31/+66
They are allowed from v12, and MLSAGs are rejected from v13.
2020-08-17Revert "Use domain-separated ChaCha20 for in-memory key encryption"luigi11112-27/+0
This reverts commit 921dd8dde5d381052d0aa2936304a3541a230c55.
2020-08-17replace most boost serialization with existing monero serializationmoneromooo-monero6-107/+527
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-monero2-2/+12
The tx key derivation is different then
2020-08-09Use domain-separated ChaCha20 for in-memory key encryptionSarang Noether2-0/+27
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 configurationxiphon7-40/+41
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-24[master] MMS: New 'config_checksum' subcommandrbrunner72-25/+79
2020-05-19wallet2: fix multisig data clearing stomping on a vectormoneromooo-monero1-1/+1
2020-05-17wallet_rpc_server: use unlock_time in suggested confirmations calcmoneromooo-monero1-5/+17
2020-05-13simplewallet: don't complain about incoming payment ids on changemoneromooo-monero3-4/+19
2020-05-11remove double includessumogr1-1/+0
2020-05-06Update copyright year to 2020SomaticFanatic35-35/+35
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-monero2-3/+17
2020-04-27trezor: adapt to new passphrase mechanismDusan Klinec4-9/+15
- 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-27message_store: don't print an error when there is no mms filemoneromooo-monero1-1/+1
It confuses people
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-monero4-20/+38
2020-04-15Allow wallet2.h to run in WebAssemblywoodser9-158/+251
- 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-monero2-3/+13
2020-04-02wallet_api: checkUpdate - optional version and buildtag paramsxiphon2-7/+19
2020-04-01Hash domain separationSarang Noether2-10/+5
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-monero2-2/+26
2020-02-11wallet2_api: wallet recovery - seed offset passphrase supportxiphon5-6/+14
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-monero5-135/+63
2020-01-25wallet2_api: implement estimateTransactionFeexiphon5-14/+45
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 failurexiphon2-2/+45
2020-01-11Wallet: Distingush amounts for a single subaddressTadeas Moravec4-2/+38
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-09ringdb: use a different iv for key and data in rings tablemoneromooo-monero1-18/+37
This is technically a record encrypted in two pieces, so the iv needs to be different. Some backward compatibility is added to read data written by existing code, but new data is written with the new code.
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-monero4-5/+23
2019-12-30wallet: fix exceptions getting the hash of a pruned txmoneromooo-monero3-11/+11
2019-12-17wallet2: guard against race with multiple decrypt_keys usersmoneromooo-monero2-0/+9
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-16wallet-cli/rpc: allow sweep_all to use outputs in all subaddresses within an ↵stoffu2-2/+15
account
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-12-01remove unused variable 'ptx' from on_describe_transfer()woodser1-1/+0
2019-11-28wallet2: better error when restoring a wallet with the wrong keysmoneromooo-monero1-1/+1
2019-11-27node_rpc_proxy: init some new rpc payment fields in invalidatemoneromooo-monero1-0/+4
The cache time would take care of these, but it's cleaner that way Coverity 205412
2019-11-22wallet_rpc_server: add count parameter to create_addressMatt Smith2-7/+33
2019-11-19wallet: don't issue node rpc proxy requests in '--offline' modexiphon1-0/+1
2019-11-14wallet: set non-empty error string on connection failurexiphon1-1/+1
2019-11-09build: fix IOS, build blockchain_db and rpc, skip wallet_rpc_serverxiphon1-32/+33
2019-11-06wallet_rpc_server: new estimate_tx_size_and_weight RPCmoneromooo-monero5-0/+72
2019-11-05wallet2: don't try to lock an empty filenamemoneromooo-monero1-0/+6
2019-11-05wallet_rpc_server: add tx weight in transfer commands responsesmoneromooo-monero3-7/+18
2019-11-04wallet2: fix pool txes not being flushed when minedmoneromooo-monero1-1/+1
2019-11-01wallet: reuse cached height when set after refreshmoneromooo-monero2-0/+11
Refreshing sets cached height, which is otherwise got by calling get_info. Since get_info is called upon needing to display a prompt after a command has finished, it can be used to determine how much time a given command took to run if the cache timeout lapses while the command runs. Refreshing caches the height as a side effect, so get_info will never be called as a result of displaying a prompt after refreshing (and potentially leaking how much time it took to process a set of transactions, therefore leaking whether we got some monero in them).
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-monero3-13/+40
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-monero2-7/+17
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-monero2-3/+23
protects against having your keys mangled
2019-10-27wallet: do not warn if the rpc cost was freemoneromooo-monero1-1/+1
2019-10-27wallet: do not warn if the rpc cost was freemoneromooo-monero1-1/+1
2019-10-25simplewallet: add public_nodes commandmoneromooo-monero2-0/+23
Lists nodes exposing their RPC port for public use
2019-10-25daemon, wallet: new pay for RPC use systemmoneromooo-monero11-324/+1001
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-24changed 'batttery' to 'battery'Jake Hemmerle1-2/+2
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