Funding & Bidding
Before your Validator is considered for the active set, you must fund your account with the necessary amount of tFLIP
.
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.
- Make sure you have
tFLIP
in your Metamask. - Go to Chainflip Auctions page > “My Nodes”
- Connect your Metamask wallet with the
tFLIP
- Click the button ”+ Add Node” > You should see the “Register new node” modal
- Enter the Validator ID you got during Generating Keys step — your
Public Key(SS58)
— and the amount oftFLIP
you want to add funds to. Click on “Add Funds” - 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.
- Congratulations! You should see the new node on “My Nodes” page
- 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 address0xdeadbeef
. This was a bad idea since it’s unlikely thatcFc00Ld00d
knows the private key for0xdeadbeef
, 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>