Ledger
A Ledger is a hardware wallet used to securely store your crypto assets offline. The private key used to sign transactions never leaves the Ledger device, so even if your machine or wallet is compromised, your private key is never leaked.
Using Ledger for Iron Fish will enable you to manage IRON as well as any other Iron Fish asset on the Ledger device. There are two flows that will be described in this tutorial: the single-signer flow, which is the most common type of wallet, or the multi-sig wallet flow allowing a wallet to be controlled by a number of participants.
If you have any questions on how to use your Ledger for Iron Fish assets, please reach out on our Discord in the questions channel.
Video Walkthrough Tutorial
The video walkthrough tutorial for both single-signer flow using the Ironfish Ledger app as well as the multi-sig wallet flow using the Ironfish DKG app can be found here:
Single Signer Ledger Flow
Requirements
You’ll need the latest version of the Node App to see the balance, transaction history, and facilitate creating transactions for your Ledger wallet. Please make sure to always have your Iron Fish Node App up to date. Installing a new version will preserve all your chain and wallet history.
For your Ledger device, make sure to:
- Install Ledger Live
- Set up your Ledger device
- Connect your device and check for any updates
Installation
You’ll need a non-deprecated Ledger device that is set up with the Ironfish app.
To install the Ironfish app on your Ledger:
- Open the Manager in Ledger Live.
- Connect and unlock your Ledger Device.
- If asked, follow the onscreen instructions and Allow Ledger Manager.
- Find Ironfish in the app catalog.
- Click the Install button. Your device will display Processing… and then the app installation is confirmed
- Close Ledger Live.
Import the View Key for your Ledger Account into the Node App
For the most common flow involving a single signer, you’ll need the Iron Fish Node App. Make sure it’s up to date by either opening up the app and having it update, or installing the latest version. Updating the Node App still preserves all your chain and wallet data.
To connect your Iron Fish Node App to your Ledger, click on '+ Add Account' button on the top right, and click 'Connect Ledger'
The Node App will then prompt you to unlock your device and approve sharing the view keys about your Ledger account with the Node App. Iron Fish is a full privacy chain, and Iron Fish accounts have private keys for signing, public keys for requesting funds, and view keys for revealing balance, revealing transaction history, or creating unsigned transactions. Importing the Ledger view key therefore gives the Node App the ability to give you your balance while the private key that’s needed to finalize the transaction through signing never leaves the Ledger device.
How to View Account Balance
After you’ve imported the view key for your Ledger wallet, you should see your Ledger wallet displayed as a view only account in the Node App. It’ll take a few moments for your wallet to sync. After it’s synced, you should see your wallet balance displayed in the Node App.
How to Receive Funds
After importing the Ledger account into the Node App, you can find the public address for that wallet either by clicking on the public address below account name to save it to your clipboard, navigating to wallet details or by going to the Receive tab:
How to Send Funds
To send funds, you can either click on the 'Send' button directly, use the 'Send' tab, or navigate to the wallet details and click on the 'Send' button from there:
You’ll then be able to construct your transaction:
You’ll be prompted to fill in the To input field for the receiving public address, which Asset you’re sending if your wallet has multiple assets, the Amount you’re sending, the Fee (with suggested amounts for fast/medium/slow transaction times), and an optional Memo field to describe the transaction (only visible to sender/recipient).
After clicking on the 'Send Asset' button, you’ll need to review and approve the transaction on the Ledger device. If anything looks incorrect, you’ll have the chance to reject the transaction.
Iron Fish is a UTXO model, so a transaction consumes and produces new Notes (e.g. UTXOs). During the review process on the Ledger device, you’ll see those Notes being consumed or created and the corresponding 'AssetID', 'Amount', 'Owner' for that note displayed:
Please note that amounts in Iron Fish are displayed without decimal points, meaning that 1 IRON will be displayed as 10000000 since Iron Fish has 8 decimal points for precision.
Multi-signature Wallet Ledger Flow
Requirements
For the Multi-signature Ledger flow you’ll need the Node App as well as the Iron Fish CLI. The easiest way to install the Iron Fish CLI is through NPM. If you already have NodeJS on your computer, you can install Iron Fish CLI by simply running the command:
npm install -g ironfish
For full instructions, please reference the installation docs.
For your Ledger device, make sure to:
- Have Ledger Live installed
- Set up your Ledger device
- Connect your device and check for any updates
Installation
You’ll need a non-deprecated Ledger device that is set up with the Ironfish DKG app.
To install the Ironfish DKG app on your Ledger:
- Open the Manager in Ledger Live.
- Connect and unlock your Ledger Device.
- If asked, follow the onscreen instructions and Allow Ledger Manager.
- Find Ironfish DKG in the app catalog.
- Click the Install button. Your device will display Processing… and then the app installation is confirmed
- Close Ledger Live.
How to create your Multi-Sig Wallet
To create a multi-sig wallet you’ll need information from other participants. Let’s run through an example of how to create a multi-sig wallet that’ll have 3 participants, and will need at least 2 of them to sign a transaction to move funds out of that wallet (e.g. a 2 of 3 multi-sig). One of these participants in this example is going to be using their Ledger and the Ironfish DKG app.
Please note that the highest number of participants that is currently supported is 4 participants.
First, we’ll create the two other participants that are not using Ledger (in this example we’ll use Alice and Bob).
Creating Alice’s portion for the multi-sig wallet
Alice will use the Iron Fish CLI tool to create her identity using the server service to broker the interactive part of creating a multi-sig wallet.
ironfish wallet:multisig:dkg:create --name dkg-alice --server
- the
--name
flag gives this wallet a human-readable name or label - the
--server
flag uses the server broker service to streamline the interactive part of creating a multi-sig wallet. If for some reason you want to do this step manually, see the documentation for that here.
The initial output of this command will give you a DKG session connection string that you can give to other participants to streamline the interactive part of making a multi-sig wallet:
Creating Bob’s portion for the multi-sig wallet
Using the session ID that Alice would provide, Bob can create his own multi-sig wallet by running the command:
ironfish wallet:multisig:dkg:create --name dkg-bob -c <connection session ID string>
- the
--name
flag gives Bob a human readable label for his wallet - the
-c
flag gives Bob the ability to use the session ID string that Alice gave him to streamline the interactive portion of creating a multi-sig account
Creating a portion for the multi-sig wallet using Ledger
To create a Ledger multi-sig account:
ironfish wallet:multisig:dkg:create --name ledger-dkg --ledger -c <connection session ID string>
- the
--name
flag allows you to give this wallet a human readable name or label - the
-c
flag gives you the ability to use the connection session ID string to streamline the interactive portion of creating the multi-sig account with other participants - the
--ledger
flag indicates that this portion of the multi-sig wallet is going to live on Ledger such that signatures approving transactions for this wallet will only be created within the Ledger device for this participant
Since the secret seed for approving transactions for this wallet lives in Ledger, you’ll have to manually approve 'Round 1','Round 2' and 'Round 3' on your Ledger device to interactively create this multi-sig wallet with the other two participants (in this example Alice and Bob).
After approving the three interactive Rounds on your Ledger device, you’ll see the prompt to save your Backup DKG Keys on the Ledger device and verifying once again that you’ve created a 2 of 3 multi-sig account and its newly created public address. This public address can now be used to receive funds.
Please note that the highest number of participants that is currently supported is 4 participants.
Add your Ledger Multi-Sig Account into the Iron Fish Node App
The easiest way to interact with the multi-sig Ledger wallet after creation is by using the Iron Fish Node App. In order for us to use the Node App, we’ll first need to import the newly created Ledger multi-sig wallet. As of now, importing the Ledger DKG multi-sig wallet is only enabled on the CLI tool with this command:
ironfish wallet:import --ledger --multisig
(Please note if you’re on an older version of the Iron Fish CLI tool, the is going to be ironfish wallet:multisig:ledger:import
. You’ll also need to make sure that the Node App is not open when you’re importing the wallet).
After you’ve run this command to import your Ledger multi-sig wallet, you can open the Node App and see that it’s there as a view-only account:
How to Receive Funds
During multi-sig account creation, you’ll see the Public Address associated with this Ledger multi-sig account. This is the Public Address that you can use to request funds.
To receive funds you can retrieve the Public Address by either clicking on the clipboard button below the wallet name, clicking into the wallet to see more details, or by clicking on the 'Receive' button. Note that this is the same Public Address you’ve witnessed on the Ledger device during account creation.
How to Send Funds
After adding your Ledger multi-sig account into the Iron Fish Node App, we can then construct unsigned transactions for that multi-sig wallet in the Node App, use the Ledger device to product a signature share, and then aggregate signatures from other participants to sign and broadcast it out.
Constructing an unsigned transaction
First, navigate to the 'Multisig Ledger' tab on the left navigation, and click on 'Create Transfer Transaction' tab. Fill in the recipient, asset type, amount, fee, and optional memo, and click on the 'Create Unsigned Transaction' button.
This will produce an unsigned transaction that you can then share out with other participants:
For other participants, you’ll also be prompted to enter in their Identity (this would be either Alice or Bob in this example):
And then you’ll be able to review and sign this transaction on your Ledger device. Please make sure to review all details of the transaction on your Ledger device during this step:
The other participant(s) in this transaction would also have to provide their signature commitments and shares:
After signature shares from the minimum number of participants required for this transaction are shared and aggregated in the Node App, the transaction can be submitted to the Iron Fish network:
Where to Ask for Help
The best way to ask for help is through our Discord questions channel. If email is preferred, you can also reach out at contact@ironfish.network.