MAINNET:
Loading...
TESTNET:
Loading...
/
onflow.org
Flow Playground

FLOW (Token)


Native token of the FLOW protocol

The FLOW native token complies to the Flow Fungible Token standard

Receiving & Earning FLOW

Token Delivery

Follow the process outlined below if you would like to:

  • a) Claim tokens purchased in a previous sale
  • b) Purchase or hold FLOW in the future

Step 1: Choosing a custody provider

Choose a custody provider who currently supports Flow:

  • Coinlist
  • Finoa
  • Kraken
  • Ledger, or
  • Create your own Flow account by going to Flow Port and selecting "Create Account" on the login screen. You will only be able to use this option if you currently hold an account on the network with the ability to pay for the account creation fees.

Step 2: Account creation

Your chosen custody service will provide you with an option to create a Flow Address. Account addresses for managing funds and signing transactions are created as follows:

  1. The user (or user's agent)
    1. generates the private account key (off-chain)
    2. prepares a Cadence script to create their own account
  2. Dapper Labs
    1. co-signs the account creation transaction (for authorization, and payment)
    2. submits the transaction to the network

Once the account creation transaction has been executed and the result sealed, the user can use their private key to authorize transactions through their account (generally this is done through a wallet provider).

The exact steps to complete this may vary by custody provider but they will require a thorough KYC process.

You are done this step when you receive your Flow Address.

It should look like something like: 0x7e60df042a9c0868

Flow Addresses: Technical Details

For Flow addresses, a linear code [64, 45, 7] is used as an error-detection code. The address of the i-th account created on Flow is simply the codeword corresponding to the original value (i). This linear code allows generating 2^45 distinct addresses, each address is encoded over 64 bits. Two different addresses are guaranteed to have at least 7 different bits which reduces the risk of confusing two addresses.

Moreover, the linear code used is non-systematic, which means it's not possible to separate the extra bits from the original value bits in the codeword. This makes the generated addresses look like random numbers and two consecutive account addresses look very different. A quick off-chain test can tell if a 64 bits word could be a valid Flow address.

The generation of an account address is an on-chain mechanism that happens when a Flow network receives an account creation transaction. The network keeps track of the number of accounts already created and returns the newly created address.

Step 3

Provide the Flow team your Flow Address and the tokens will be deposited into your account shortly.

You will be able to check your FLOW balance anytime on Flow Port

Earning FLOW

There are a number of programs available to earn FLOW tokens.

Using FLOW

With FLOW, you can:

  • Spend
  • Stake
  • Delegate
  • Hold
  • Vote
  • Send and share
  • Create, develop, and grow your dapp

Spending Flow

All you need to spend Flow is an account and a tool for signing transactions (a wallet, custodian, or other signing service). The FCL (Flow Client Library) makes it super duper easy to go to any dapp, login with your account, have a great time, and then sign with the wallet of your choice only once you decide to make a purchase.

Staking FLOW

You can commit tokens to stake with the send_staking_tokens.cdc transaction. These tokens are held in escrow in the StakingHelper resource. You can submit an official staking request by using the create_staking_request.cdc transaction which registers the node operator in the Flow ID Table contract and commits your tokens to be staked in the next epoch.

Alternatively, you may choose to submit an abort_stake.cdc transaction which will remove the tokens from escrow and return them to your account, if called prior to the beginning of the epoch.

If the create_staking_request.cdc transaction has been submitted, you can do a few things:

  • Add additional tokens via stake_new_tokens.cdc transaction
  • Remove your stake via request_unstaking.cdc transaction, or
  • Withdraw rewards/unstaked tokens via withdraw_tokens.cdc transaction (if you've participated in an earlier epoch)

Withdrawing Rewards

Rewards are deposited into your pool of unlocked tokens which you can withdraw at anytime using the withdraw_tokens.cdc transaction. Rewards are paid out at the end of each epoch, at which point you will be able to submit this transaction. You can opt to restake your rewards by submitting the stake_unlocked_tokens.cdc transaction.

Delegating FLOW

A node operator who wants to allow delegation to their node will create a public capability for delegators using the publish_delegation.cdc transaction. This capability will only be valid for nodes which have already submitted a staking request and which fulfill the minimum staking requirements for that node type. Token holders who wish to delegate to their node submit a delegate_tokens.cdc transaction providing the account addresses of the node they want to delegate to. This transaction creates a capability that the delegator stores in their account which gives them access to:

  • Staking additional tokens
  • Withdrawing rewards
  • Requesting to unstake

If a node operator has delegators, they cannot withdraw their own tokens such that their own staked tokens would fall below the minimum requirement for that node type. This is enforced at the protocol level.

  • Collection Nodes: 250,000 FLOW
  • Consensus Nodes: 500,000 FLOW
  • Execution Nodes: 1,250,000 FLOW
  • Verification Nodes: 135,000 FLOW

The delegation logic keeps track of the amount of tokens each delegator has delegated for the node operator. When rewards are paid out, the rewards are automatically divided based on the proportion held by that token holder wrt to the total tokens staked.

Withdrawing Rewards

Validly staked accounts are provided a resource from the Staking Contract which allows them to withdraw rewards once they are available at the end of the epoch.

Holding FLOW

If you have already purchased FLOW and wish to hold it, you have a couple options:

  • For relatively small, short term holdings - most people use a wallet. Wallets are used to help you sign transactions (verify your actions) when using your FLOW tokens.

  • For larger, long term holdings - you may want to use a custody provider to keep your funds safe.

You can find wallets and custodians supporting Flow in the Flow port

Voting with FLOW

Participating in the Flow community is more than just running a node or building a dapp. It's also about engaging in discussion, debate, and decision making about the protocol, the content on it, and the people impacted by it. You can use your Flow account to submit votes to community polls and other governance related activities.

Sending and Sharing FLOW

If you just want to share the love and bring your friends to Flow - it's easier than an edible arrangement.

It is possible to use the Flow blockchain without holding any FLOW tokens yourself. Free to play games, trials, community polls, and other community activities can all take place with only an account (which may be created on a person's behalf) and a small fixed fee which may paid by a user agent.

The protocol requires some FLOW tokens to process these transactions, but (and this is the cool part!) a product can support users who do not themselves hold FLOW while still providing that user with all the underlying security guarantees the Flow protocol provides.

Transferring FLOW, creating accounts, and updating keys are all actions made easy on Flow Port

Creating with FLOW

FLOWs for Development

The Flow Faucet is a tool for Flow developers to make requests to create accounts and fund their accounts with FLOW tokens on the Flow Development Network.

Getting Started on Testnet

Visit Flow Faucet to create an account and receive $FLOW for testing. You can request additional $FLOW for testing through the same page, and with the same account, at any time.

Shipping on Mainnet

To deploy your contract on Mainnet, create your own Flow account by going to Flow Port and selecting "Create Account" on the login screen. You will only be able to use this option if you currently hold an account on the network with the ability to pay for the account creation fees.

Submitting Transactions and Updating Users

Transactions are submitted using a Flow SDK via the Access API.

On Flow, a transaction is identified by its hash - the hash that exists as soon as that transaction is signed and submitted to an Access or Collection node. Results of transactions can be queried by transaction hash through the Access API. A user can check the status of a transaction at any time via the Flow Block Explorer.

To expose these results natively in your app, you can use a Flow SDK to fetch transaction results, for example using the Flow Go SDK.

Using a Flow SDK you can also fetch account state by address from a Flow Access API, for example using the Flow Go SDK.

Once the transaction is sealed, an event is emitted and you will be able to read transaction events and update the user.

The Flow SDKs also allow polling for events using the Flow Access API, for example using the Flow Go SDK.

Key Concepts

Fees

Fees for account creation, and transaction submission will exist in v0.x.x of the testnet.

There are 2 fees that you will see applied to your transactions

  • Account Creation: currently fixed at 0.1 FLOW
  • Transaction Fee: currently fixed at 0.0001 FLOW

Transaction Fees

Transaction fees are applied only once per transaction, at time of execution. Transactions without a valid payer signature will fail and not be included in a block, prior to when the fee would be charged. If there is no one to charge, the transaction never goes through.

However, if a transaction fails for some other reason once it is being executed, you will still be charged the fixed fee. The fee covers the cost of the network looking at the transaction and thus must be paid even if no change to your account is made.

Storage/Account Fees

Account Creation fee is applied only when create account is called. This fee covers the cost of storing up to 1KB of data in perpetuity. This fee is applied only once and can be "topped up" to add additional storage to an account. Transactions are submitted using a Flow SDK via the Access API. Results can be queried by transaction hash through the Access API.

Accounts

An account on Flow is a record in the chain state that holds the following information:

  • Address: unique identifier for the account
  • Balance: default token balance
  • Public Keys: public keys authorized on the account
  • Code: Cadence contracts deployed to the account
  • Storage: area of the account used to store resource assets

Information on Generating Accounts can be found here

Flow Service Account

The Service Account is a special account in Flow that has special permissions to manage system contracts. It is able to mint tokens, set fees, and update network-level contracts.

Tokens & Fees

The Service Account has administrator access to the FLOW token smart contract, so it has authorization to mint and burn tokens. It also has access to the transaction fee smart contract and can adjust the fees charged for transactions execution on Flow.

Network Management

The Service Account administrates other smart contracts that manage various aspects of the Flow network, such as epochs and (in the future) validator staking auctions.

Governance

Besides its special permissions, the Service Account is an account like any other in Flow. During the early phases of Flow's development, the account will be controlled by keys held by Dapper Labs. As Flow matures, the service account will transition to being controlled by a smart contract governed by the Flow community.

Key Format

We are supporting ECDSA with the curves P-256 and secp256k1. For these curves, the public key is encoded into 64 bytes as X||Y where || is the concatenation operator.

  • X is 32 bytes and is the big endian byte encoding of the x-coordinate of the public key padded to 32, i.e. X=x_31||x_30||...||x_0 or X = x_31*256^31 + ... + x_i*256^i + ... + x_0.
  • Y is 32 bytes and is the big endian byte encoding of the y-coordinate of the public key padded to 32, i.e. Y=y_31||y_30||...||y_0 or Y = y_31*256^31 + ... + y_i*256^i + ... + y_0

FAQs

How do I check my FLOW balance?

Visit Flow Port and sign-in to your Flow Account. Your wallet or custody provider will likely also display your FLOW balance to you.

How do I get FLOW to my users?

How do I create accounts on my user's behalf?

How do I transfer FLOW to my users?

How can I reward users with FLOW?

What are Flow Arcade Tokens (FATs)?