Best Bitcoin Wallet Armory | Multi-Signature Cold Storage

A Guide to Keeping Keys Offline Using Armory +rPi

Hi Redditors.
I am going to post in this thread my experiences in getting my Desktop (Debian) machine running Armory in watch-only mode, and coupling that with an offline Raspberry Pi (which holds my private keys) for signing the transactions previously made in watch-only mode.
I actually compiled Armory from source directly on my Pi. This guide is probably more for the bitcoin 'power user', as to run Armory online, and broadcast the signed transactions, you need to have a bitcoin full node running (bitcoind).
Basic requirements:
Aimed-for Setup:
I'll post the guide in digestible sections...

Section 1

I should begin by saying I installed source code from git, and got Armory to build the DB on my desktop initially, WITHOUT creating a wallet.. (This allowed me to debug what was going on a little!)
Go to Bitcoin.org, select Armory..
It leads to a Download from Git:
https://github.com/goatpig/BitcoinArmory/releases
Followed the procedure for Linux Debian verify code, compile, install, all straight-forward..
Began by running bitcoind, and telling Armory where to find it. This is the command I used, obviously it was all on one line and didn't include the arrows/explanations!:
python ArmoryQt.py \ --satoshi-datadir=/BlockChain/chain20180414/blocks \ # <-----(where my bitcoind blocks live) --datadir=/ArmoryDataDi \ # <-----(this is instead of ~/.armory) --dbdir=/ArmoryDataDidatabases # <-------(again, non std. place used for Armory's databases.. my choice.) 
So, on the Desktop, after the initial "build databases"
(NB the initial "Build Databases" took about 1.5h and my two CPUs were maxed the whole time, Temps up to 62C. Not ideal; Im not in a rush!)
I then wanted to import a watch-only wallet.
Before I did this, I took a full backup of the Armory data dir:
/ArmoryDataDi
(or ~/.armory in a default installation).
I'd hate to have to make Armory do another full sync with the bitcoind node!

Section 2

Next step: offline wallet (with Private Keys) is on a Raspberry Pi.
I downloaded the source and managed to compile it on the pi itself! :)
Though there were some gymnastics needed to setup the Pi.
My Pi is running Raspbian based on Wheezy.. quite old!
I did the following on the Pi:
apt-get update apt-get upgrade (<---took about an hour!) apt-get install autotools-dev apt-get install autoconf 
Then I followed the instructions exactly as I had done for my Debian Desktop machine, EXCEPT:
I had to increase the Pi's swap space. I upped it from 100Mb to 400Mb.
The compilation took 7 hours, and my poor SD card got a thrashing.
But after compilation, I put the Swap back to 100Mb and Armory runs ok with about 150Mb of memory (no swap needed).
Swap increase on the Pi:
use your favourite editor, and open the file /etc/dphys-swapfile
add/change the following line:
CONF_SWAPSIZE=400 
Then, REBOOT the Pi:
sudo shutdown -h -P now 
Once the compilation was done on the Pi, put the swap back, rebooted and created an Armory wallet.
I added manual entropy and upped the encryption 'time' from 250ms to 2500ms - since the Pi is slow, but I'll be happy to wait for more iterations in the Key Derivation Function.
Once the wallet was created, it obviously prompts you for backup.
I want to add a private key of my own (i.e. import), so don't do the backup until this is over.
I import my Private Key, and Armory checks that this corresponds to a Public Key, which I check is correct.
This is the point now where the Pi storage medium (e.g an SD card) has to be properly destroyed if you ever get rid of it.
I had thought that now would be a good time to decide if your new wallet will generate Segwit receiving addresses, and also addresses used to receive 'change' after a transaction..
But it seems Armory WON'T let you switch to P2SH-P2WPKH unless your Armory is connected to a node offering "WITNESS" service.
Obviously, my Pi is offline and will never connect to a node, so the following will not work on the Pi:
NB: I thought about setting this on the Debian "watch-only" wallet, but that would surely mean doom, as the Pi would not know about those addresses and backups might not keep them.. who knows...
So, end result:- no segwit for me just yet in my offline funds.

