Commit Graph

576 Commits

Author SHA1 Message Date
xmr-eric
e20e489a64 Better definite article use 2017-12-17 12:33:43 -05:00
moneromooo-monero
98db7ee467
wallet: factor multisig info parsing 2017-12-17 16:12:44 +00:00
moneromooo-monero
31a97e761e
wallet: use raw encrypted data in multisig import/export RPC 2017-12-17 16:12:41 +00:00
moneromooo-monero
e36f5b6021
Match surae's recommendation to derive multisig keys 2017-12-17 16:12:32 +00:00
moneromooo-monero
dffa0dceaf
simplewallet: add export_raw_multisig command
It exports raw transactions, so they may be used by other tools,
for instance to be relayed to the network externally.
2017-12-17 16:12:24 +00:00
moneromooo-monero
7f4c220b70
simplewallet: add multisig to wallet type in wallet_info output 2017-12-17 16:12:21 +00:00
moneromooo-monero
265290388b
wallet: guard against partly initialized multisig wallet 2017-12-17 16:12:18 +00:00
moneromooo-monero
66e34e85b1
add multisig core test and factor multisig building blocks 2017-12-17 16:12:15 +00:00
moneromooo-monero
f4eda44ce3
N-1/N multisig 2017-12-17 16:12:12 +00:00
moneromooo-monero
fff871a455
gen_multisig: generates multisig wallets if participants trust each other 2017-12-17 16:12:06 +00:00
moneromooo-monero
4c313324b1
Add N/N multisig tx generation and signing
Scheme by luigi1111:

    Multisig for RingCT on Monero

    2 of 2

    User A (coordinator):
    Spendkey b,B
    Viewkey a,A (shared)

    User B:
    Spendkey c,C
    Viewkey a,A (shared)

    Public Address: C+B, A

    Both have their own watch only wallet via C+B, a

    A will coordinate spending process (though B could easily as well, coordinator is more needed for more participants)

    A and B watch for incoming outputs

    B creates "half" key images for discovered output D:
    I2_D = (Hs(aR)+c) * Hp(D)

    B also creates 1.5 random keypairs (one scalar and 2 pubkeys; one on base G and one on base Hp(D)) for each output, storing the scalar(k) (linked to D),
    and sending the pubkeys with I2_D.

    A also creates "half" key images:
    I1_D = (Hs(aR)+b) * Hp(D)

    Then I_D = I1_D + I2_D

    Having I_D allows A to check spent status of course, but more importantly allows A to actually build a transaction prefix (and thus transaction).

    A builds the transaction until most of the way through MLSAG_Gen, adding the 2 pubkeys (per input) provided with I2_D
    to his own generated ones where they are needed (secret row L, R).

    At this point, A has a mostly completed transaction (but with an invalid/incomplete signature). A sends over the tx and includes r,
    which allows B (with the recipient's address) to verify the destination and amount (by reconstructing the stealth address and decoding ecdhInfo).

    B then finishes the signature by computing ss[secret_index][0] = ss[secret_index][0] + k - cc[secret_index]*c (secret indices need to be passed as well).

    B can then broadcast the tx, or send it back to A for broadcasting. Once B has completed the signing (and verified the tx to be valid), he can add the full I_D
    to his cache, allowing him to verify spent status as well.

    NOTE:
    A and B *must* present key A and B to each other with a valid signature proving they know a and b respectively.
    Otherwise, trickery like the following becomes possible:
    A creates viewkey a,A, spendkey b,B, and sends a,A,B to B.
    B creates a fake key C = zG - B. B sends C back to A.
    The combined spendkey C+B then equals zG, allowing B to spend funds at any time!
    The signature fixes this, because B does not know a c corresponding to C (and thus can't produce a signature).

    2 of 3

    User A (coordinator)
    Shared viewkey a,A
    "spendkey" j,J

    User B
    "spendkey" k,K

    User C
    "spendkey" m,M

    A collects K and M from B and C
    B collects J and M from A and C
    C collects J and K from A and B

    A computes N = nG, n = Hs(jK)
    A computes O = oG, o = Hs(jM)

    B anc C compute P = pG, p = Hs(kM) || Hs(mK)
    B and C can also compute N and O respectively if they wish to be able to coordinate

    Address: N+O+P, A

    The rest follows as above. The coordinator possesses 2 of 3 needed keys; he can get the other
    needed part of the signature/key images from either of the other two.

    Alternatively, if secure communication exists between parties:
    A gives j to B
    B gives k to C
    C gives m to A

    Address: J+K+M, A

    3 of 3

    Identical to 2 of 2, except the coordinator must collect the key images from both of the others.
    The transaction must also be passed an additional hop: A -> B -> C (or A -> C -> B), who can then broadcast it
    or send it back to A.

    N-1 of N

    Generally the same as 2 of 3, except participants need to be arranged in a ring to pass their keys around
    (using either the secure or insecure method).
    For example (ignoring viewkey so letters line up):
    [4 of 5]
    User: spendkey
    A: a
    B: b
    C: c
    D: d
    E: e

    a -> B, b -> C, c -> D, d -> E, e -> A

    Order of signing does not matter, it just must reach n-1 users. A "remaining keys" list must be passed around with
    the transaction so the signers know if they should use 1 or both keys.
    Collecting key image parts becomes a little messy, but basically every wallet sends over both of their parts with a tag for each.
    Thia way the coordinating wallet can keep track of which images have been added and which wallet they come from. Reasoning:
    1. The key images must be added only once (coordinator will get key images for key a from both A and B, he must add only one to get the proper key actual key image)
    2. The coordinator must keep track of which helper pubkeys came from which wallet (discussed in 2 of 2 section). The coordinator
    must choose only one set to use, then include his choice in the "remaining keys" list so the other wallets know which of their keys to use.

    You can generalize it further to N-2 of N or even M of N, but I'm not sure there's legitimate demand to justify the complexity. It might
    also be straightforward enough to support with minimal changes from N-1 format.
    You basically just give each user additional keys for each additional "-1" you desire. N-2 would be 3 keys per user, N-3 4 keys, etc.

The process is somewhat cumbersome:

To create a N/N multisig wallet:

 - each participant creates a normal wallet
 - each participant runs "prepare_multisig", and sends the resulting string to every other participant
 - each participant runs "make_multisig N A B C D...", with N being the threshold and A B C D... being the strings received from other participants (the threshold must currently equal N)

As txes are received, participants' wallets will need to synchronize so that those new outputs may be spent:

 - each participant runs "export_multisig FILENAME", and sends the FILENAME file to every other participant
 - each participant runs "import_multisig A B C D...", with A B C D... being the filenames received from other participants

Then, a transaction may be initiated:

 - one of the participants runs "transfer ADDRESS AMOUNT"
 - this partly signed transaction will be written to the "multisig_monero_tx" file
 - the initiator sends this file to another participant
 - that other participant runs "sign_multisig multisig_monero_tx"
 - the resulting transaction is written to the "multisig_monero_tx" file again
 - if the threshold was not reached, the file must be sent to another participant, until enough have signed
 - the last participant to sign runs "submit_multisig multisig_monero_tx" to relay the transaction to the Monero network
2017-12-17 16:11:57 +00:00
moneromooo-monero
6d219a9250
wallet: add multisig key generation
Scheme by luigi1111
2017-12-17 16:11:53 +00:00
Riccardo Spagni
b88f0879b5
Merge pull request #2873
1c838552 Simplewallet.cpp: Fewer pleases in seed NOTE (xmr-eric)
3f18c642 Fix password capitalization mismatch (xmr-eric)
2017-12-16 23:25:43 +02:00
Riccardo Spagni
6c0953b15a
Merge pull request #2860
3dffe71b new wipeable_string class to replace std::string passphrases (moneromooo-monero)
7a2a5741 utils: initialize easylogging++ in on_startup (moneromooo-monero)
54950829 use memwipe in a few relevant places (moneromooo-monero)
000666ff add a memwipe function (moneromooo-monero)
2017-12-16 23:19:27 +02:00
moneromooo-monero
f5bc7f1855
simplewallet: fix default unspent_outputs output with subaddresses
If no subaddress index is given, consider all of them
2017-12-13 10:09:42 +00:00
Tobias Hoffmann
3af19c8011 set_node command, allows setting node without restart 2017-12-06 18:16:50 +01:00
Riccardo Spagni
81fb832082
Merge pull request #2833
b0426d4c Fixes #759 Add sanity check on restore height (Cifrado)
2017-12-02 09:25:53 +02:00
Riccardo Spagni
63f0031965
Merge pull request #2853
c0ae52c0 simplewallet: prevent (wrong) integrated adresses on accounts > 0 (moneromooo-monero)
2017-12-02 09:24:53 +02:00
xmr-eric
1c838552ed Simplewallet.cpp: Fewer pleases in seed NOTE
Monero.ts: Fewer pleases in seed NOTE

Monero_it.ts: Fewer pleases in seed NOTE

Monero_fr.ts: Fewer pleases in seed NOTE
2017-11-28 11:41:26 -05:00
moneromooo-monero
3dffe71b72
new wipeable_string class to replace std::string passphrases 2017-11-27 22:25:57 +00:00
Cifrado
287dde63d8 Added command descriptions 2017-11-26 10:37:37 +01:00
Riccardo Spagni
ac261d0d87
Merge pull request #2825
ac5cd865 simplewallet: fix typo in incoming monero message (moneromooo-monero)
2017-11-25 19:53:58 +02:00
Riccardo Spagni
a7211b5a07
Merge pull request #2822
93c33985 simplewallet: translate ring size 0 to mixin 0 (default values) (moneromooo-monero)
2017-11-25 19:52:52 +02:00
Riccardo Spagni
eefd6a7878
Merge pull request #2796
b42ee213 Wallet: update ring size in outdated error msgs with set_default_ring_size (binaryFate)
2017-11-25 19:49:48 +02:00
Riccardo Spagni
539f511eb1
Merge pull request #2368
b0b7e0f0 Spend proof without txkey (stoffu)
2017-11-25 19:48:56 +02:00
moneromooo-monero
c0ae52c081
simplewallet: prevent (wrong) integrated adresses on accounts > 0 2017-11-22 16:20:11 +00:00
stoffu
b0b7e0f09a
Spend proof without txkey 2017-11-21 16:49:16 +09:00
stoffu
be1c01298a
fix for tx proof: use exception instead of error_str when signature gen failed 2017-11-21 16:48:22 +09:00
stoffu
998777ecd7
Tx proof (revised):
- refactoring: proof generation/checking code was moved from simplewallet.cpp to wallet2.cpp
- allow an arbitrary message to be signed together with txid
- introduce two types (outbound & inbound) of tx proofs; with the same syntax, inbound is selected when <address> belongs to this wallet, outbound otherwise. see GitHub thread for more discussion
- wallet RPC: added get_tx_key, check_tx_key, get_tx_proof, check_tx_proof
- wallet API: moved WalletManagerImpl::checkPayment to Wallet::checkTxKey, added Wallet::getTxProof/checkTxProof
- get_tx_key/check_tx_key: handle additional tx keys by concatenating them into a single string
2017-11-18 20:44:27 +09:00
Cifrado
b0426d4cf2 Fixes #759 Add sanity check on restore height 2017-11-17 08:35:59 +01:00
moneromooo-monero
ac5cd865b2
simplewallet: fix typo in incoming monero message 2017-11-15 17:52:37 +00:00
moneromooo-monero
93c3398503 simplewallet: translate ring size 0 to mixin 0 (default values)
Avoids turning it to a huge number
2017-11-15 15:07:10 +00:00
stoffu
c4587e83f8
simplewallet: wrong ns for input_line in sweep_single (fix #2634) 2017-11-15 20:45:58 +09:00
stoffu
b738f4b59d
wallet: add sweep_single command 2017-11-15 17:51:54 +09:00
Howard Chu
29cee4ec4f
Fix 383ff4f689
Missed a crypto::null_pkey in PR#2629
2017-11-14 20:36:21 +00:00
Howard Chu
b85e82bf6a
Fix e89994e98f
Missed an input_line() change
2017-11-14 20:34:32 +00:00
Riccardo Spagni
0c4df51bbb
Merge pull request #2765
fc85d7a9 simplewallet: fix in show_transfer passing wrong arg to wallet2::get_payments etc (stoffu)
2017-11-14 22:16:37 +02:00
Riccardo Spagni
edebe4e3b6
Merge pull request #2736
0d9c0db9 Do not build against epee_readline if it was not built (Howard Chu)
178014c9 split off readline code into epee_readline (moneromooo-monero)
a9e14a19 link against readline only for monerod and wallet-wallet-{rpc,cli} (moneromooo-monero)
437421ce wallet: move some scoped_message_writer calls from the libs (moneromooo-monero)
e89994e9 wallet: rejig to avoid prompting in wallet2 (moneromooo-monero)
ec5135e5 move input_line from command_line to simplewallet (moneromooo-monero)
082db75f move cryptonote command line options to cryptonote_core (moneromooo-monero)
2017-11-14 21:31:51 +02:00
Riccardo Spagni
41a8bf4f4c
Merge pull request #2636
ad03f778 simplewallet: factor transfer related exception handling (moneromooo-monero)
2017-11-14 21:30:25 +02:00
Riccardo Spagni
5de492be40
Merge pull request #2629
383ff4f6 remove "using namespace std" from headers (moneromooo-monero)
2017-11-14 21:29:49 +02:00
moneromooo-monero
437421ce42
wallet: move some scoped_message_writer calls from the libs 2017-11-14 17:06:29 +00:00
moneromooo-monero
e89994e98f
wallet: rejig to avoid prompting in wallet2
wallet2 is a library, and should not prompt for stdin. Instead,
pass a function so simplewallet can prompt on stdin, and a GUI
might display a window, etc.
2017-11-14 17:06:26 +00:00
moneromooo-monero
ec5135e5b7
move input_line from command_line to simplewallet
It was only used there, and this removes one part of the common
dependency on libreadline
2017-11-14 17:06:23 +00:00
moneromooo-monero
ad03f77856
simplewallet: factor transfer related exception handling
This ensures they don't go out of sync when adding/changing them,
and makes the code easier to deal with.
2017-11-14 17:00:39 +00:00
moneromooo-monero
383ff4f689
remove "using namespace std" from headers
It's nasty, and actually breaks on Solaris, where if.h fails to
build due to:

  struct map *if_memmap;
2017-11-14 16:56:10 +00:00
stoffu
fc85d7a998
simplewallet: fix in show_transfer passing wrong arg to wallet2::get_payments etc 2017-11-15 00:25:17 +09:00
Riccardo Spagni
95c34e17cd
Merge pull request #2750
424852a6 Fix 'sweep_all' command when called with no args (Leon Klingele)
2017-11-14 15:49:15 +02:00
Riccardo Spagni
1e874186b3
Merge pull request #2747
37e1fd94 simplewallet: mark the active account in print_accounts (moneromooo-monero)
2017-11-14 15:32:29 +02:00
Riccardo Spagni
55603627c9
Merge pull request #2745
6cf33446 Remove wallet dependency on p2p (moneromooo-monero)
2017-11-14 15:31:40 +02:00
moneromooo-monero
2677ade502
simplewallet: forbid 0 ring size
It'd be interpreted as a huge one (~0 fake outs)
2017-11-14 13:12:42 +00:00
moneromooo-monero
da8b60cbbf
simplewallet: reject attempts to use too low mixin early
This yields a clear error message rather then some possibly
confusing more technical errors down the line
2017-11-14 13:12:39 +00:00
Riccardo Spagni
f4fded6fcf
Merge pull request #2683
105425b7 simplewallet: reject invalid argument for boolean parameter (stoffu)
2017-11-14 15:04:15 +02:00
Riccardo Spagni
f1ca1f35d1
Merge pull request #2682
8ddcf1e7 simplewallet: remove XMR mentions (moneromooo-monero)
2017-11-14 15:03:15 +02:00
Riccardo Spagni
395025bb23
Merge pull request #2633
ad96c478 wallet-cli: added --generate-from-spend-key option (stoffu)
2017-11-14 14:56:07 +02:00
stoffu
105425b7f6
simplewallet: reject invalid argument for boolean parameter 2017-11-14 16:33:17 +09:00
stoffu
ad96c478b1
wallet-cli: added --generate-from-spend-key option 2017-11-14 16:30:59 +09:00
binaryFate
b42ee213e8 Wallet: update ring size in outdated error msgs with set_default_ring_size 2017-11-13 09:53:18 +01:00
moneromooo-monero
ccf53a566c
track double spending in the txpool
Transactions in the txpool are marked when another transaction
is seen double spending one or more of its inputs.
This is then exposed wherever appropriate.

Note that being marked with this "double spend seen" flag does
NOT mean this transaction IS a double spend and will never be
mined: it just means that the network has seen at least another
transaction spending at least one of the same inputs, so care
should be taken to wait for a few confirmations before acting
upon that transaction (ie, mostly of use for merchants wanting
to accept unconfirmed transactions).
2017-11-06 00:05:44 +00:00
Riccardo Spagni
3dd31d33fa
Merge pull request #2605
b370ef54 Wallet: Descriptions through new commands 'set_description', 'get_description' (rbrunner7)
2017-11-06 01:56:06 +02:00
Riccardo Spagni
f960ef9454
Merge pull request #2595
8041b4e9 wallet-cli: allow priority argument for sweep_all and donate (stoffu)
2017-11-06 01:55:15 +02:00
stoffu
8041b4e901
wallet-cli: allow priority argument for sweep_all and donate 2017-11-04 12:11:04 +09:00
Leon Klingele
424852a627
Fix 'sweep_all' command when called with no args
Executing 'sweep_all' with no arguments segfaulted before.
2017-11-03 04:52:26 +01:00
moneromooo-monero
37e1fd94d5
simplewallet: mark the active account in print_accounts 2017-11-02 23:46:12 +00:00
moneromooo-monero
6cf3344605
Remove wallet dependency on p2p 2017-11-02 16:13:24 +00:00
moneromooo-monero
8ddcf1e714
simplewallet: remove XMR mentions
They are actually wrong if the wallet is setup in a different
denomination, and it's incursion of extrinsic lingo where monero
fits perfectly in the first place.
2017-10-19 13:10:29 +01:00
rbrunner7
b370ef54b9 Wallet: Descriptions through new commands 'set_description', 'get_description' 2017-10-16 22:24:09 +02:00
binaryFate
b2d416f211 Distinguish "not enough money" and "not enough unlocked money"
Fix #1530
2017-10-16 15:14:09 +02:00
Riccardo Spagni
73f0c16743
Merge pull request #2606
4090e8c6 simplewallet: add get/set for refresh-from-height (moneromooo-monero)
2017-10-15 18:51:11 +02:00
Riccardo Spagni
50f0c1f0e0
Merge pull request #2586
7b8d3ec6 wallet-cli: add --do-not-relay option (stoffu)
2017-10-15 18:37:38 +02:00
Riccardo Spagni
1039b5e813
Merge pull request #2569
b5b4abb8 simplewallet: fix setting default-ring-size to 0 (moneromooo-monero)
2017-10-15 18:32:41 +02:00
Riccardo Spagni
d316b3d266
Merge pull request #2554
d74336d5 wallet: encrypt (un)signed tx, also optionally save unencrypted raw tx hexstr (stoffu)
2017-10-15 17:32:30 +02:00
Riccardo Spagni
62629541a5
Merge pull request #2550
735fafec simplewallet: allow 1/yes/y as well as true for start_mining options (moneromooo-monero)
2017-10-15 17:31:14 +02:00
Riccardo Spagni
ce1016254a
Merge pull request #2549
bf2d9113 simplewallet: fix --restore-from-height being ignored (moneromooo-monero)
2017-10-15 17:30:53 +02:00
moneromooo-monero
4090e8c6e5
simplewallet: add get/set for refresh-from-height 2017-10-08 10:14:44 +01:00
kenshi84
53ad5a0f42
Subaddresses 2017-10-07 13:06:21 +09:00
stoffu
7b8d3ec6ba
wallet-cli: add --do-not-relay option 2017-10-07 12:46:09 +09:00
stoffu
d74336d5c9
wallet: encrypt (un)signed tx, also optionally save unencrypted raw tx hexstr 2017-10-07 12:45:32 +09:00
Riccardo Spagni
c58ec8cdc1
Merge pull request #2468
986d03d4 simplewallet: allow to set threshold before warning about tx backlog (selsta)
2017-10-06 22:50:41 +04:00
moneromooo-monero
b5b4abb8a6
simplewallet: fix setting default-ring-size to 0
It'd be set to the current wallet default instead
2017-10-03 11:45:02 +01:00
Riccardo Spagni
5f430cedd8
Merge pull request #2515
c34093db simplewallet: add privacy warning when using an untrusted demon (moneromooo-monero)
2017-10-02 23:30:20 +04:00
Riccardo Spagni
3bab2676ec
Merge pull request #2512
792ba4f0 Log categories can now be added to and removed from (moneromooo-monero)
48f92eb6 easylogging++: add categories getter (moneromooo-monero)
f35afe62 epee: factor log level/categories setting (moneromooo-monero)
2017-10-02 23:28:59 +04:00
selsta
986d03d4b2 simplewallet: allow to set threshold before warning about tx backlog 2017-10-02 21:23:33 +02:00
moneromooo-monero
735fafecb0
simplewallet: allow 1/yes/y as well as true for start_mining options
Also mention those options in the start_mining help line
2017-09-29 19:17:25 +01:00
moneromooo-monero
bf2d911365
simplewallet: fix --restore-from-height being ignored 2017-09-29 19:06:14 +01:00
moneromooo-monero
5d65a75b69
move checkpoints in a separate library 2017-09-25 21:16:26 +01:00
Riccardo Spagni
0e74777071
Merge pull request #2452
0aaaca29 tx_pool: set the "invalid input" bit when check_tx_inputs fails (moneromooo-monero)
9236823b simplewallet: print tx rejection reason where it was missing (moneromooo-monero)
3dee3301 core_rpc_server: print tx rejection reason at L0 too (moneromooo-monero)
2017-09-25 16:53:07 +02:00
moneromooo-monero
4230876b31
simplewallet: guard against I/O exceptions
CID 175308
2017-09-25 15:48:06 +01:00
Riccardo Spagni
c6306e75e7
Merge pull request #2257
651baaec wallet: add encrypted seed functionality (moneromooo-monero)
2017-09-25 16:37:17 +02:00
moneromooo-monero
c34093db58
simplewallet: add privacy warning when using an untrusted demon 2017-09-22 22:19:22 +01:00
moneromooo-monero
792ba4f0fe
Log categories can now be added to and removed from
Also, set_log without parameters now prints the log categories
2017-09-22 18:08:14 +01:00
Riccardo Spagni
8f1f43163a
Merge pull request #2412
81fb2f53 Silence more stupid gcc warnings (Howard Chu)
2017-09-20 21:37:40 +02:00
Riccardo Spagni
72207fd27a
Merge pull request #2381
840aed1c monero-wallet-cli: New command 'wallet_info' improved (rbrunner7)
9bdd985c monero-wallet-cli: New command 'wallet_info' (rbrunner7)
2017-09-20 21:34:48 +02:00
moneromooo-monero
9236823bf4
simplewallet: print tx rejection reason where it was missing 2017-09-16 10:33:42 +01:00
moneromooo-monero
651baaec46
wallet: add encrypted seed functionality
This uses luigi1111's CN_Add method.
See https://xmr.llcoins.net for details.
2017-09-12 13:56:01 +01:00
Howard Chu
81fb2f5347
Silence more stupid gcc warnings 2017-09-08 11:36:49 +01:00
Riccardo Spagni
e19b68b005
Merge pull request #2362
adce8ae4 simplewallet: new "fee" command to display fee information (moneromooo-monero)
2017-09-02 11:30:07 +02:00
Riccardo Spagni
eec3527e33
Merge pull request #2316
0c6c3eb3 Silence stupid fallthru warning in gcc 7 (Howard Chu)
2017-09-02 11:29:11 +02:00
rbrunner7
840aed1cf3 monero-wallet-cli: New command 'wallet_info' improved 2017-08-31 18:01:15 +02:00
rbrunner7
9bdd985cee monero-wallet-cli: New command 'wallet_info' 2017-08-31 10:11:20 +02:00
moneromooo-monero
adce8ae466
simplewallet: new "fee" command to display fee information
including expected transaction backlog at different priorities
2017-08-29 16:28:18 +01:00