I am proposing an open source project for robust, scalable Bitcoin account management. Before I get started I would like to know from the community:
- is there something similar out there there that I have overlooked? I don't want to re-invent the wheel
- is there a need/interest for what I am describing below? I have a need for it myself but have other workarounds and will probably not go through the trouble of structuring the project the same way if there isn't enough interest out there
- are there any developers interested in contributing?
The account features built into bitcoind are a sorely needed feature for any system that manages customer Bitcoin accounts and needs to keep track of customer balances. (Read: any website that provides wallet services for customers.) However, as mentioned in countless forum posts and even in the official wiki, accounts are not a robust feature of bitcoind. I believe the fundamental paradigms are sound and the existing API is good and has all or most of the required functionality, but the implementation lacks.
In my opinion there are three major issues that need to be addresses:
- account meta data storage is commingled with wallet (private key) storage
- account management features are integrated in the same process that manages the blockchain
- the wallet (and indirectly, account) backup functionality is insufficient, and is currently limited essentially to file backups
I am proposing a system with the high level architecture outlined in the diagram below:
https://creately.com/diagram/huhfk2yj1/szMUs5NfNPyIl3KipDC2tPzfxg%3Dhttp://i.snag.gy/2nTcM.jpgIn essence, a separate server component (which is the core goal of this project) is responsible for handling communication with the client (e.g. a website) and maintaining account information. This server can utilize any arbitrary database technology for storing account data and balances. (My plan is to start with a MySQL adapter.) The server utilizes an arbitrary Bitcoin client (initially bitcoind) for performing network operations (sending and receiving Bitcoin) but does not store any account data with bitcoind. Optionally, the server has knowledge of and can also store private keys for any addresses generated as part of the Bitcoin operations. (This constitutes an additional level or redundancy for wallet data.)
The server exposes a JSON-RPC API identical to the one exposed by bitcoind, and is thus a drop-in replacement for bitcoind. However, any account management calls are handled by the server, and only network-specific operations (e.g. receiving or sending funds) are relayed to bitcoind.
The fundamental goal is to provide an option for high availability in a server environment, something that bitcoind is just not designed to do. In addition however certain services, such as sending funds to an external address, can be better controlled, restricted, or authorized. Better wallet security can be enforced as well, as there is no direct access from the public-facing server (e.g. a website) to the machine running bitcoind.
To reiterate: please kindly reply to this post and let me know if this is something that would be useful to the community, and if you have any interest in contributing to such a project. I will also be happy to answer any questions about architecture, implementation technology, etc.