• Forum has been upgraded, all links, images, etc are as they were. Please see Official Announcements for more information

Coinjoin default # of addresses

RAD

New member
DASH Core Wallet - Any suggestions w/b appreciated for best (easiest?) way to increase the default # of free addresses available for mixing.
 
Open the console, type in keypoolrefill 500000 wait a long time, when finished, close the wallet, make a backup of the wallet.dat file start wallet again and mix.
 
Open the console, type in keypoolrefill 500000 wait a long time, when finished, close the wallet, make a backup of the wallet.dat file start wallet again and mix.
Tku. New so sry but how do I open the console? The directions in docs just said "Goto Tools" -> Debug Console...I can't find the "Tools"
 
Tku. New so sry but how do I open the console? The directions in docs just said "Goto Tools" -> Debug Console...I can't find the "Tools"
Window -> Console

Which docs are you reading? They likely need to be updated
 
Yes & being a POW vet (BTC mostly) but a new DASH fan, I'm taking it slow & easy. I'll go searching unless you are willing to point me. Tx.
 
The "create a bajillion keys" solution is a bit overkill, IMO.

The wallet automatically creates new addresses when it runs out during mixing. It also automatically creates a temporary backup when it creates this new set of keys. You can simply uncheck the box in the Settings>Coinjoin menu to remove the warning when it does this and the auto-creation experience will be seamless.

I think the only risk here is the rare event that the wallet or the computer crashes and that auto-backup somehow fails or gets corrupted, and you haven't closed and reopened the wallet in a while (which auto-creates a full backup of the wallet.dat each time you do).

Speaking from personal experience, I have for years allowed the wallet to auto-create during mixing without notifying me and without closing/reopening the wallet (or manually creating a wallet.dat backup [File>Backup Wallet]) and have experienced many computer crashes, power failures, etc while the wallet is mixing and have never lost keys.

Since then, I've switched to HD mode so all keys are determined from a single seed, just so there's no more concern about using newly created addresses before fully backing up the wallet. This is a more elegant solution to creating a bajillion keys, as you can always recover all addresses with the seed phrase, even if you lose your wallet.dat backups.

See here for details how to do this:
 
The "create a bajillion keys" solution is a bit overkill, IMO.

The wallet automatically creates new addresses when it runs out during mixing. It also automatically creates a temporary backup when it creates this new set of keys. You can simply uncheck the box in the Settings>Coinjoin menu to remove the warning when it does this and the auto-creation experience will be seamless.

I think the only risk here is the rare event that the wallet or the computer crashes and that auto-backup somehow fails or gets corrupted, and you haven't closed and reopened the wallet in a while (which auto-creates a full backup of the wallet.dat each time you do).

Speaking from personal experience, I have for years allowed the wallet to auto-create during mixing without notifying me and without closing/reopening the wallet (or manually creating a wallet.dat backup [File>Backup Wallet]) and have experienced many computer crashes, power failures, etc while the wallet is mixing and have never lost keys.

Since then, I've switched to HD mode so all keys are determined from a single seed, just so there's no more concern about using newly created addresses before fully backing up the wallet. This is a more elegant solution to creating a bajillion keys, as you can always recover all addresses with the seed phrase, even if you lose your wallet.dat backups.

See here for details how to do this:
Thanks Bridgewater! This helps a lot. Any tips on switching to HD?
 
Thanks Bridgewater! This helps a lot. Any tips on switching to HD?
Yeah the interface for HD is not super friendly yet, so there are a few things to look out for.

One is that you still have to use your wallet passphrase like normal, even in HD mode. Your wallet.dat is encrypted on the computer with the wallet passphrase, and it doesn't have anything to do with your HD mnemonic or mnemonic+optional passphrase. You'll still enter the wallet's passphrase when unlocking for privatesend--er, coinjoin--or sending funds.

There are multiple ways of getting to HD. If you're starting from scratch with no wallet.dat, you can use the
Code:
--usehd=1 --mnemonic="" --mnemonicpassphrase=""
flags when starting dash-qt from the command line, as outlined in the document I linked above.

Or you can simply create a new wallet from the currently-open wallet by going to File>Create Wallet, and then within that wallet, go to the console and type
Code:
 upgradetohd "optionally input your own bip39 mnemonic here" "apply a mnemonic passphrase for better security here"

