I am new to to Bitcoin and was allocated a project to develop a (middle-man)service that can allow a person (using a mobile phone with no Internet connection) to use Bitcoin. Since Bitcoin Core is the software that enables a person to use the currency, does this mean my developed software should find a way to communicate with the Bitcoin core software installed on my desktop computer? Or are there any other applications that should be installed?
I'm not entirely clear what you're trying to develop. To initiate transactions and to check wallet balances, a device must either be capable of connecting to the Bitcoin P2P network (typically via the Internet), or must communicate with a server which is then connected to the P2P network. Are you trying to develop the latter in some form?– Christopher GurneeJun 12, 2015 at 13:35
Hi Christopher, yes I am developing the latter. So you saying a server should connect to the P2P network and by P2P network that means the Bitcoin Core software right?– NellyJun 12, 2015 at 13:48
Bitcoin Core is a piece of software which connects to the P2P network, however it's not the only one. In your scenario, are you saying that you intend to maintain an Internet-connected server, and that you have a network where mobile phones can connect to this same server, however they cannot connect directly to the Internet?– Christopher GurneeJun 12, 2015 at 13:56
Yes, that's what I mean Christopher– NellyJun 12, 2015 at 14:05
Which other softwares do I require? Would that require libraries such as bitcoinj?– NellyJun 12, 2015 at 14:13
Here are some considerations and recommendations. I hope that someone can provide a more complete answer than this one, though.
First off, creating new wallet software and getting it right is deceptively difficult, even if you're starting off with a nice library such as Bitcoinj. Unless you feel extremely comfortable with Bitcoin in general, I'd recommend that you use (to the extent possible) an existing full wallet implementation with a good reputation.
On the server side, you'll probably want wallet software you can easily interface with, either by directly calling its library functions, or via an RPC interface. Here are three such options you may want to consider:
- Bitcoin Core (RPC access)
- Armory (RPC and Python library access)
- Electrum (RPC and Python library access)
Take a look at the bitcoin.org choose-your-wallet page for a rough comparison. Please also note that the latter two are deterministic wallets; unfortunately there's less (no?) API documentation available for these two.
You should also take note that Armory has a rather broad interpretation of its AGPLv3 license—if you have a company General Counsel, I'd definitely ask them to consider this before proceeding.
On the server side, you'll need to develop your own accounting database to track individual account balances (do not use the Bitcoin Core deprecated "accounts" feature). Read up on cold storage if you don't have enough insurance to cover the loss of all of your bitcoin, and split your bitcoin between hot (on-server) and cold (off-server) wallets.
I can't offer much other insight than the above, except perhaps to guess that client-server authentication issues are likely to be your biggest potential for bitcoin loss. If you're not an expert in client-server security, or for that matter in security issues related to your chosen mobile platform(s), you should consider consulting with someone who is.
Okay Christopher,sounds like quite a task and it helps a lot. Thank you so much, I hope I will be getting more answers from others who contribute.– NellyJun 12, 2015 at 16:03
There are 3 ways to achieve this:
- Text messaging: It requires a mobile with SIM, text messaging service and a remote server.
- Satellite Communication: Running bitcoin node with blockstream satellite is explained in an article. Raspberry Pi could be replaced with a mobile and you will need to build a fork of ABCore similar to Bitcoin Satellite.
- Mesh Networking: This will need a device along with the mobile and bitcoin node running that is reachable from one of the mesh nodes in your network.
mesh nets are networks of peer-connected nodes that offer “offline” connectivity by means of radio signals. Depending on the bandwidth of the network, you could do things like send a bitcoin transaction or download the Bitcoin blockchain.