Skip to Content

Funding & Bidding

Before your Validator is considered for the active set, you must fund your account with the necessary amount of tFLIP.

We only support MetaMask wallets currently.

Getting tFLIP

Becoming a Chainflip Validator requires you to own some tFLIP and win a Validator slot in an auction cycle. The amount of tFLIP that you need to own in order to participate as a Validator is not fixed and will change on a fairly regular basis. For this reason it is recommended that you have more tFLIP than the current minimum cost of a Validator node if you want to continue adding funds through multiple epochs.

The current amount of tFLIP required to become an Active Validator can be checked on the Chainflip Auctions page. 

tFLIP is an ERC20 token on the Ethereum Sepolia Testnet.
0xdC27c60956cB065D19F08bb69a707E37b36d8086 

To get tFLIP:

  • Go to 🔀 | tflip-marketplace  on Discord.
  • Send a message containing your Node Public Key and you wallet address. You should have gotten this ID during the setup process in the Generating Keys section of the docs.
  • We will send you tFLIP after verifying you have setup a node.

Remember to import the tFLIP Token using this address in order for the assets to show up in your wallet: 0xdC27c60956cB065D19F08bb69a707E37b36d8086

For the remainder of this guide, we will assume that you have an adequate amount of tFLIP, but you can proceed with the rest of the steps without tokens until you reach the funding stage.

Finally, you do not need to move the tFLIP to your Validators’ Ethereum wallet. You should use your Ethereum wallet connected to Sepolia and use that to fund your account instead.

To become an active validator, you’ll need to win an Auction. To win an auction, you’ll need to fund your account with some tFLIP. For more information about Auctions and how they are supposed to work, you can check out this article: Chainflip Validator Auction Theory.

Adding Funds to your Validator Node

In order to fund your account, you should use the Auctions App. You could also interact with the Smart Contract directly, but since that’s ugly we’ll use the Dashboard for the purposes of this tutorial.

  1. Make sure you have tFLIP in your Metamask.
  2. Go to Chainflip Auctions page  > “My Nodes
  3. Connect your Metamask wallet with the tFLIP
  4. Click the button ”+ Add Node” > You should see the “Register new node” modal
  5. Enter the Validator ID you got during Generating Keys step — your Public Key(SS58)— and the amount of tFLIP you want to add funds to. Click on “Add Funds
  6. Metamask will ask you to sign two transactions. The first one is a token approval and the second one transfers and add funds to your validator.
  7. Congratulations! You should see the new node on “My Nodes” page
  8. Once you have successfully funded your account, jump back to your terminal and run the following:
sudo systemctl restart chainflip-engine

You have not finished all the steps! Please continue to the bottom of your page otherwise your node will show as Offline

Even after you successfully added funds, your node could still be in the Offline state. Just wait for your node to sync all the blocks.

Registering and setting up your Validator node

Before you start bidding to become an Authority node, you need to tell the network that your account will be used by a node performing the Validator role, and register the cryptographic keys that will be used for consensus.

If you don’t follow all of these steps, your Validator cannot be selected to win an Auction.

Please ensure that all connections on ports 30333 and 8078 are not blocked! Some VPS providers enable an all-port firewall by default, but if this is not the case your node will not be able to participate in Keygen / Signing ceremonies. As a result of this you node will never become active and you’ll be slashed and might lose all your tFLIP.

First, make sure your node is fully synced! Otherwise the cli commands will likely fail.

Register your account for the Validator role by running the following command:

sudo chainflip-cli --config-root /etc/chainflip register-account-role Validator

It may take some time in order to have the account activated as Validator after running the last command.

If everything worked, you should see a transaction hash, also known as an ‘extrinsic hash,’ displayed on your terminal by the CLI. Congratulations! You just submitted a transaction to the Chainflip State Chain! You can go and check on it by copying the extrinsic hash and pasting it into https://scan.perseverance.chainflip.io/ .

Registration gives your account access to Validator-specific commands on the State Chain. The first of these is rotating and registering your authorship keys:

sudo chainflip-cli --config-root /etc/chainflip rotate

Now your node should be synced, your account be fully registered, your ports open, your Chainflip Engine humming along. Check the logs once more, check your node status in the web app, then crack your knuckles one more time and signal your intent to bid in the next auction:

sudo chainflip-cli --config-root /etc/chainflip validator start-bidding

Optionally, you can set a Vanity Name for your validator by running:

You can really help us by setting your Vanity Name as your Discord username. It helps us know who to contact if we find a problem.

sudo chainflip-cli --config-root /etc/chainflip vanity-name <my-discord-username>

Once the Auction cycle is complete, the network will attempt to include your node in the next Key generation ceremony, and if successful, you’ll be a real Authority! Remember you can always add more tFLIP to have a better chance at winning an Auction.

Rebalancing

If you administer multiple Validators, you may want to move funds between them to optimise your auction bids. This can be cumbersome using the normal funding and redeeming flow, so there is a way to short-circuit this and transfer funds directly between accounts.

Moving funds between Validators is known as rebalancing.

Similarly to redemptions, rebalancing is subject to certain restrictions:

  • The destination account must already exist: account creation through a rebalance operation is not possible. If the source account is currently bidding in an auction, the destination account must also be in a bidding state.
  • Bound addresses on the destination account must match the source account.
  • If the funds to be transferred are associated with a restricted source address, the transferred funds will have the same restrictions in the destination account.

