Delegator CLI Guide

This document contains all the necessary information for delegators to interact with the PundiX through the Command-Line Interface (CLI).

It also contains instructions on how to manage accounts, restore accounts from the fundraiser and use a ledger nano device.

Installing pundixd

pundixd: This is the command-line interface (CLI) to interact with a pundixd full-node.

Please check that you have downloaded the latest stable release of pundixd

Install from source

pundixd can be interacted with via a terminal. To open the terminal, follow these steps:

  • Windows: Start > All Programs > Accessories > Command Prompt

  • MacOS: Finder > Applications > Utilities > Terminal

  • Linux: Ctrl + Alt + T

PundiX Accounts

At the core of every PundiX account, there is a seed, which takes the form of a 12 or 24-words mnemonic. From this mnemonic, it is possible to create multiple PundiX accounts, for example pairs of private key/public key. This is called an HD wallet (see BIP32 for more information on the HD wallet specification).

     Account 0                         Account 1                         Account 2

+------------------+              +------------------+               +------------------+
|                  |              |                  |               |                  |
|    Address 0     |              |    Address 1     |               |    Address 2     |
|        ^         |              |        ^         |               |        ^         |
|        |         |              |        |         |               |        |         |
|        |         |              |        |         |               |        |         |
|        |         |              |        |         |               |        |         |
|        +         |              |        +         |               |        +         |
|  Public key 0    |              |  Public key 1    |               |  Public key 2    |
|        ^         |              |        ^         |               |        ^         |
|        |         |              |        |         |               |        |         |
|        |         |              |        |         |               |        |         |
|        |         |              |        |         |               |        |         |
|        +         |              |        +         |               |        +         |
|  Private key 0   |              |  Private key 1   |               |  Private key 2   |
|        ^         |              |        ^         |               |        ^         |
+------------------+              +------------------+               +------------------+
         |                                 |                                  |
         |                                 |                                  |
         |                                 |                                  |
         +--------------------------------------------------------------------+
                                           |
                                           |
                                 +---------+---------+
                                 |                   |
                                 |  Mnemonic (Seed)  |
                                 |                   |
                                 +-------------------+

The funds stored in an account are controlled by the private key. This private key is generated from the mnemonic using a one-way function. If you lose the private key, you can retrieve it using the mnemonic. However, if you lose the mnemonic, you will lose access to all the derived private keys. Likewise, if someone gains access to your mnemonic, they gain access to all the associated accounts.

The address is a public string with a human-readable prefix (for example px1hs3tfedle32zzr5dh38gzzfn9ak2f4a9je4pf6) that identifies your account. When someone wants to send you funds, they send it to your address. It is virtually computationally impossible to derive the private key from a public address.

On Ledger Device

At the core of a ledger device, there is a mnemonic used to generate accounts on multiple blockchains (including the PundiX). When you first initialize your ledger device, you will create a new mnemonic. It is possible to import an existing mnemonic into a ledger device instead. Let us go ahead and see how you can import a mnemonic into your ledger device. For more on how to restore from a recovery phrase, refer here.

To import a mnemonic into a ledger, it is preferable to use a brand new ledger device. There can only be one mnemonic per ledger device. If you want to use a ledger that is already initialized with a seed, you can reset it by going into Control Center>Settings>Security>Reset Device. More on how to reset your ledger device can be found here. Please note that this will wipe out the seed currently stored on the device. If you have not properly secured the associated mnemonic, you could lose your funds!!!

The following steps need to be performed on an un-initialized ledger device:

  1. Ensure ledger live is downloaded and installed.

  2. Press the button next to the USB port until the Ledger logo appears to turn on the device.

  3. Read the on-screen instructions. Press the right button to proceed or the left button to go back.

  4. Press both simultaneously when Set up as new device is displayed.

  5. DO NOT choose the "Config as a new device" option. Instead, choose "Restore Configuration"

  6. Choose a PIN

  7. Choose the 24 words option

  8. Input each of the words in the correct order.

Your ledger is now correctly set up with your imported mnemonic! DO NOT lose this mnemonic! If your ledger is compromised, you can always restore a new device again using the same mnemonic.

Next, click here to learn how to generate an account.

On a Computer

It is more secure to perform this action on an offline computer.

To restore an account using a mnemonic and store the associated encrypted private key on a computer, use the following command:

  • <_key_name> is the name of the account. It is a reference to the account number used to derive the key pair from the mnemonic. You will use this name to identify your account when you want to send a transaction.

  • You can add the optional --index flag to specify the path (0, 1, 2, ...) you want to use to generate your account. By default, account 0 is generated.

The private key of account 0 will be saved in your operating system's credentials storage. Each time you want to send a transaction, you will need to unlock your system's credentials store. If you lose access to your credentials storage, you can always recover the private key with the mnemonic.

Creating an Account

To create an account, you just need to have pundixd installed. Before creating it, you need to know where you intend to store and interact with your private keys. The best options are to store them in a dedicated offline computer or a ledger device. Storing them on your regular online computer involves more risk, since anyone who infiltrates your computer through the internet could gain access to your private keys and steal your funds.

Using a Ledger Device

When you initialize your ledger, a 24-word mnemonic is generated and stored in the device. This mnemonic is compatible with PundiX and PundiX accounts can be derived from it. All you have to do is make your ledger compatible with pundixd. To do so, you need to go through the following steps:

  1. Download the Ledger Live app here.

  2. Connect your ledger via USB and update to the latest firmware

  3. Go to the ledger live app store, and download the "PundiX" application (this can take a while). You may have to enable Dev Mode in the Settings of Ledger Live to be able to download the "PundiX" application.

  4. Navigate to the PundiX app on your ledger device

Then, to create an account, run the following command:

This command will only work while the Ledger is plugged in and unlocked.

  • <_key_name> is the name of the account. It is a reference to the account number used to derive the key pair from the mnemonic. You will use this name to identify your account when you want to send a transaction.

  • You can add the optional --index flag to specify the path (0, 1, 2, ...) you want to use to generate your account. By default, account 0 is generated. Just remember to take note of the accounts and index you have stored the keys in your ledger.

You can generate more accounts from the same mnemonic using the following command:

This command will prompt you to input a passphrase as well as your mnemonic. Change the account number to generate an account with a different index.

After you have secured your mnemonic (triple check!), you can delete bash history to ensure no one can retrieve it:

Accessing the PundiX Network

In order to query the state and send transactions, you need a way to access the network. To do so, you can either run your own full-node, or connect to an available public node.

Running Your Own Full-Node

This is the most secure option, but comes with relatively high resource requirements and costs. In order to run your own full-node, you need good bandwidth and at least 500GB of disk space.

You will find the tutorial on how to install pundixd here, and the guide to run a full-node here.

Connecting to a Remote Full-Node

If you DO NOT want or cannot run your own node, you can connect to someone else's full-node. You should pick a full-node operator that you trust, because a malicious operator could return incorrect query results or censor your transactions. However, they will never be able to steal your funds, as your private keys are stored locally on your computer or ledger device. Possible options for full-node operators include validators, wallet providers or exchanges.

In order to connect to a full-node, you will need an address in the form of: https://127.0.0.1:26657 (This is a placeholder). This address has to be provided by the full-node operator you choose to trust. You will use this address in the following section.

Setting Up pundixd

Before setting up pundixd, ensure that you have found a way to access the PundiX network

Please check that you are always using the latest stable release of pundixd.

pundixd is the tool that enables you to interact with the node that runs on the PundiX network.

In order to set up pundixd, use the following command. It allows you to set a default value for each given flag. First, set up the address of the full-node you want to connect to:

If you run your own full-node, just use tcp://localhost:26657 as the address.

Then, let us set the default value of the --trust-node flag:

Finally, let us set the chain-id of the blockchain we want to interact with (chain-id for testnet is payalebar):

Querying the State

Before you can bond PUNDIX and withdraw rewards, you need to set up pundixd

pundixd lets you query all relevant information from the blockchain, like account balances, amount of bonded tokens, outstanding rewards, governance proposals and more. Next is a list of the most useful commands for delegators.

For more commands, just type:

For each command, you can use the -h or --help flag to get more information.

Sending Transactions

A Note on Gas and Fees

Transactions on the PundiX network need to include a transaction fee in order to be processed. This fee pays for the gas required to run the transaction. The formula is as such:

The gas is dependent on the transaction. Different transactions require a different amount of gas. The amount of gas needed for a transaction is calculated when it is being processed, but there is a way to estimate it beforehand by using the auto value for the gas flag. Of course, this only fills in an estimate for the gas of that particular transaction. You can adjust this estimate with the flag --gas-adjustment (default 1.2) if you want to be sure you have provided enough gas for the transaction. For the remainder of this tutorial, we will use a --gas-adjustment of 1.5.

The gas-prices is the price of each unit of gas. Each validator sets a min-gas-price value, and will only include transactions that have a gas-prices greater than the min-gas-price they have set initially.

Transaction fees is the product of gas and gas-prices. As a user, you can either just fill in the fees required or you have to fill in both the gas and gas-prices. The higher the gas-prices/fees, the higher the chance that your transaction will be included in a block. For mainnet, the recommended gas-prices is 2000000000000.

Sending Tokens

Before you can bond PUNDIX and withdraw rewards, you need to set up pundixd and create an account

Bonding PUNDIX and Withdrawing Rewards

Before you can bond PUNDIX and withdraw rewards, you need to set up pundixd and create an account

Before bonding PUNDIX, please read the delegator faq to understand the risk and responsibilities involved with delegating.

However,there is a limit to how frequent you can redelegate. For more information on redelegation.

To confirm that your transaction went through, you can use the following queries:

Double check with a block explorer if you interact with the network through a trusted full-node.

Signing Transactions From an Offline Computer

If you DO NOT have a ledger device and want to interact with your private key on an offline computer, you can use the following procedure. First, generate an unsigned transaction on an online computer with the following command (example with a bonding transaction):

In order to sign, you will also need the chain-id, account-number and sequence. The chain-id is a unique identifier for the blockchain on which you are submitting the transaction. The account-number is an identifier generated when your account first receives funds. The sequence number is used to keep track of the number of transactions you have sent and prevent replay attacks.

Get the chain-id from the genesis file, and the two other fields using the account query:

Then, copy unsignedTx.json and transfer it (for example via USB) to the offline computer. If it is not done already, create an account on the offline computer. For additional security, you can double check the parameters of your transaction before signing it using the following command:

Now, sign the transaction using the following command. You will need the chain-id, sequence and account-number obtained earlier:

Copy signedTx.json and transfer it back to the online computer. Finally, use the following command to broadcast the transaction:

Last updated