If you don't input your own existing bip39 mnemonic from somewhere else, leaving the quotations empty will result in the wallet auto-creating a mnemonic for you. This is what most people will do, and they will be confused because the wallet doesn't show you the mnemonic it chose for you during the wallet creation (usehd) or conversion (upgradetohd) process.

So for example, say you created a new wallet, encrypted it with the passphrase "shinyobjects" and then went to the console and typed
Code:
upgradetohd "" "hdwalletsarebetterwithpassphrases" "shinyobjects"
, The wallet will auto-generate a mnemonic and combine it with your manually specified mnemonic passphrase (in this case "hdwallesarebetterwithpassphrases") to create the seed. but you won't know what your mnemonic is until you tell the wallet to spit it out. So you'll have to use the
Code:
dumphdinfo
command in the console to show it.

Again, this is all just for the setup. After you write down your mnemonic and mnemonic passphrase somewhere safe, you'll never have to use them again unless something happens and you lose your wallet.dat or wallet passphrase.

One more thing to remember: if you upgrade an existing wallet to HD, I don't think previously generated addresses will be part of the hierarchy, so if you do lose your wallet and all wallet.dat backups and need to recover from the mnemonic (or mnemonic+mnemonicpassphrase), any funds you still had in those old pre-HD addresses will be gone. So it's probably best to make a new wallet and send everything from the old wallet to the HD one,
 
Yeah the interface for HD is not super friendly yet, so there are a few things to look out for.

One is that you still have to use your wallet passphrase like normal, even in HD mode. Your wallet.dat is encrypted on the computer with the wallet passphrase, and it doesn't have anything to do with your HD mnemonic or mnemonic+optional passphrase. You'll still enter the wallet's passphrase when unlocking for privatesend--er, coinjoin--or sending funds.

There are multiple ways of getting to HD. If you're starting from scratch with no wallet.dat, you can use the
Code:
--usehd=1 --mnemonic="" --mnemonicpassphrase=""
flags when starting dash-qt from the command line, as outlined in the document I linked above.

Or you can simply create a new wallet from the currently-open wallet by going to File>Create Wallet, and then within that wallet, go to the console and type
Code:
 upgradetohd "optionally input your own bip39 mnemonic here" "apply a mnemonic passphrase for better security here"

If you don't input your own existing bip39 mnemonic from somewhere else, leaving the quotations empty will result in the wallet auto-creating a mnemonic for you. This is what most people will do, and they will be confused because the wallet doesn't show you the mnemonic it chose for you during the wallet creation (usehd) or conversion (upgradetohd) process.

So for example, say you created a new wallet, encrypted it with the passphrase "shinyobjects" and then went to the console and typed
Code:
upgradetohd "" "hdwalletsarebetterwithpassphrases" "shinyobjects"
, The wallet will auto-generate a mnemonic and combine it with your manually specified mnemonic passphrase (in this case "hdwallesarebetterwithpassphrases") to create the seed. but you won't know what your mnemonic is until you tell the wallet to spit it out. So you'll have to use the
Code:
dumphdinfo
command in the console to show it.

Again, this is all just for the setup. After you write down your mnemonic and mnemonic passphrase somewhere safe, you'll never have to use them again unless something happens and you lose your wallet.dat or wallet passphrase.

One more thing to remember: if you upgrade an existing wallet to HD, I don't think previously generated addresses will be part of the hierarchy, so if you do lose your wallet and all wallet.dat backups and need to recover from the mnemonic (or mnemonic+mnemonicpassphrase), any funds you still had in those old pre-HD addresses will be gone. So it's probably best to make a new wallet and send everything from the old wallet to the HD one,
Thank you BW. I was hesitant to proceed due to a lack of understanding as although the current documentation is adequate, it needs more detail in the steps and their explanation. Your reply (& the others previously) answered the open questions I had. Such expositions would be a good addition to the current docs. Giving new members comfort to proceed like this ensures community growth and further success of DASH which IMHO is a great POW project. Bravo.
 