To rebalance, use the chainflip-cli. For example, to move 10,000 $FLIP to account cFK1qK1oSfZqZzka4ABWRybf24GtUjYJuWj2A1g9aHpcGny5e:

chainflip-cli rebalance --exact=10000 cFK1qK1oSfZqZzka4ABWRybf24GtUjYJuWj2A1g9aHpcGny5e

If the funds originated at the restricted address 0xdeadbeef, use this command:

chainflip-cli rebalance --exact=10000 --restricted-address=0xdeadbeef cFK1qK1oSfZqZzka4ABWRybf24GtUjYJuWj2A1g9aHpcGny5e

Run chainflip-cli rebalance --help for a full list of options.

As of version 1.10, the CLI options are:

chainflip-cli rebalance --help Rebalance FLIP by transferring it to another account. Usage: chainflip-cli rebalance [OPTIONS] <RECIPIENT_ACCOUNT_ID> Arguments: <RECIPIENT_ACCOUNT_ID> The State Chain account ID of the recipient. Options: --exact <AMOUNT> Amount to transfer in FLIP (omit this option to redeem all available FLIP). Up to 6 decimal places, any more are rounded. --restricted-address <RESTRICTED_ADDRESS> An optional Ethereum address under which restriction conditions we transfer the FLIP. -h, --help Print help

Redeeming Funds & Retiring

You can redeem your tFLIP, subject to certain conditions. In order to do so, the funds may neither be bonded, nor tied up in auction bidding.

For a detailed account of the process and its restrictions see Redeeming ERC-20 $FLIP through the Gateway.

Retiring from Auctions

To end your participation in auctions, use the Chainflip CLI.

sudo chainflip-cli --config-root /etc/chainflip validator stop-bidding

Your node will cease to participate in auctions. When your node has left the validator set, it will still be a Keyholder for another epoch. You then have to wait another epoch until your tFLIP can be redeemed, so that your node is no longer a Keyholder. Once your node is no longer a Keyholder you can redeem all your tFLIP by following the next steps.

Redeeming your tFLIP

The redemption process can be initiated via the Chainflip Auctions App  > My Nodes, and the Chainflip CLI. You will need the address of the Ethereum account to which you want your tFLIP to be sent.

As of version 0.8, the network levies a Redemption Tax of (at the time of writing) 5 tFLIP per redemption. This is to reduce ‘redemption request spam’. These requests are expensive for the network to process, and the cost for this is now carried by the requester, via the tax.

In the Auctions App, select “Redeem”. This will guide you through the process.

You have two options. By default, the command will redeem the maximum available funds from your account, taking into account the bond. For example, imagine your account balance is 1000 tFLIP and the bond is 800 tFLIP, the following would withdraw 195 tFLIP net of tax, to the Ethereum account 0xcf..cf:

sudo chainflip-cli redeem 0xcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf

Alternatively, you can specify an exact amount you wish to redeem, say 50 tFLIP:

sudo chainflip-cli redeem --exact 50 0xcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf

This will generate a redemption certificate that will be sent to the Ethereum network.

Once you have completed the request, proceed to the Auctions App. The redemption should automagically appear here, where you will be able to continue with the process.

Redemption Expired

If for some reason, you couldn’t finish the redemption process, your redemption certificate will eventually expire. This means you need to refund your tFLIP back to your State Chain balance, before starting a new redemption.

You only need to click on ‘Refund FLIP to your balance’ and start the process again.

Deregistration and Account Deletion

Accounts are automatically deleted once all funds have been redeemed.

Before making this final redemption, your account must be deregistered:

sudo chainflip-cli validator deregister-account

Deregistration is not possible until your account has stopped bidding and is no longer a key holder for an active Epoch (usually this implies that at least one Epoch has passed since your account was last in the authority set).

Advanced Account Management

These are some features that advanced operators should be aware of.

Redeem Address Binding

Any account may be explicitly bound to a single redemption address. Henceforth, any redemption request from that account can only redeem to this exact address.

Note, address binding is a one-off irreversible operation.

Example:

The account cFc00Ld00d is bound to the redeem address 0xdeadbeef. This was a bad idea since it’s unlikely that cFc00Ld00d knows the private key for 0xdeadbeef, so his or her funds are effectively permanently locked. Do not do this.

Example:

A liquid staking provider wants to allow users to pool their tFLIP through a smart contract on Ethereum, to then fund a validator account. They bind their validator account to the smart contract address. This binding is permanent and irrevocable, so users can now rest assured that there is no way the pooled funds can be redeemed to any other address.

In order to bind a redemption address, use the chainflip-cli. Log on to the node that contains the keys to the account for which you want to bind a redemption address.

In order to check if the account is currently bound to a redemption address:

chainflip-cli get-bound-redeem-address

In order to permanently bind a redeem address:

chainflip-cli bind-redeem-address <ETH_ADDRESS>

Redemption Execution Address Binding

Note: At the time of writing, executor binding via the CLI is not yet supported on Perseverance network. This feature is planned for release as of version 1.0.0.

Similar to the above, redemptions can be restricted such that only a single specific Ethereum address can be the executor of a redemption.

In order to bind an executor address, proceed as above using the chainflip-cli.

Query for any currently bound address like so:

chainflip-cli get-bound-executor-address

In order to permanently bind an executor address:

chainflip-cli bind-executor-address <ETH_ADDRESS>

Now, if you want to redeem, you must explicitly provide this address as the executor:

chainflip-cli redeem --exact 15314 <REDEEM_ADDRESS> <EXECUTOR_ADDRESS>
Last updated on