[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Automatic Magic Money Client



-----BEGIN PGP SIGNED MESSAGE-----

We now have three operating Magic Money servers. Several people are
attempting to give value to the digicash. Many applications of digicash
will be entirely net-based and automated. We need an automatic Magic
Money client.

The existing client is designed to interact with a user. The automatic
client will be designed to interact with a program. It will be controlled
entirely by command-line arguments, and should be easy to control from
a PERL script or C program.

I should have some time for coding soon. Here's a rough functional spec
for the automatic client. Don't write any code based on this, becuase it
isn't written yet. But please tell me what you think of it and what should
be changed or improved.

ac -[options] [inputfile] [outputfile]

- -b : display bank's keyid : prints 64-bit keyid of the bank in bank.asc

- -d (with no inputfile) : list the available coin denominations by reading
                         the elist.dat file

- -i (with outputfile)   : initializes client, accepting key length and key
                         name from stdin. Generates initialization message.

- -l (with no inputfile) : lists all coins in the client's coin file 
                         (allcoins.dat) output will be one coin per line

- -l (with inputfile) : print the total value of a coins.dat type file
                      if it is readable and signed correctly
                      output is one line (number)

- -p (with input/output files) : process a coins.dat type file, preparing it
              for exchange with a server. Reads from stdin a list of coin 
              denominations to create. Writes to stdout a 128-bit unique
              identifier generated by xoring the coin id's of all the new
              coins created

- -r (with outputfile) : reinitialize. Generate a new initialization packet.
                       Does not regenerate key or prompt for anything.

- -s (with input file) : process a response from the server and store the
                       coins in allcoins.dat. Outputs to stdout the same
                       128-bit unique identifier as the -p generated,
                       followed on the next line by the total value of the
                       received coins, followed by any message from the
                       server.

- -w (with outputfile) : withdraws coins for payment. Accepts a list of coin
                       values to withdraw from stdin, and saves the
                       coins.dat file to outputfile.

- -x (with no output file) : if old coins exist, returns the total value

- -x (with output file) : accepts a list of new coin denominations to create.
                        Exchanges old coins for those values. Generates
                        value and identifier just like -p

To use the client, the payer would run -l to get a list of coins. Then run
- -w to withdraw the coins to a file, and mail them to the shop. The shop
runs -l to determine the value. Then the shop decides what coins to
generate, runs -p to process the coins, and records the unique identifier.
The shop mails the output message off to the server. When the server's
response comes back, the shop runs -s and receives the 128-bit value again.
- From the identifier, the shop determines which transaction was just
completed by the server, and delivers the goods to that customer.

Any ideas for changes/improvements? The biggest mistake I made in
designing Magic Money was to leave out a field for the keyid of the bank
which generated the coins. The only way to process coins from multiple
banks is to try each bank's key in turn, keeping the files for each bank 
in a different directory, or to have the user specify which bank the coins
came from. I should write a Magic Money 2.0 which handles multiple
currencies automatically. I'll do that if Magic Money coins take on enough
value to make it worthwhile.

                                             Pr0duct Cypher

-----BEGIN PGP SIGNATURE-----
Version: 2.3a

iQCVAgUBLdWtgMGoFIWXVYodAQHmOgP5AVyfF37rpUa0v+YheW5Mrp9SVVP+dxdl
HRArT3tumzPXGm7aZSXswmVppHV+/ed/TeY+3Bc0+8AY1OAyuch5a8rBfUfAfG5O
A5HRXaa23nTsSFsi+dPawKY+w0d5pyEYinXIiU4cYrsGqzUvIjTn2sUzHPyR+XYa
sKpS3NxrN8s=
=ktLe
-----END PGP SIGNATURE-----