Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bitcoin: Migrate away from Armory Wallet

Bitcoin: Migrate away from Armory Wallet

Previously I setup an Armory online/offline/cold/paper bitcoin storage system. Recently I decided to migrate my bitcoin from Armory wallet cold storage to the BIP39 and related standards. I hadn't switched on the offline PC in a long time, and neither had I updated the blockchain on the online PC. Thus, I started considering my recovery options should something have broken or gone missing. Below are some of the ways I found to recover and move bitcoin in such failure scenarios.

Armory Paper Backup -> Root Key

Version 1.35c

The single-sheet Armory paper backup directly displays the Root Key, e.g.:

Root Key:     nidh jtfj ejue whkj dngt dftt hsss idgh ssss
              wwad dojw aeja idfg went ukkk sajj uuwj kwjt

The Root Key is all you need to send bitcoin from that wallet without using Armory, see Armory Root Key -> Addresses and Private Keys

Version 1.35c - SecurePrint

The only way I know about at present is to install and run Armory on an OFFLINE PC and use the Armory wallet recovery. See Offline PC setup below. I will update if I find another way.

Version 1.35c - Fragmented

Same as above.

Armory Wallet -> Root Key

[ OFFLINE PC ]

  1. In Armory select the wallet from list. Click Wallet Properties button.
  2. Click Backup This Wallet link. (Click See Other Backup Options button.)
  3. Choose Export Key Lists radio. Click Export Key Lists button.
  4. Tick Include Paper Backup Root.
  • You can also tick Adresses String and Private Key (Plain Base58) to immediately get a list of the addresses that Armory knows that you have used, but it is possible to get them later without using Armory. Keep private keys secret, do not use on an online PC.
  1. The window at the bottom will show the Root Key and other wallet attributes, e.g.:

     Created:       2017-Apr-14 07:24pm
     Wallet ID:     23gXywZJw
     Wallet Name:   Demo
     
     --------------------------------------------------------------------------------
     The following is the same information contained on your paper backup.
     All NON-imported addresses in your wallet are backed up by this data.
     
     Root Key:     nidh jtfj ejue whkj dngt dftt hsss idgh ssss
                   wwad dojw aeja idfg went ukkk sajj uuwj kwjt
     --------------------------------------------------------------------------------
    

    CAUTION: keep the root key secret and do not use on an online PC.

  2. The Root Key is all you need to access the bitcoin in all addresses of the wallet, except any imported addresses. Be sure that you have a paper copy of the Root Key - KEEP IT SAFE!.

Armory Root Key -> Addresses and Private Keys

The Armory wallet Root Key is the one stored on your paper backup

[ OFFLINE PC ]

  1. Open the .html file that you saved from from https://brainwalletx.github.io with a web browser. See Offline PC setup below.

  2. Select Chains. Select Generation Method as Armory.

  3. Type or paste your Root Key into the Paper Backup field. You should see the other fields update.

  4. Select Wallet Format as CSV.

  5. Below in Chain you will see the first 10 addresses and private keys for the wallet, e.g:

      | Address                             | Private Key
    1, "19M4vKEB53xbLhrgbnR9kFaAHQQ2325Gzm", "5Jim41weU9weqrZZnbF5bvn1Xx585uK2biFN4eq8oMD6UkopVBi"
    2, "1DkaYhLHygTt29vqxdhvdh9gifsqoENae2", "5Hu8rGTy3mW5JMSCL6QTA5KAW6kD5PsXUQYn3RkkdpTTCdsrhq8"
    3, "1E1XbVwMcgdjuyDMQh1o98F9YgHy1hPYMU", "5JJCfCWzqc2gYDkKwYggc8m6NJWbo7MgXetKp1WMybpN3wnZ1Mv"
    4, "1C2ZgrkSTguf2awWZRf3NvC4a46V7sckeZ", "5Kj6Wi22PEufWGuR9LZAK9MoUWZcrcFbavhGorsurg77eK5gBey"
    5, "1JiNkgnkmrqAJ2YrrBa11KsBMEfjGNtpEG", "5JoFWoE4aTtaXW2d3XikevQaBruzWUs81SJga3wXoqHVqpTMTUs"
    6, "1s7hP3RyE6MatNxxaj5xN7fMyrQeDqk2m", "5Jxm27EWCpa5JzDwXGscSJXiVSPFWLc7ibZcALwsmYsZSL78hWr"
    7, "1KzQkypw24QNgFf9t3q4HZLZtioR4Uf9T7", "5KkCunRN6KLxM5Li8rYQmcBcJZQdCQjC7AevZbEDg6yPWuXSoPP"
    8, "1CcpLdrsdfkD2gQcZyHJomT8vnwXjKDyoJ", "5J6omKWRChFCGYUyL3DYcEXc31mKipncDzgDRgTCUCsEzqwNKbD"
    9, "1HNKftQEkSDMyYVYv48NbEiUZkd34prFut", "5KSuArCYhfnCijQ6X5uy7ms1K8Up1XXwcxQuiX229pmTeaDTYBF"
    10, "18zdaDMQEP42ea6vN3ojQZafD4BSJQ2rGK", "5KipHvcSEwix3uZAw3Fm9roAwcJJ7uPR6MvNP8FnXtsHH1jEccy"
    

    CAUTION: keep the private keys secret and do not use on an online PC.

  6. If you want to lookup the value an address copy it to your online PC and search for it on https://blockchain.info/. Do not expose your private keys to the online PC.

  7. To see more addresses increase the value in Primary Addresses.