--If anyone can offer a solution to this, I'd be very grateful--

Section 3

Ok, now this is a good point to back up your wallet on the Pi. It has your imported keys. I choose a Digital Backup - and put it on a USB key, which will never touch the internet and will be stored off-site. I also chose to encrypt it, because I'm good with passwords..
NB: The Armory paper backup will NOT back up your imported private keys, so keep those somewhere if you're not sweeping them. It would be prudent to have an Armory paper backup anyway, but remember it will likely NOT help you with that imported key.
Now for the watch-only copy of the wallet. I want to get the "watch-only" version onto my Desktop Debian machine.
On the Pi, I created (exported to a USB key) a "watching-only" copy of my wallet.
I would use the RECOMMENDED approach, export the "Entire Wallet File".
As you will see below, I initially exported only the ROOT data, which will NOT capture the watching-only part of the Private Key I entered manually above (i.e. the public Key!).
Now, back on the Debian Desktop machine...
I stopped all my crontab jobs; just give Armory uninterrupted CPU/memory/disk...
I also stopped bitcoind and made a backup prior to any watch-only wallet being imported.
I already made a backup of Armory on my Desktop, before any wallet import.
(this was needed, as I made a mistake.. see below)
So on the Debian Desktop machine, I begin by firing up bitcoind.
my command for this is:
./bitcoind -daemon -datadir=/BlockChain/chain20180414 -dbcache=400 -maxmempool=400 

Section 4

