DigiCash's eCash introduced a set of coins denominated in powers of 2. That is 1,2,4,8... This allowed the most efficient arrangement of arbitrary values, and it also means that the denomination of a coin can fit in only a byte sized integer. Quite elegant, really.
(Think about the old parable of the Chinese peasant, the chessboard and the grain of rice to see how big you can go with one just one byte. In my code I limit it to 64.)
The method I have used slightly extends the eCash method by including zero, which I believe that eCash ignored. The inclusion of zero is essential for testing purposes, as it removes the need for care and concern about the coins and the need for issuances of special currencies.
Recently, someone asked for more normal denominations as are apparent in normal national monies. There are two common sequences to my knowledge:
1, 2, 5, 10, ...
1, 2.5, 5, 10, ...
Question number 1: are there any more common sequences in use by people today?
I'm not that keen to duplicate for example the sequence of pre-decimal Sterling but it is amusing to list:
1/2, 1, 3, 6, 12
for ha'penny, penny, thrupenny bit, sixpence, shilling, and then
1, 2.5, 5, 10, 20, 21
shilling, half-crown, crown, 10-shilling, pound and finally, the guinea.
Now, once we introduce the notion of non-trivial coin sets, it is also possible to experiment. One consideration is that if one were doing an untraceable bearer token scheme, then traffic analysis occurs at the coin unit. That is, for the one person who can afford a $1,048,576 coin, he has no protection.
And, at any given coin size, there is only as much protection as the size of the pool would permit. So the obvious thing is to increase the size of the pool, by, for example, reducing the denominations. For example,
1, 5, 10, 50
1, 10, 100, 1000
The disadvantage is the larger payments and the extra signing burden, but, hey, none of my computers are doing anything right now. I'll bet your's aren't either. Why not load them up a bit?Posted by iang at October 8, 2003 11:32 PM | TrackBack