Hello,
I have recently written an open-source, digital cash library with a working server and test client. I think there is much potential for integration with a project like yours. Or at least you might see value in raiding my code for Bitcoin.
Here are some details about my release:
WHAT IS Open Transactions ?
-- It's a solid, easy-to-use, CRYPTO and
DIGITAL CASH LIBRARY.-- Including an operational CLIENT and SERVER.
-- It's OPEN SOURCE, and encapsulates a COMPLETE PROTOCOL for transactions.
-- It's object-oriented, and written in C++ using OpenSSL.
-- With a high-level API in C++, as well as Java! (JNI interface)
-- Easy Makefiles for Mac OS X and **LINUX**
-- Featuring:
................
UNTRACEABLE DIGITAL CASH (real blinded tokens.)
................
SECURE NUMBERED ACCOUNTS (an account is a public key.)
................
TRIPLE-SIGNED RECEIPTS................
BASKET CURRENCIES................
SIGNED XML CONTRACTS................
MANY DIGITAL INSTRUMENTS: Cheques, Cash, Vouchers, etc.. --------------------------
ARTICLES...
Wiki:
http://github.com/FellowTraveler/Open-Transactions/wikiChart of instruments:
http://github.com/FellowTraveler/Open-Transactions/wiki/InstrumentsSample cheque and voucher:
http://github.com/FellowTraveler/Open-Transactions/wiki/Sample-ChequeUntraceable digital cash (bearer certificate):
http://github.com/FellowTraveler/Open-Transactions/wiki/Sample-CashSample mint:
http://github.com/FellowTraveler/Open-Transactions/wiki/Sample-MintSample currency contract:
http://github.com/FellowTraveler/Open-Transactions/wiki/Sample-Currency-Contract --------------------------
IN OVERVIEW, THE SOFTWARE FEATURES:
-- UNTRACEABLE DIGITAL CASH: Fully implemented! Cash withdrawals of any asset
type, using Lucre. (Ben Laurie's implementation of Wagner's variant on
Chaumian blinding.) Once cash is withdrawn, the server has no way of tracking
it or linking it back to its next deposit.
REPEAT: Digital Bearer Certificates--with denominations, mints, expiring
tokens, spent token database, the works--fully-operational and ready to
integrate with your mixnets, your digital gold currency (or silver), your
anonymous network nodes, your bittorrent clients, your remailers, your secure
voip apps, your nym servers, your snazzy, new, file-sharing client, and your
censorship-resistant, distributed data store. This is what you have been
waiting for! Real, open-source, digital cash.
As well as...
-- ANONYMOUS, NUMBERED ACCOUNTS, secured by public key cryptography. Your PGP
key is your account, and the hash of it is your User ID. No other information
is stored. Each user can create an unlimited number of asset accounts, of any
type, each with its own randomly-generated ID. As long as you connect over Tor
and take other similar precautions, there's no way to connect any of those
accounts to you. (See PKTP and DMT for examples of this concept.) You can also
create as many User IDs as you wish, each with its own key, and with your
wallet software managing all your user IDs and asset accounts across multiple
transaction servers and multiple asset types.
-- It's like PGP FOR MONEY. The idea is to build this so that it supports many
cash algorithms, not just Lucre. I'd like to add Chaum's version, Brands'
version, etc. So that, just like PGP, the software should support as many of
the top algorithms as possible, and make it easy to swap them out when
necessary.
-- TRIPLE-SIGNED RECEIPTS for account-to-account transfers. This allows the
client and server to agree on balances while simultaneously not storing any
transaction history. (Client may choose to store his own transaction history.)
No money can ever be transferred or withdrawn without an authorizing signature
from the account owner. See Bill St. Clair's excellent Trubanc for an example
of this.
-- ANYONE AN ISSUER. Any user can design and issue his own currency: Simply
upload the currency contract to any server. Anyone else with a copy of that
contract can open an asset account in the new currency type. The currency
contract is just an XML file with your digital signature on it. Hashing that
file produces the currency ID, which is therefore unique and consistent across
all servers. It's impossible to change any details of the contract, including
the URL, the signature, or the public key, without entirely changing the
contract's ID. To those in the know, this means that Open Transactions
supports the 'Ricardian Contract'.
-- BASKET CURRENCIES. Open Transactions can distribute a single currency
across MULTIPLE ISSUERS. How is this possible? Users can define basket
currencies, which the server treats the same as any other currency, but which,
behind the scenes, are each simply a list of 5, 10, or 100 OTHER currency
contracts. The issuance is delegated to a basket of other currencies. Users
can easily define baskets, open accounts based on basket types, and exchange
in and out of these basket currencies using the client software. Baskets are
an important example of the distribution of risk that I believe is necessary
to make digital cash unstoppable online.
-- DISTRIBUTION OF RISK ACROSS MULTIPLE TRANSACTION SERVERS, IN MULTIPLE
JURISDICTIONS. The wallet software can store an entire list of transaction
servers. Every new server contract that you import to the wallet puts a new
server on the list. There will be many such servers, run by multiple entities
and run in multiple jurisdictions. Many will run openly and with full access
to their local court system. Others will run on anonymous networks. Users will
be able to individually choose a server for a certain transaction or even
distribute their assets transparently across a list of different servers.
-- DISTRIBUTED ACCOUNTS. Your wallet software could display a single asset
account to you, which it is actually distributing across a list of 10 or 100
servers behind the scenes, using the open transactions protocol. Of course,
you choose the servers, the number, the algorithm, etc. and it's a trust
market. In the future, this software will eventually merge into the next
generation of anonymous networks. You can be a part of it.
-- SEPARATION OF POWERS. The entities operating the servers are not actually
issuing any currencies. Meanwhile the Issuers are not operating any
transaction servers. Neither one of them is performing exchanges in or out of
the normal banking system, since those services are handled by exchange
providers in the various local jurisdictions (all separate entities.) This
provides a lot more legal legitimacy and protection to all of the entities
involved. Meanwhile all risk is distributed. The issuers distribute their risk
across multiple storage companies, and the users distribute their risk across
multiple issuers (using basket currencies) and across multiple transaction
servers (via their wallet software.)
The idea of separation of powers was first highlighted to me by Loom where
there are many different issuers on a single server. This led me to explore
further along the idea of separating and distributing risk across multiple
issuers, and multiple servers, which is what led to the development of Open
Transactions.
This product includes software developed by Ben Laurie for use in the Lucre
project.