Unfortunately, if you previously used the wallet a lot and generated a large number of addresses then this method, although it will work, is going to be very time consuming. At present I'm not aware of an easy way to do this other than setting up a full Armory online/offline system.

Make a Raw Bitcoin Transaction

Using only a Private Key

In the unusual situation that you don't happen to have the address for a private key it is easy to derive it from the private key.

[ OFFLINE PC ]

  1. Open the .html file that you saved from from https://brainwalletx.github.io with a web browser.See Offline PC setup below.
  2. Select Generator. Select Get Address From as Private Key.
  3. Paste the private key into Private Key textbox. You may have to click Toggle Key to make it visible.
  4. Now Address should show the wallet address.

Using an Address and a Private Key

[ online PC ]

  1. On an online PC open: https://brainwalletx.github.io in your browser.

  2. Select Transactions. Select Build Transaction From as Private Key.

  3. Paste the address into Source Address (e.g.: 19M4vKEB53xbLhrgbnR9kFaAHQQ2325Gzm). Then click OK on the popup asking to download the transaction history. The BTC should show the bitcoins currently in that address. If get a popup saying No free outputs to spend, there are no bitcoin in that address to send.

  4. Click Edit History. Select Use History From as BlockChain Info.

  5. If the address contains bitcoin, Transaction History should show JSON, e.g.:

    {
        "unspent_outputs": [
            {
                "tx_hash": "684462171be1baf98c968458aa2ada2603fee1424ebd89487b058a3e5fa915e9",
                "tx_hash_big_endian": "e915a95f3e8a04bb4889bd4e42e1f313267a2aaa5894968cf9bae11b17624568",
                "tx_index": 237208244,
                "tx_output_n": 1,
                "script": "76a91441c46612a4c71b6c4463e7df1dc19175c9ab95f087ac",
                "value": 2173722,
                "value_hex": "212b1a",
                "confirmations": 51
            }
        ]
    }
    
  6. Copy the Transaction History and the destination address to your offline PC.

[ OFFLINE PC ]

  1. Open the .html file that you saved from from https://brainwalletx.github.io with a web browser, see Offline PC setup.
  2. Select Transactions. Select Build Transaction From as Private Key.
  3. Click Edit History. Select Use History From as BlockChain Info.
  4. Paste the Transaction History JSON into the textbox.
  5. Paste the Private Key for the address into the text box above (e.g.: 5Jim41weU9weqrZZnbF5bvn1Xx585uK2biFN4eq8oMD6UkopVBi ).
  6. The Source Address should show the address you used to lookup the transaction history, and BTC should show the available balance.
  7. Paste the Destination Address into the text box, and enter the amount of bitcoin you wish to send in BTC.
  8. JSON Transaction and RAW Transaction below should now be populated.
  9. Scroll down and enter the miner Fee.
  • If it is too small, the miners may take a long time, or forever, before they process the transaction. Thus, you need to determine an appropriate fee for the transaction. The fees vary from time to time. There are some online services that can help you determine the correct fee, e.g.: https://bitcoinfees.21.co/. JSON Transaction shows the transaction "size": ???.
  1. Review and double check that everything is as it should be.
  2. Copy Raw Transaction to your online PC.

[ online PC ]

If you first want to verify that you have copied the transaction correctly:

  1. On an online PC open: https://blockchain.info/decode-tx in your browser.
  2. Paste the Raw Transaction into the textbox and click Submit Transaction.
  3. Verify that the JSON output is the same as JSON Transaction on your OFFLINE PC.

Now, to send the transaction to the network:

  1. On an online PC open: https://blockchain.info/pushtx in your browser.
  2. Paste the Raw Transaction into the textbox and click Submit Transaction.
  3. Then lookup the address on https://blockchain.info/ to watch the status of the transaction.

Offline PC setup

To ensure that no malicious software can steal the secret parts of your wallets and addresses it is important to perform some operations on a PC that does not have any connection to the outside world, and never will.

This includes moving any storage medium from an offline PC to an online PC. There could be some malicious software on your offline PC writing your private keys to the inserted removable media. Other techniques to copy data to and from your online PC can be used, including QR Codes. However, in this exercise I just used a USB stick and trusted that my offline PC would not write any secret information to the stick.

There are various ways to achieve an offline PC, do your research. This guide may require you to have the following installed on your offline PC:

  • Brainwallet tool:
  1. On an online PC open: https://brainwalletx.github.io in your browser.
  2. Save the page to a USB disk with File -> Save Page As ..., and copy it onto your OFFLINE PC, be sure to copy both the .html file the simlarly named folder.
  • Armory: To decode Armory .wallet files, SecurePrint or fragmented paper backups, the easiest method I've foud so far is just to use the application.
  1. On an online PC download Armory.
  2. Copy it onto your OFLINE PC and install it there.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment