Skip to main content

Configure a Wallet

You’ll need an owner wallet to:

  • Stake your Helium (HNT)
  • Receive validator node consensus group rewards
info

You can have a single wallet for multiple validator nodes. However multiple wallets for a single validator node is not supported. A single stake transaction from a single wallet must be used to stake a validator.

warning

Do NOT run or store the helium-wallet or wallet.key file on your validator. Backup the wallet.key file and protect the password used to create the wallet.

Download the command line wallet application from the Helium wallet-rs github release page and choose the appropriate architecture for your environment. Download the associated architecture .checksum file.

Before running wallet commands, verify the integrity of the downloaded helium-wallet archive. For example, run sha256sum helium-wallet-v1.6.4-x86-64-macos.tar.gz and verify the resulting checksum matches the checksum provided in the helium-wallet-v1.6.4-x86-64-macos.checksum file.

The sha256sum binary is included in linux and MacOS distributions. For Windows users, run certUtil -hashfile .\helium-wallet-v1.6.4-x86-64-win.zip SHA256 to produce the sha256sum.

Wallet Commands

At any time use -h or --help to get more help for a command.

Create a Wallet

./helium-wallet create basic

Create or Use Wallet without Password Input

For security reasons, it is generally recommended that you type in your password every time. Storing the password in an environmental variable makes it very easy for the password to get compromised. Sometimes though, despite the security risks, you may want to interact with the CLI without inputting the password. In this case, using the environmental variable HELIUM_WALLET_PASSWORD enables this.

HELIUM_WALLET_PASSWORD=p4ssw0rd ./helium-wallet create basic

View wallet balance and public key

./helium-wallet info view public key and HNT balance.

warning

Always make sure to inspect the transaction before adding the --commit option to sign and submit it to the api. There is no undo.

Stake Tokens

After you have received your HNT you need to stake these tokens.

As part of the staking process the validator node address needs to be in the staking transaction and also needs to sign the transaction. After a wallet stakes a validator node, the wallet becomes that node’s owner, has control over that validator node, and receives rewards.

To stake tokens perform the following:

  • Obtain the validator node address:

    • On the validator, run miner peer addr. This will produce something like: /p2p/112sSfUCQrVNAfFKVZWUSCeLs67wH8o1xz4yj4nKSPJKBT8bUkXi

    In this example the part following the final slash is the validator node's public address: 112sSfUCQrVNAfFKVZWUSCeLs67wH8o1xz4yj4nKSPJKBT8bUkXi.

  • Stake single Validator with the HNT:

    • ./helium-wallet validators stake one <public-address> 10000

Use --commit after preview to submit the transaction to network.

Stake multiple validators with one command

To stake multiple validators with one command you can use the following command with the CLI wallet:

$ helium-wallet validators stake multi ./path/to/file/whale.json

The path parameter is the path to a JSON formated file with all the validator addresses and the amount to stake them with. Here is an example of the JSON format:

[
    {
        "address": "<adddress1>",
        "stake": 10000,
    },
    {
        "address": "<adddress2>",
        "stake": 10000
    }
]

The transaction is not submitted to the system unless the --commit option is given.

warning

This command sequentially walks through the JSON and stakes one validator at a time. If this command errors out all further staking transactions will abort.

List Associated Validators

It's possible to view a list of associated validators to a wallet, along with their current status. ./helium-wallet validators list will produce a table similar to below:

+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+
| Address                                             | Owner                                               | Stake          | Status |
+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+
| 1Za3L1R32qPJJ546kteo7WP9t2DzWtTMw5u9jKfpJxZ9bswTgVG | 1a58oCFw79zAZCdkVBvnFSjqx7QM5FzSW5ppMVCf1HJeu8g1ywS | 10000.00000000 | staked |
+-----------------------------------------------------+-----------------------------------------------------+----------------+--------+

This can be helpful in verifying staked validators or validators currently in cooldown after being unstaked.

Unstake Tokens

If you unstake tokens the validator node enters a stake cooldown period. During this cooldown period the validator node will not earn rewards and at the end of the cooldown period (currently 250,000 blocks or approximately 5.7 months in mainnet) your initial staking amount will be released to the wallet.

To ensure the operator understands this unstake operation is not reversible and cannot be shortened, there are additional calculations to be performed in the unstake command. You need to include the stake release block height which should be at least the current block height plus the cooldown period, and 5-10 blocks to allow for chain processing delays.

For example, if the current block height was 5000, you'd add 250,000 for the stake withdrawl cooldown period, plus an additional 10 blocks to allow for chain processing delays. Therefore the stake-release-height = 5000 + 250000 + 10 or 255010.

