Bitcoinista is a simple bitcoin wallet with a text-based UI for spending small amounts of bitcoin on the go. It can run on the desktop but the main usecase is to run it in the sandboxed python app Pythonista on iOS. Within this environment Bitcoinista is able to sign transactions and relay them to the bitcoin network, allowing you to spend your coins on your iPhone or iPad without your private key ever leaving your device.
Bitcoinista is built on the excellent pybitcointools library which is lightweight enough to be run in Pythonista. It also uses SlowAES which is a pure python implementation of AES.
To install Bitcoinista on your iOS device, first go to installer.py in the Bitcoinista repository.
Select all the code and copy it. Go to Pythonista, create a new script in the
Script Library and paste the code in there. Now run it. This will install two
folders bitcoinista
, pybitcointools
and two files bitcoinista.py
and
aes.py
, where bitcoinista.py
is the main script to run.
A video describing the installation can be found here:
If you want a shortcut to Bitcoinista on your home screen you can go here, write "bitcoinista" (note the lower case) as script name, and then add the page to your homescreen.
The first time you start Bitcoinista, you will be asked to create a wallet. The wallet is just a single address/private key pair, and you can create it in one of two ways:
-
Importing your own private key in WIF format.
-
Letting Bitcoinista create a random key using
pybitcointools.random_key()
Once you've created the wallet you will be asked to select a password
for the AES encryption of the private key. Once you've done this the
wallet file bitcoinista_wallet.json
will be created, containing the
address and encrypted private key.
When scanning a QR code from a merchant the contents of the code is often a Bitcoin URI and looks something like
bitcoin:1BMjTvpSzsRYFEutYjx3AnTC49z4Pk8r7i?amount=0.01&label=starbucks
You can scan such a QR code and copy the corresponding URI. When Bitcoinista notices a bitcoin URI in the clipboard a transaction is automatically created with the above address and amount. All you need to do is to enter your password and transaction fee and the transaction is sent.
A video demonstrating sending from a bitcoin URI is here:
If no bitcoin URI is in the clipboard Bitcoinista will ask you to
enter the address to send to and the amount you wish to send. If you
enter a dollar sign before or after your amount, like $5
or
1.25 $
, the amount will be converted using the current exchange rate.
-
Runs on iOS, no jailbreak needed.
-
Open source: Runs directly from the python source for complete transparency.
-
Quickly spend using a scanned QR code.
-
Private key encrypted with AES in case your phone is lost or stolen. Remember to back up your key!
-
Ability to import your own private key to spend from paper wallet etc.
-
Testnet support for playing around without risking real bitcoins.
-
Ability to send to stealth addresses. See below.
-
Needs paid software to run on iOS: Pythonista is $6.99 in the App Store. Note that this author is not affiliated with Pythonista in any way.
-
Single address in wallet: No change addresses or BIP32 support.
-
Only simple transactions: Unable to send to more than one address at a time.
-
No GUI: Simple, text-based interface.
Bitcoinista supports sending to stealth addresses. This is an experimental feature and is only supported in Testnet and Demo modes at this time.
Stealth addresses are special addresses that can be reused for receiving payments without impacting privacy. When sending to a stealth address a random temporary bitcoin address is created where the payment is sent. At the same time an ephemeral public key is created and stored in the blockchain. The owner of the stealth address can use the ephemeral public key together with his stealth private keys to create the private key to the temporary address and redeem the payment.
An example of wallet software that uses stealth addresses is the feature-rich Dark Wallet (currently in Alpha).
If you set the flag user_mode='testnet'
in the script
bitcoinista.py
you'll be able to run Bitcoinista in testnet
mode. Bitcoinista will generate a testnet address and can send and
receive testnet coins as you would bitcoins. All you need to do is to
grab a few coins from a testnet faucet and you can start
testing.
If you set the flag user_mode='demo'
in the script bitcoinista.py
you can run Bitcoinista in demo mode. In this mode you will always
have 0.8 fake coins in your wallet and you can run Bitcoinista as you
normally would. Instead of sending a transaction to the network
Bitcoinista will simply display the inputs and outputs of the
transactions so you can see which unspent outputs are selected, if the
correct amount of change is sent etc. This is a good way of playing
around with the interface without risking any coins. Demo mode also
works with no internet connection. Testnet addresses are used in Demo
mode.
If you install a newer version or remove Bitcoinista and install again you will have to restart Pythonista for the changes to take effect. You can do this by double clicking the home button and swipe up on the Pythonista app.