I try running Armory like this:
(I'm actually starting Armory from a script - StartArm.sh)
Inside the script StartArm.sh, it has the line:
python ArmoryQt.py --ram-usage=4 --satoshi-datadir=/BlockChain/chain20180414/blocks --datadir=/ArmoryDataDi --dbdir=/ArmoryDataDidatabases 
I know from bitter experience that doing a scan over the blockchain for a new wallet takes a looong time and a lot of CPU, and I'd like it to play nicely; not gobble all the memory and swap and run my 2xCPUs both at 100% for four hours...
So... I aim to run with --ram-usage=X and --thread-count=X
(For me in the end, X=1 but I began with X=4)
I began with --ram-usage=4 (<--- = 4x128Mb)
The result is below...
TypeError: cannot concatenate 'str' and 'int' objects 
It didn't recognise the ram-usage and carried on, crippling my Debian desktop PC.
This is where it gets dangerous; Armory can gobble so much memory and CPU that the windowing environment can cease up, and it can take over 30 minutes just to exit nicely from bitcoind and ArmoryDB.
So, I ssh to the machine from another computer, and keep an eye on it with the command
"free -h" 
I'd also be able to do a "sudo reboot now" if needed from here.

Section 5

So, trying to get my --ram-usage command recognised, I tried this line (added quotes):
python ArmoryQt.py --ram-usage="4" --satoshi-datadir=/BlockChain/chain20180414/blocks --datadir=/ArmoryDataDi --dbdir=/ArmoryDataDidatabases 
But no, same error...
Loading Armory Engine: Armory Version: 0.96.4 Armory Build: None PyBtcWallet Version: 1.35 Detected Operating system: Linux OS Variant : ('debian', '9.4', '') User home-directory : /home/ Satoshi BTC directory : /BlockChain/chain20180414 Armory home dir : /ArmoryDataDi ArmoryDB directory : /ArmoryDataDidatabases Armory settings file : /ArmoryDataDiArmorySettings.txt Armory log file : /ArmoryDataDiarmorylog.txt Do wallet checking : True (ERROR) ArmoryUtils.py:3723 - Unsupported language specified. Defaulting to English (en) (ERROR) ArmoryQt.py:1833 - Failed to start Armory database: cannot concatenate 'str' and 'int' objects Traceback (most recent call last): File "ArmoryQt.py", line 1808, in startArmoryDBIfNecessary TheSDM.spawnDB(str(ARMORY_HOME_DIR), TheBDM.armoryDBDir) File "/BitcoinArmory/SDM.py", line 387, in spawnDB pargs.append('--ram-usage=' + ARMORY_RAM_USAGE) TypeError: cannot concatenate 'str' and 'int' objects 

Section 6

So, I edit the Armory python file SDM.py:
if ARMORY_RAM_USAGE != -1: pargs.append('--ram-usage=4') #COMMENTED THIS, SO I CAN HARDCODE =4 # ' + ARMORY_RAM_USAGE) 
Running it, I now have acknowledgement of the --ram-usage=4:
(WARNING) SDM.py:400 - Spawning DB with command: /BitcoinArmory/ArmoryDB --db-type="DB_FULL" --cookie --satoshi-datadir="/BlockChain/chain20180414/blocks" --datadir="/ArmoryDataDi" --dbdir="/ArmoryDataDidatabases" --ram-usage=4 
Also, even with ram-usage=4, it used too much memory, so I told it to quit.
It took over 30 minutes to stop semi-nicely. The last thing it reported was:
ERROR - 00:25:21: (StringSockets.cpp:351) FcgiSocket::writeAndRead FcgiError: unexpected fcgi header version 
But that didn't seem to matter or corrupt the Armory Database, so I think it's ok.
So, I get brave and change SDM.py as below, and I make sure my script has a command line for --ram-usage="ABCDE" and --thread-count="FGHIJ"; the logic being that these strings "ABCDE" will pass the IF criteria below, and my hardcoded values will be used...
if ARMORY_RAM_USAGE != -1: pargs.append('--ram-usage=1') #COMMENTED THIS, SO I CAN HARDCODE =1 # ' + ARMORY_RAM_USAGE) if ARMORY_THREAD_COUNT != -1 pargs.append('--thread-count=1') #COMMENTED THIS, SO I CAN HARDCODE =1 #' + ARMORY_THREAD_COUNT) 
So, as usual, I use my script and start this with: ./StartArm.sh
(which uses command line:)
python ArmoryQt.py --ram-usage="ABCDE" --thread-count="FGHIJ" --satoshi-datadir=/BlockChain/chain20180414/blocks --datadir=/ArmoryDataDi --dbdir=/ArmoryDataDidatabases 
(this forces it to use my hard-coded values in SDM.py...)
So, this is the command which it reports that it starts with:
(WARNING) SDM.py:400 - Spawning DB with command: /BitcoinArmory/ArmoryDB --db-type="DB_FULL" --cookie --satoshi-datadir="/BlockChain/chain20180414/blocks" --datadir="/ArmoryDataDi" --dbdir="/ArmoryDataDidatabases" --ram-usage=1 --thread-count=1 
Again, this is where it gets dangerous; Armory can gobble so much memory and CPU that the windowing environment can cease up. So I ssh to the machine and keep an eye on it with:
"free -h" 

Section 7

So, on the Debian Desktop PC, I inserted the USB stick with the watch-only wallet I exported from the Pi.
Start Armory...
Import "Entire Wallet File" watch-only copy.
Wait 4 hours..
YAY!!!
After running Armory for about 30m, the memory usage dropped by 400m... wierd...
It took ~2 hours to get 40% completion.
After 3.5 hours it's almost there...
The memory went up to about 1.7Gb in use and 900Mb of Swap, but the machine remained fairly responsive throughout, apart from a few (10?) periods at the start, where it appeared to freeze for 10-30s at a time.
(That's where my ssh session came in handy - I could check the machine was still ok with a "free -h" command)
Now, I can:
Create an unsigned transaction on my Desktop,
Save the tx to USB stick,
Move to the Pi,
Sign the tx,
Move back to the Desktop,
Broadcast the signed tx.

Section 8

My initial Mistake:
This caused me to have to roll-back my Armory database, using the backup. so you should try to avoid doing this..
On the Pi, I exported only the ROOT data, which will NOT capture the watching-only part of the Private Key
It is RECOMMENDED to use the Digital Export of Entire Wallet File from the Pi when making a watch-only copy. If you just export just the "ROOT data", not the "Entire Wallet File", you'll have problems if you used an imported Private Key in the offline wallet, like I did.
Using the ROOT data text import, after it finished... my balance was zero. So,. I tried a Help->Rescan Balance (Restart Armory, takes 1minute to get back up and running) No Luck. Still zero balance.
So, I try Rescan Databases.. This will take longer. Nah.. no luck.
So, I tried again, thinking it might be to do with the fact that I imported the text "root data" stuff, instead of following the (Recommended) export of watching-wallet file.
So, I used my Armory backup, and wound back the ArmoryDataDi to the point before the install of the (zero balance) wallet. (you should not need to do this, as you will hopefully use the RECOMMENDED approach of exporting the "Entire Wallet File"!)
submitted by fartinator to Bitcoin [link] [comments]

[Reupload][Tutorial] Install Armory Wallet 0.96.4 on Fedora Workstation 29

note: I had to reupload this because reddit is banning my original account for no reason. I appealed but I thought maybe someone wanted to have this content online.
Armory is a very cool open source bitcoin wallet for the power user. You can do neat things with it, read here: https://www.bitcoinarmory.com/
Disclaimer: follow these steps at your own risk. I am not responsible for any damage / loss of funds you might face for following or not following correctly my instructions here. I may have made a typo somewhere or be wrong so do your own research and learn for yourself what I am doing at each step, and what consequences may have for you, at your own risk. These instructions may be wrong somewhere. It worked for me, it doesn't mean it has to work for you.
Requirements for this tutorial:
We are going to build the code from source.
Install dependencies.
I followed these instructions to find the equivalent Fedora packages:
Open the terminal app and run this command:
sudo dnf install git nano qt qt-devel python-devel libtool pyqt4 pyqt4-devel lmdb swig 
And more python packages that I had to install:
sudo pip install twisted qt4reactor psutil 
Importing the signing key to verify the software
Install KGPG to easily manage keys.
sudo dnf install kgpg 
Go to
https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x8C5211764922589A
and copy paste the code below the title from
-----BEGIN PGP PUBLIC KEY BLOCK-----
to
-----END PGP PUBLIC KEY BLOCK-----
both included. Then open KGPG from terminal with
kgpg -k 
and click 'Import Key...' > Clipboard > Ok . You should see a confirmation message. Double check the info and close the dialog.
Repeat the process with this other key:
https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA4FC919E85C595BA
You can verify both keys are mentioned at the Armory webpage.
Clone and compile the code plus some edits
Before, we installed some dependencies that are named differently than the equivalent Ubuntu/Debian package specified at the Armory documentation. The build process fails for Fedora as the name for the dependency during checks won't match the Fedora version. There's this pull request addressing that, but the code is not part of any release yet.
So the fastest workaround (maybe a bit dirty) was to edit the build config file and correct the name for my Fedora install. Let's begin.
Clone the Armory repository
git clone https://github.com/goatpig/BitcoinArmory.git 
Enter the BitcoinArmory dir
cd BitcoinArmory 
Switch to release code
git checkout 'v0.96.4' 
Verify commit signature
git tag -v 'v0.96.4' 
you should see the following message:
> object fee1f91a3137ef1056e15cc606a186b0e508f84c > type commit > tag v0.96.4 > tagger goatpig  1522530739 +0200 > > v0.96.4 > gpg: Signature made Sat 31 Mar 2018 11:12:19 PM CEST > gpg: using RSA key 8C5211764922589A > gpg: Good signature from "goatpig (Offline signing key for Armory releases) " > gpg: WARNING: This key is not certified with a trusted signature! > gpg: There is no indication that the signature belongs to the owner. > Primary key fingerprint: 745D 707F BA53 968B DF63 AA8D 8C52 1176 4922 589A 
if it looks the same, everything is ok.
Edit the file 'Makefile' file with
gedit Makefile 
And click the three dot menu > Find and Replace...
Configure the options as follows:
https://i.imgur.com/hpS01Kd.png
Click Replace All and close.
Go back to the terminal and run the following commands in order from inside the BitcoinArmory dir. Wait for the previous one to finish before running the next one:
./autogen.sh 
...
./configure 
...
make 
if everything finishes without error you are all done! Run this to start Armory:
python ./ArmoryQt.py 
you are all set. Please let me know if I missed something.
submitted by RedditShadowbangedMe to Bitcoin [link] [comments]

[Tutorial] Install Armory Wallet 0.96.4 on Fedora Workstation 29

Armory is a very cool open source bitcoin wallet for the power user. You can do neat things with it, read here: https://www.bitcoinarmory.com/
Disclaimer: follow these steps at your own risk. I am not responsible for any damage / loss of funds you might face for following or not following correctly my instructions here. I may have made a typo somewhere or be wrong so do your own research and learn for yourself what I am doing at each step, and what consequences may have for you, at your own risk. These instructions may be wrong somewhere. It worked for me, it doesn't mean it has to work for you.
Requirements for this tutorial:
We are going to build the code from source.
Install dependencies.
I followed these instructions to find the equivalent Fedora packages:
Open the terminal app and run this command:
sudo dnf install git nano qt qt-devel python-devel libtool pyqt4 pyqt4-devel lmdb swig 
And more python packages that I had to install:
sudo pip install twisted qt4reactor psutil 
Importing the signing key to verify the software
Install KGPG to easily manage keys.
sudo dnf install kgpg 
Go to
https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x8C5211764922589A
and copy paste the code below the title from
-----BEGIN PGP PUBLIC KEY BLOCK-----
to
-----END PGP PUBLIC KEY BLOCK-----
both included. Then open KGPG from terminal with
kgpg -k 
and click 'Import Key...' > Clipboard > Ok . You should see a confirmation message. Double check the info and close the dialog.
Repeat the process with this other key:
https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA4FC919E85C595BA
You can verify both keys are mentioned at the Armory webpage.
Clone and compile the code plus some edits
Before, we installed some dependencies that are named differently than the equivalent Ubuntu/Debian package specified at the Armory documentation. The build process fails for Fedora as the name for the dependency during checks won't match the Fedora version. There's this pull request addressing that, but the code is not part of any release yet.
So the fastest workaround (maybe a bit dirty) was to edit the build config file and correct the name for my Fedora install. Let's begin.
Clone the Armory repository
git clone https://github.com/goatpig/BitcoinArmory.git 
Enter the BitcoinArmory dir
cd BitcoinArmory 
Switch to release code
git checkout 'v0.96.4' 
Verify commit signature
git tag -v 'v0.96.4' 
you should see the following message:
> object fee1f91a3137ef1056e15cc606a186b0e508f84c > type commit > tag v0.96.4 > tagger goatpig  1522530739 +0200 > > v0.96.4 > gpg: Signature made Sat 31 Mar 2018 11:12:19 PM CEST > gpg: using RSA key 8C5211764922589A > gpg: Good signature from "goatpig (Offline signing key for Armory releases) " > gpg: WARNING: This key is not certified with a trusted signature! > gpg: There is no indication that the signature belongs to the owner. > Primary key fingerprint: 745D 707F BA53 968B DF63 AA8D 8C52 1176 4922 589A 
if it looks the same, everything is ok.
Edit the file 'Makefile' file with
gedit Makefile 
And click the three dot menu > Find and Replace...
Configure the options as follows:
https://i.imgur.com/hpS01Kd.png
Click Replace All and close.
Go back to the terminal and run the following commands in order from inside the BitcoinArmory dir. Wait for the previous one to finish before running the next one:
./autogen.sh 
...
./configure 
...
make 
if everything finishes without error you are all done! Run this to start Armory:
python ./ArmoryQt.py 
you are all set. Please let me know if I missed something.
edit: cd git dir.
submitted by AmbitiousSpeed0 to Bitcoin [link] [comments]

Help! How to keep Armory off my C drive?

Hello!
I am installing the new version of Armory. My main C: drive is small and rather full so I try to keep stuff off it. I'd like to maintain all the Armory stuff on another drive but I can't seem to keep Armory from installing a bunch in my AppData folder on C.
In settings, I have the Bitcoin Install Dir: set to E:\Porgram Files\Bitcoin Bitcoin Home Dir: set to e:\E:\Users**\AppData\Armory Bitcoin Blockchain
Doesn't seem to be doing the trick. What else can I do? Any help appreciated!
submitted by artilekt to Bitcoin [link] [comments]

How to compile and run VanityGen Bitcoin tool in Ubuntu 14.04 Bitcoin Core Wallet Einstellungen auf Deutsch Disassembly/Reassembly of Springfield Armory Subcompact XD-9 Install Bitcoin Armory on an Offline Computer: Part 1 Install, Backup And Restore A Bitcoin Wallet. Or, Almost Any CryptoCoin Wallet (Windows)

Armory Cannot Find Bitcoin Installation; Open the armory cannot find bitcoin installation package of a new USB stick and run Startup Disk Creator, installing the ISO to bitcoin generator v2 4 download the USB stick and making it bootable.! Debug=net prune=10000 Your config file can have many options set, and armory cannot find bitcoin /usr/bin as installdir and /home/yourHomeDir/.bitcoin as "home-Dir" – Tommek Sep 16 '13 at 15:18 I did that, then restarted Armory and it did not start bitcoind. Armory just says "Offline" and I can't figure out how to make it "Online". NOTE. On 3 FEB 2016, Armory project transitioned from etotheipi to goatpig as the lead maintainer.Consequently, for latest news and release please see btcarmory.com or the Bitcoin Talk discussion thread. BEST BITCOIN WALLET. Armory is the most secure and full featured solution available for users and institutions to generate and store Bitcoin private keys. Armory Bitcoin Home Dir Ethereum R7 360 Dag Problem Install bitcoin armory armory bitcoin qt hoe geld verdienen pokemon go ubuntu phone This release is a minor release introducing many bug fixes and some ZC parsing will no longer occur while the BDM is initializing; Armory Bitcoin Install Dir. Ndalem natan; I've installed Bitcoin-QT successfully on regular Ubuntu running in VirtualBox on Bitcoin Core Installation Armory Wallet linux how to install bitcoin-qt wallet; Cold Storage is a Bitcoin wallet who's private keys have; Learn more Never miss a story from Poodle Blocked Unblock Follow Get updatesBJ-STAV

[index] [18860] [6492] [10220] [20911] [19875] [28374] [23525] [29811] [3914] [1648]

How to compile and run VanityGen Bitcoin tool in Ubuntu 14.04

Install, Backup And Restore A Bitcoin Wallet. Or, Almost Any CryptoCoin Wallet (Windows) ... Armory 46,941 views. 3:14. Recover your Bitcoin Core wallet password with btcrecover - Duration: 12:25. How to install Bitcoin Armory in Ubuntu 14.04 - Duration: ... Active Directory Tutorial for Beginners ... 13:59. How to install Bitcoin Core wallet in any Linux distribution - Duration: 4:28 ... Download For BD Armory: https://github.com/PapaJoesSoup/BDArmory/releases Download For Module Manager: https://drive.google.com/file/d/1XKzDZq5VsXTnMKBYm-pYX... Bitcoin Wallet Einstellungen mit dem Original Client Bitcoin Core 0.14.0 . Nach diesem Video kannst du Bitcoin empfangen und versenden. Die neuste Wallet Version kannst du hier Downloaden, auf der ... The Crypto Dad shows you how to set up a cold storage wallet using the Electrum Bitcoin wallet. We go through creating an “air-gapped” computer with no connection to the Internet. Then we ...

Flag Counter