The cooldown length, in blocks, is called stake_withdrawal_cooldown and is a chain variable. This variable is viewable by running miner ledger variables stake_withdrawal_cooldown.

To unstake tokens from a validator node perform the following:

Obtain the validator node public address as described in the stake command and calculate the stake-release-height as defined above.

./helium-wallet validators unstake <public-address> --stake-release-height <stake release height>

Use --commit after previewing to submit the transaction to network. If you wait too long to commit, you may need to recalculate the stake-release-height value.

To check the status of the unstake transaction, it's possible to copy the received hash into the Explorer, or query the API transaction. A successful unstake transaction will also change the status to cooldown when viewing associated validators to the wallet.

warning

Once the unstake command is committed, this cannot be reversed. The validator will cease earning rewards and the stake amount will not be returned to the staking wallet until the 250,000 block cooldown period has completed.

info

Once a validator has been successfully unstaked, it cannot be staked again. The validator may be stopped and deleted, including the swarm_key. Wallet commands to stake this validator's public address again will fail.

Transfer stake

A validator node's stake can be transferred to other validator nodes in the same wallet or a different one.

If the stake is transferred to a validator node in a different wallet, the owner of the other wallet must accept the transfer to complete the transaction.

To transfer stake to a new validator node in the same wallet:

./helium-wallet validators transfer create --new-address <new-public-address> --old-address <old-public-address>

Use --commit after previewing to submit the transaction to network.

This will produce an output similar to the following:


{
  "amount": 0.0,
  "fee": 55000,
  "hash": "q4Q7WTT0lD-EyjVFsW8hhdIw8Js339TgZpwTdA8_uPs",
  "new_address": "1ZFavPP8drcqAXJPT6mLuZQqwjWNhWGr9vJ3Ajs3uJyFGW7sUMX",
  "new_owner": "current",
  "old_address": "1YpifvrQWUFoHDGyYZoA2FAxmXPNcMNjnRd27uv81t8CzBBNW85",
  "old_owner": "1aXQ6WyNkibzhHXCFYiJQAa3BEkJnbZFsuezo4qjpW7FAgDw9Xx",
  "txn": "8gGvAQohEF7t+Kbveqj9hsmO9c/3krgGUVnL8rHv8Eg29JMiE8IGEiEQl2RGoxd+aznItHIVxL7Qizw0ng3t4tcA2kZA7mPqJMcaIRE+/nQNU16ZXpbzMmszzlSw+AiGAXeKg0q7kx1DdLlY7ypAM4Zz4UOX4tKcg2y079UGPhQ99hi8lSZwAwAUjxNMO9jGk5pGA1wP1BqidFWqtcPrIGuom+mdrOQLdEuBU0rFBDjYrQM="
}

To transfer stake to a new validator node in a different wallet:

./helium-wallet --format json validators transfer create --new-address <new-public-address> --old-address <old-public-address> --new-owner <new-owner-wallet-public-address>

Note: you must transfer the stake to a new validator node.

This will produce an output similar to the following:

{
  "amount": 0.0,
  "fee": 60000,
  "hash": null,
  "new_address": "1YeCAsuBq3fDTv8x4iB1fJn9zBbopHhjhXGpvVwN43JDptqMT11",
  "new_owner": "1bBTWn843DwTXTyH3hbSMmDoJXHCU1D1U8cAYRdVE5rDnaS7fLb",
  "old_address": "1ZFavPP8drcqAXJPT6mLuZQqwjWNhWGr9vJ3Ajs3uJyFGW7sUMX",
  "old_owner": "1aXQ6WyNkibzhHXCFYiJQAa3BEkJnbZFsuezo4qjpW7FAgDw9Xx",
  "txn": "8gHSAQohEJdkRqMXfms5yLRyFcS+0Is8NJ4N7eLXANpGQO5j6iTHEiEQRwd/IDnFy67A2NbC3IyYvLZUrsAojyJH85aeNi3SLA0aIRE+/nQNU16ZXpbzMmszzlSw+AiGAXeKg0q7kx1DdLlY7yIhEZVpU2QzwJ1SmikaTlSEyKCQ5mCRx/xOIUAsw5MYPIsWKkD3+X75w1+267InX30CD077Y8X3JK31FEg/X1bSpFehIQa6eY/DqfDEfDjLyq6UHpxsfBEE8M0zGs9okipefnAOOODUAw=="
}

You'll then need to send the txn value (a base64 string) to the new owner to be accepted.

To accept the transfer the new owner performs the following:

./helium-wallet validators transfer accept --commit <txn>

info

Once a validator has had a stake transferred from it, it cannot be staked again. The validator may be deleted, including the swarm_key. Wallet commands to stake this validator's public address again will fail.

More general wallet commands here.