Thank you BW. I was hesitant to proceed due to a lack of understanding as although the current documentation is adequate, it needs more detail in the steps and their explanation. Your reply (& the others previously) answered the open questions I had. Such expositions would be a good addition to the current docs. Giving new members comfort to proceed like this ensures community growth and further success of DASH which IMHO is a great POW project. Bravo.
I will pass that on internally as well, which docs were you reading? We're always looking to improve them
 
Great stuff. I was working off the current documentation (which is good but assumes a level of knowledge beyond most newbie's ken) but I was looking for clarification b/c as above, I knew I was not adept enough to proceed. Initially (before I found y'all) it was the only info I could find (Reddit, I believe) & yes, it was an (old) post on PSend (er CJ) which was no help b/c it made reference to old controls on the D-Core wallet so I knew I was off track which sent me out to search again. Making this forum (which is what I was seeking) more apparent somewhere in the basic intro docs for those on the way in may be helpful. (and it is certainly possible I missed something as I was on boarding but I'm usually not such a dope ; ). Thanks y'all.
 
Great stuff. I was working off the current documentation (which is good but assumes a level of knowledge beyond most newbie's ken) but I was looking for clarification b/c as above, I knew I was not adept enough to proceed. Initially (before I found y'all) it was the only info I could find (Reddit, I believe) & yes, it was an (old) post on PSend (er CJ) which was no help b/c it made reference to old controls on the D-Core wallet so I knew I was off track which sent me out to search again. Making this forum (which is what I was seeking) more apparent somewhere in the basic intro docs for those on the way in may be helpful. (and it is certainly possible I missed something as I was on boarding but I'm usually not such a dope ; ). Thanks y'all.
I see! We've gone ahead and added a link at the top of the documentation at docs.dash.org that should link to the forum in future, thanks for the feedback :)
 
Last edited:
Nice. That'll work well M. While we're on it, is there a good explanation of what to expect as a user after submitting to a mix? (besides wait awhile & the more rounds the longer it'll take?)

The docs explain what's going on logically well but they could use some more nuts & bolts visibility on what to do/expect as a user.
For ex., (& I am surmising here) once a target amount is entered & sent for mixing, various much smaller denomination amounts will be split off and submitted serially for mixing sessions which do not occur continuously so expect periods of inactivity (= the CJ Balance you see on screen will appear static at times) but your submitted amount is in queue for mixing and will continue to participate in mixing sessions until your target amount is met.

Also, what are the pros/cons of submitting big vs small target amounts?
 
I'm assuming you already have been looking at these pages, but I'll link to them in case you haven't and for the benefit of anyone else that stumbles onto this post.

Nice. That'll work well M. While we're on it, is there a good explanation of what to expect as a user after submitting to a mix? (besides wait awhile & the more rounds the longer it'll take?)
That's kinda it (wait and the more rounds the longer) :)

The docs explain what's going on logically well but they could use some more nuts & bolts visibility on what to do/expect as a user.
For ex., (& I am surmising here) once a target amount is entered & sent for mixing, various much smaller denomination amounts will be split off and submitted serially for mixing sessions which do not occur continuously so expect periods of inactivity (= the CJ Balance you see on screen will appear static at times) but your submitted amount is in queue for mixing and will continue to participate in mixing sessions until your target amount is met.
As a user I think being patient is the main thing to do. The process is dependent on other people doing the same thing so it may be slower or faster depending on that. If you want to get into the nuts a bolts a bit, there's a more in-depth explanation in the dev docs that covers what the wallet does and how messages are sent around (see that page here).

A couple other things that may be interesting to look at:
  • Check out the "Monitoring CoinJoin" stuff. Especially the table explaining the different CoinJoin-related transactions. You can compare that to what you see happening on theTransactions tab.
  • Enable the advanced CoinJoin interface in settings to see a bit more info (I like this just because you see that stuff is going on even if you're not seeing the balance change for a while)

Also, what are the pros/cons of submitting big vs small target amounts?
I think mainly it's just a matter of how long it will take. If your machine is on a lot it matters less because it can just run in the background.
 
Nice. That'll work well M. While we're on it, is there a good explanation of what to expect as a user after submitting to a mix? (besides wait awhile & the more rounds the longer it'll take?)

The docs explain what's going on logically well but they could use some more nuts & bolts visibility on what to do/expect as a user.
For ex., (& I am surmising here) once a target amount is entered & sent for mixing, various much smaller denomination amounts will be split off and submitted serially for mixing sessions which do not occur continuously so expect periods of inactivity (= the CJ Balance you see on screen will appear static at times) but your submitted amount is in queue for mixing and will continue to participate in mixing sessions until your target amount is met.

Also, what are the pros/cons of submitting big vs small target amounts?
The coinjointarget in the settings menu does not at once send that amount for mixing. It doesn't do anything except ensure that the wallet keeps creating denominations from available funds and mixing them (to your selected number of rounds) until the mixed balance is higher than the target.
Note that the coinjoin available balance won't include mixed funds until they have fully reached your selected target rounds (16 is best for privacy but takes a long time).

So as thephez mentioned above, sometimes fewer people are mixing at that time and it will take longer. Sometimes many people are mixing and your time will be shorter. This also depends on the type of denominations you are mixing. You'll have to leave your computer on, as the mixing takes place piece-by-piece. It is not like other less-secure and centralized mixing solutions where you simply send an entire amount off to some third party to mix it and have it sent back to you. This is a trustless process which requires active participation, so you can't turn your computer off while mixing.

Once you become a heavy privatesend(coinjoin) user, you'll tend to start thinking of your private funds in terms of denominations. This is the privacy proposition of privatesend(coinjoin) -- you are basically spending exact denominations that have been mixed around, where one is exactly the same as another and you don't know which one was from where. Think of the private balance in terms of paper money or dollar bills. When you press "start coinjoin" the wallet will start making 1s, 10s, .1s, .01s and .001s from your main balance, and then mix those "bills" 16 times each (if you select max rounds).

How many of each denomination gets made? This part gets a little tricky and could actually use some better documentation, IMO. The wallet will make an equal number of each denomination to give you maximum spending flexibility. I believe this depends on a more advanced command which is is called coinjoindenomsgoal. By default it is set to 50, so when you start out it will try to keep your available denominations at 50 .001s, 50 .01s, 50 .1s, 50 1s and 50 10s. There is also a coinjoindenomshardcap command which is sometimes useful when you are spending only large denominations (1s or 10s) and don't want to "waste" some of your unmixed Dash by creating a bunch of small denominations that will just sit there and never get used.

So setting big vs small coinjointarget amounts won't really change much, because the wallet will always try to give you an even amount of all denominations. You don't have granular control (yet -- I am hoping for a future option) to preferentially create more or less of certain denominations. So in order to have lots of 10s, you'll have to set the target high. If you only mix 100 Dash, you won't end up with ten 10-Dash denoms, you'll have a mixture of many 001s, .01s, .1s, etc, and if you then turn around and try to coinjoinsend exactly exactly 100 from that 100 you mixed, you'll end up using hundreds of inputs in the transaction--which is bad. The rule for Dash Coinjoin spending is that you want to keep the number of inputs per transaction small to maintain privacy. So you'd want to try to have as many 10s as possible for the 100-Dash coinjoin spend (ideally ten 10s, and not seven 10s and twenty-five 1s and fifty 0.1s, etc).

I can get into how to use the coinjoindenomshardcap if you want to learn more about this aspect, but the average user won't really need it. The wallet generally has a nice variety of small bills and large ones to accomodate a wide range of spending habits. It can't predict that you'll spend the entire balance you're mixing all at once --if it could, it would only mix large denominations. But it has no way of knowing this, so instead you're always getting an even variety of small and large denoms. That's probably one of the key things to learn about Dash's coinjoin implementation.
 
Last edited:
The docs are terrific and so is the project. My goal in opening the thread was to learn * I have. Thank you & thank you.
I also want to contribute by logging my "baby eyes" on-boarding experience with DASH. More to come if OK.
 
Hi, I’m a developer and I use Dash. I have a question about CoinJoin. How do I choose, verify, and prevent linking the addresses to mix with? I need some best practices on how to use CoinJoin efficiently. Thanks!
Received message. Sure, I can make it shorter than that one. Here is what I came up with: Hi, I'm a developer and I use Dash. I have a question about CoinJoin. How do I choose, verify, and prevent linking the addresses to mix with? I need some best practices on how to use CoinJoin efficiently. Thanks!
 
Back
Top