Open Position

Create a new liquidity position NFT in a Ferra pool.

Quick Start

import { clmmMainnet, initFerraSDK } from '@ferra-labs/clmm'

// Initialize SDK
const sdk = initFerraSDK({
  ...clmmMainnet,
  network: 'beta',
  fullNodeUrl: 'https://...',
  wallet: '0x...'
})

const tx = sdk.Position.openPositionTransactionPayload({
  pool_id: '0x...',
  coinTypeA: '0x2::sui::SUI', 
  coinTypeB: '0x...::usdc::USDC',
  tick_lower: -1000,
  tick_upper: 1000
})

// Execute
const result = await sdk.fullClient.signAndExecuteTransaction({
  transaction: tx,
  signer: keypair
})

Parameters

Parameter
Type
Description

pool_id

string

Pool object ID

coinTypeA

string

First token type

coinTypeB

string

Second token type

tick_lower

number

Lower price boundary

tick_upper

number

Upper price boundary

Price Range

Set Custom Range

import { TickMath } from '@ferra-labs/clmm'

// Price range: 0.9 - 1.1 USDC per SUI
const lowerPrice = 0.9
const upperPrice = 1.1

const tickLower = TickMath.priceToTickIndex(lowerPrice, 9, 6)
const tickUpper = TickMath.priceToTickIndex(upperPrice, 9, 6)

Range Around Current Price

const pool = await sdk.Pool.getPool(poolId)
const currentTick = pool.current_tick_index
const tickSpacing = pool.tick_spacing

// ±10 ticks from current price
const tickLower = currentTick - 10 * tickSpacing
const tickUpper = currentTick + 10 * tickSpacing

Complete Example

// 1. Get pool info
const pool = await sdk.Pool.getPool(poolId)

// 2. Set price range
const tickLower = -1000
const tickUpper = 1000

// 3. Open position
const tx = sdk.Position.openPositionTransactionPayload({
  pool_id: poolId,
  coinTypeA: pool.coinTypeA,
  coinTypeB: pool.coinTypeB,
  tick_lower: tickLower,
  tick_upper: tickUpper
})

// 4. Execute
const result = await sdk.fullClient.signAndExecuteTransaction({
  transaction: tx,
  signer: keypair
})

console.log('Position NFT created:', result.digest)

Important Notes

  • Opening a position creates an empty NFT without liquidity

  • Add liquidity separately after position creation

  • Position NFT is transferable and tradeable

  • Each position has unique tick range that cannot be changed

Last updated