Praesidium is an open source, easy-to-use bitcoin wallet for Blockchain Security 2Go cards written in Python. It is made for consumers and developers that want to experience almost all of the cards functionalities in a fast and intuitive GUI.
More pictures can be found below under Screenshots.
Praesidium enables you to do a lot of things with your Blockchain Security 2Go card:
- Generate new keypairs
- List all avaliable keypairs
- Show your Bitcoin address (also in form of a QR code)
- Unlock the card via a PIN
- Show how many Bitcoins you possess
- Generate and broadcast a transaction
- Log each transaction made in a text file
If you want to learn Bitcoin on a low level the transaction logs even show you how each transaction was built byte for byte.
To install Praesidium either clone this repository or download the Praesidium folder to your machine.
Please note that this software is inteded for use with Python 3. It was tested and build on Python versions 3.6.8 and 3.7.4.
Praesidium uses a total of 4 dependencies which do not come nativly with python:
You can use the PIP installer (for Python 3!) to install most these dependencies, the blocksec2go library requires additional steps:
pip install base58
pip install bech32
To install the blocksec2go python library i recommend you follow this installation guide since this library uses the pyscard library which requieres swig.
If you are on Windows and already have chocolately package manager installed you can do the following steps to install the blocksec2go library:
choco install swig
pip install blocksec2go
If any errors pop up, you are probably still missing some files/dependencies. I suggest you either google the error or open a new issue with a screenshot.
pip install pyside2
Qrcode needs Pillow (a Python Imaging Library fork) to function correctly.
pip install Pillow
pip install qrcode
To start the application go into the praesidium folder and run the following command:
python praesidium.py
If you are not using the 'Identiv uTrust 3700 F' reader (which you most probably are not) then change the string in line 24 inside praesidium.py to your readers name:
reader_name = 'Identiv uTrust 3700 F'
If you do not know your readers name you can run the command blocksec2go list_readers in your terminal/cli after installing the blocksec2go library. This will show you a list of readers connected to your system. You do not need to copy the full name of the reader, but you should keep in mind that Praesidium chooses the first reader from that list with the name you entered in line 24. So if you have multiple readers connected with the same name it is recommended you either enter the full name of the reader in reader_name or you disconenct all other readers except for the one you intend on using.
TLDR: Change the value of the reader_name variable to your readers name and remember that Praesidium does not support multiple readers with the same name (It uses the "first" reader with that name and ignores the others)!
The source code is licensed under GPLv3. The license is available here.
The PySide2 library is licenced under LGPLv3. The source code of this library was not modified in any way for this project. You can find the source code for PySide2 here.
Blockchain Security 2Go card gets placed on reader:

Another card, that is not a Blockchain Security 2Go card, gets placed on the reader:

Before there were 27 keypairs and now a new keypair (Keypair 28) gets generated:

Keypair 29 was entered in the Keypair number box, which not a valid keypair because it has not been generated yet:

Main window of Keypair 1 with PIN already entered correctly:

A wrong PIN is entered (Note that a PIN can only be entered 3 times incorrectly, after that the card is locked and has to manually be unlocked via the command line and the PUK):

Balance on this Bitcoin address is too low to sucessfully pay the desired amount to the target address:

The returned change falls under the minimum amount of Satoshi required to make a transaction (This means either the fees can be increased, which the program does by default, or the amount can be increased or more balance can be added to this address so that the returned change is above the threshhold):

A broadcastable transaction is generated and you can choose to broadcast or store it (This is done in case you want to push the transaction manually or at a later time):


