I couldn't help myself... just did some research into optimal denominations and came to a few interesting conclusions that should be considered in the design of Darksend+:
1) Given an unlimited number of denominations, the optimal denominations to minimize the number of transactions/denominations for a system in which change is given and each denomination is used only once per transaction is exponents of three (e.g., 1, 3, 9, 27, etc.), however, this is incompatible with Darksend+, because we need a system for exact payments without making change back to the sender
2) The optimal system in which each denomination is only used once and without the use of change is in fact exponents of two (e.g., 1, 2, 4, 8, etc.), so it seems that we are on the right track with our powers of two approach.
3) However, there are some considerable downsides to using this approach
- In order to have even one set of the 21 denominations, it takes 2,097.151 DRK... an amount few are likely to ever hope to have in their wallets let alone the 6,291.453 DRK that it would take to create three full sets of denominations as proposed (thus allowing three consecutive transactions to be sent without having to wait for redenominating coins)
- Using an approach based on powers of three would drastically reduce the amount needed to create a full set (because you would need fewer denominations), but the issue would remain that almost all users will not be able to make three full sets...
- Therefore, we should use powers of two (as Kristov proposed), but this generates some real trade-offs in the way this could work practically... Consider the following scenario:
Let's say that you have a wallet with less than the needed 6,291.453 coins. Since it cannot create three copies of each denomination, the system needs to make some trade-offs. You must either keep fewer copies of the full set of denominations, or you can keep three copies, but only up to a lower figure. Let's say for example you have 2,650 DRK... you could do one of the following. In option 1, the system completes one full set of denominations before creating as much of the second set as possible, and lastly as much of the third set as possible (always starting with the lowest denomination first). In option 2, it creates three sets of coins at each denomination until it can't create the next denomination up.
EDIT: Redid the table so that it is legible.
Option 1 Option 2
Denomination Number Amount Denomination Number Amount
0.001..............3............0.003.....0.001..............3............0.003
0.002..............3............0.006.....0.002..............3............0.006
0.004..............3............0.012.....0.004..............3............0.012
0.008..............3...........0.024......0.008..............3...........0.024
0.016..............3...........0.048......0.016..............3...........0.048
0.032..............3...........0.096......0.032..............3...........0.096
0.064..............3...........0.192......0.064..............3...........0.192
0.128..............3...........0.384......0.128..............3...........0.384
0.256..............3...........0.768......0.256..............3...........0.768
0.512..............3...........1.536......0.512..............3...........1.536
1.024..............3...........3.072......1.024..............3...........3.072
2.048..............3...........6.144......2.048..............3...........6.144
4.096..............3.........12.288......4.096..............3.........12.288
8.192..............3.........24.576......8.192..............3.........24.576
16.384.............2........32.768....16.384..............3.........49.152
32.768.............2........65.536....32.768...............3........98.304
65.536.............2.......131.072...65.536...............3......196.608
131.072...........2.......262.144...131.072.............3.......393.216
262.144............2......524.288..262.144..............3.......786.432
524.288............1......534.288..524.288..............2.....1048.576
1048.576..........1....1048.576..1048.576............0...........0.000
Total......................2,637.821...................................2621.437
Non-denominated.......12.179.......................................28.563
Sending 2500 DRK ..10 coins...................................48 coins
The advantages to Option 1 are a) you can send higher-value transactions using fewer blockchain transactions (as evidenced by the example of sending 2500 DRK), b) it can denominate a higher share of the 2,650 DRK... enabling the capability to send slightly larger amounts (though depending on the exact numbers used, this can become substantial in some circumstances), and c) you can still enable three successive transactions, albeit on a smaller set of possible amounts than Option 2.
The only real advantage I see to Option 2 is that you are guaranteed to be able to send three transactions in quick succession as long as they are all below 524.288 vs. three guaranteed transactions below 16.384 for Option 1.
To me, the advantages of denominating following the approach of Option 1 far outweigh the advantages of Option 2. In fact, the only scenario in this example where option 2 is better is when you are sending three successive transactions that all fall within the range of 16.384 - 524.288.
My conclusion is that the example Evan provided, which appears to prioritize denominating 3 sets of each denomination, should be replaced with an approach that prioritizes creating as much of a first set of coins as possible before starting on the next one.