Create Pool

Note: This guide is intended primarily for users who intend to incentivize LPs directly through our platform. If you're creating a pool with no direct Terminal rewards, this guide still has everything you need but please read the Create Fungible LP Tokenpage before returning back here.
You are a representative of a DeFi project that wants to seamlessly incentivize rewards on a liquidity pair. You're in the right place, as xToken Terminal makes this exceedingly easy. To properly deploy and configure your pool, please follow the instructions below.
Get in touch with us in Discord (Connect with xToken) if you have any technical questions or would just like some guidance or a demo. We'd be happy to help.
Note that the address you deploy the pool from will be the owner of the pool with managerial permissions. However, we have made it easy to transfer ownership to another address or multisig wallet once your pool is deployed. See Manage Pool for more information.
Before going any further, please make sure your wallet is connected. We support MetaMask, WalletConnect and Coinbase Wallet.
Step #1: Select a network
Terminal's Mining app is deployed on any network where you can find Uniswap V3. This currently includes Ethereum mainnet, Arbitrum, Optimism and Polygon.
In the toggle at the top right of the navigation, select the network where you want to deploy a pool.
Step #2: Click on Create Pool
At the top right of the Discover page on Terminal, you'll see a button for creating a pool. Click on it and you will be navigated to the Create Pool view.
Step #3: Select your asset pair
Every liquidity pool on Uniswap V3 holds two ERC20 tokens. Choose which token pair you'll be incentivizing. We've preloaded a few common tokens that you can quick-select. You can select any other token by pasting the token's address into the selector input.
Step #4: Select a fee tier
Uniswap offers several different fee tiers for liquidity pools: 0.01%, 0.05%, 0.3% and 1%. Each token pair (Step #3) can only have one pool on Uniswap V3 per fee tier. If you're unsure of which fee tier to choose for your pair, choosing 0.3% or 1% is likely the best option.
Step #5: Deploy Uniswap pool (if necessary)
Note: For pools with no existing liquidity, we HIGHLY recommend deploying a small amount of full range liquidity directly via the Uniswap V3 frontend, prior to deploying your Terminal pool. Even a few dollars worth is enough. If you plan to incentivize the full range for your Terminal pool and not a concentrated position, this is less urgent but still advised.
If you selected an asset pair and fee tier that does not yet exist on Uniswap, you'll have to deploy the pool. For reference, Uniswap allows only one pool for a given pair and fee tier to ever exist.
For convenience, we've built Uniswap V3 deployment into the Mining UI. The UI will let you know whether you need to deploy the pool for the asset pair and fee tier you selected. Note that this is a Uniswap pool deployment, not a Terminal pool deployment. That comes in the next steps.
To deploy the Uniswap pool, you'll need to set an initial price for the pair. This price is the starting point for the pool. Be very careful to choose a ratio that closely reflects the true relative price of the assets. For example, if you're deploying a WETH<>XYZ pool and the price of XYZ is currently equal to 0.1 WETH, the WETH<>XYZ init price would be 10. We recommend that you double check your math to ensure the ratio you initialize the Uniswap pool with is in the ballpark of the true market price.
Additionally, owing to the mechanics of Uniswap V3, the init price you choose will dictate the ratio of the two assets in your initial liquidity position. This is because LP deposits are a function of the current price in the pool and the liquidity price range you choose to incentivize. This will become relevant later on in the process.
Feel free to join us in Discord if you need guidance. We recognize that the minutiae of Uni V3 can be intimidating.
Step #6: Set price range
The ability to set a custom price range for your liquidity deposit is one of the most crucial features of Uniswap V3. It's also one of the most complex. Please be sure you understand your selection before you advance to the next step.
The price range you set will be the active price range for all LPs that participate in your incentives program. You will not be able to modify this price range. This will be the active price range for the entirety of the lifespan of this pool. More in Pool FAQs on why Mining doesn't allow price range rebalances.
If you're unsure what price range to select, we highly recommend selecting the full price range. More in Pool FAQs on this topic.
If you know what price range you want to incentivize, enter the minimum price and maximum price that marks the range. Min and max price are ratios of one token against the another. These are not necessarily USD- or ETH-denominated prices. You should independently double and triple check that your selected price ranges reflect your true intentions as this can be a confusing interaction for even the most advanced DeFi users.
When you exit the input area for each value, the UI will automatically "correct" the inputted value to the nearest price tick on the Uniswap V3 pool. This is because Uniswap V3 price ticks do not necessarily fall on whole or exact numbers. They are algorithmically determined. The "corrected" tick should be fairly close in value to the one you inputted.
For tokens with less than $1m in daily volume, we highly recommend that sponsors maintain some full range liquidity in the designated V3 pool, either via protocol treasury or an incentivized full range pool.
Step #7: Input initial deposit amounts
When you create a new liquidity position on Uniswap V3, you need to deploy some amount of liquidity in each token to seed the position. When you deploy a Mining pool on Terminal, the same is true. We recommend depositing a small amount to seed the position.
When you input the amount you'd like to deposit in the first token, the UI will auto-populate the expected quantity you'll need to deposit in the second token. This is because Uniswap V3 expects a very precise ratio of assets based on the current price on the pool and your specified price range.
Side note: One of the benefits of deploying a Terminal pool is that you'll only need to mint a single Uniswap V3 NFT position on behalf of the whole pool. Individual LPs do not need to mint their own liquidity NFTs.
Step #8: Approve liquidity pool tokens
At this point, you'll be prompted to approve both tokens in your pool in order to deposit the small amounts indicated in Step #6. Please do not close the window while you wait for both transactions to confirm.
Step #9: Choose rewards token(s)
Choose the rewards token(s) you'll be using to incentivize your LPs. Most pool sponsors will incentivize using a single token but the Mining app supports paying out rewards in two tokens as well. You don't need to set reward program amounts at this stage. You'll do that after deploying your Mining pool (see: Create Rewards Program). However, once your pool is deployed, you won't be able to change which rewards tokens your pool will pay out.
Step #10: Choose vesting duration (if any)
Choose the amount of time you'd like LP rewards to be vested for. This is entirely optional. If you don't want rewards to be vested, you can set this to None or 0.
If you choose to set a vesting period, how does this work for LPs? Rewards will accumulate in the same way as they do on pools without vesting periods. At some point, an LP will make the initial claim on their current outstanding rewards. This will initiate the clock on the claimed batch of rewards tokens. It will be fully claimable after the period has fully elapsed. This feature does allow for linear release of rewards.
Step #11: Deploy the pool
At this point, the Mining frontend will prompt you to deploy the pool. Go for it!
On L1, this will incur a one-time deployment fee and a significant one-time gas cost. You are free to set a lower gas price and wait for the network to confirm. On L2s, the gas cost should be more manageable.