AdminClient
The AdminClient class extends DriftClient to provide administrative functions for managing Drift Protocol. It includes methods for initializing markets, updating protocol parameters, and managing market configurations.
The AdminClient requires the connected wallet to be the protocol admin. Most users should use DriftClient instead.
Extends
AdminClient extends DriftClient, inheriting all methods and properties.
Protocol Initialization
initialize
Initializes the Drift Protocol state account.
await adminClient . initialize (
usdcMint : PublicKey ,
adminControlsPrices : boolean
): Promise < [ TransactionSignature ] >
Whether admin controls oracle prices
return
Promise<[TransactionSignature]>
Transaction signature in array format
Perpetual Market Management
initializePerpMarket
Initializes a new perpetual market.
await adminClient . initializePerpMarket (
marketIndex : number ,
priceOracle : PublicKey ,
baseAssetReserve : BN ,
quoteAssetReserve : BN ,
periodicity : BN ,
pegMultiplier ?: BN ,
oracleSource ?: OracleSource ,
contractTier ?: ContractTier ,
marginRatioInitial ?: number ,
marginRatioMaintenance ?: number ,
liquidatorFee ?: number ,
ifLiquidatorFee ?: number ,
imfFactor ?: number ,
activeStatus ?: boolean ,
baseSpread ?: number ,
maxSpread ?: number ,
maxOpenInterest ?: BN ,
maxRevenueWithdrawPerPeriod ?: BN ,
quoteMaxInsurance ?: BN ,
orderStepSize ?: BN ,
orderTickSize ?: BN ,
minOrderSize ?: BN ,
concentrationCoefScale ?: BN ,
curveUpdateIntensity ?: number ,
ammJitIntensity ?: number ,
name ?: string ,
lpPoolId ?: number
): Promise < TransactionSignature >
Market index for the new perpetual market
Oracle account public key
Initial base asset reserve for the AMM
Initial quote asset reserve for the AMM
Funding rate update periodicity
pegMultiplier
BN
default: "PEG_PRECISION"
Peg multiplier for the market
oracleSource
OracleSource
default: "OracleSource.PYTH"
Oracle source type
contractTier
ContractTier
default: "ContractTier.SPECULATIVE"
Contract tier classification
Initial margin ratio (in basis points)
Maintenance margin ratio (in basis points)
name
string
default: "DEFAULT_MARKET_NAME"
Market name
return
Promise<TransactionSignature>
Transaction signature
deletePerpMarket
Deletes an initialized but unused perpetual market.
await adminClient . deleteInitializedPerpMarket (
marketIndex : number
): Promise < TransactionSignature >
return
Promise<TransactionSignature>
Transaction signature
updatePerpMarketMarginRatio
Updates margin ratios for a perpetual market.
await adminClient . updatePerpMarketMarginRatio (
perpMarketIndex : number ,
marginRatioInitial : number ,
marginRatioMaintenance : number
): Promise < TransactionSignature >
New maintenance margin ratio
return
Promise<TransactionSignature>
Transaction signature
updatePerpMarketBaseSpread
Updates the base spread for a perpetual market.
await adminClient . updatePerpMarketBaseSpread (
perpMarketIndex : number ,
baseSpread : number
): Promise < TransactionSignature >
return
Promise<TransactionSignature>
Transaction signature
updatePerpMarketOracle
Updates the oracle for a perpetual market.
await adminClient . updatePerpMarketOracle (
perpMarketIndex : number ,
oracle : PublicKey ,
oracleSource : OracleSource ,
skipInvaraintCheck ?: boolean
): Promise < TransactionSignature >
New oracle account public key
Skip invariant validation checks
return
Promise<TransactionSignature>
Transaction signature
Spot Market Management
initializeSpotMarket
Initializes a new spot market.
await adminClient . initializeSpotMarket (
mint : PublicKey ,
optimalUtilization : number ,
optimalRate : number ,
maxRate : number ,
oracle : PublicKey ,
oracleSource : OracleSource ,
initialAssetWeight : number ,
maintenanceAssetWeight : number ,
initialLiabilityWeight : number ,
maintenanceLiabilityWeight : number ,
imfFactor ?: number ,
liquidatorFee ?: number ,
ifLiquidationFee ?: number ,
activeStatus ?: boolean ,
assetTier ?: AssetTier ,
scaleInitialAssetWeightStart ?: BN ,
withdrawGuardThreshold ?: BN ,
orderTickSize ?: BN ,
orderStepSize ?: BN ,
ifTotalFactor ?: number ,
name ?: string ,
marketIndex ?: number
): Promise < TransactionSignature >
Optimal utilization rate for interest
Interest rate at optimal utilization
Oracle account public key
Initial asset weight for collateral
Maintenance asset weight for collateral
Initial liability weight for borrows
maintenanceLiabilityWeight
Maintenance liability weight for borrows
assetTier
AssetTier
default: "AssetTier.COLLATERAL"
Asset tier classification
name
string
default: "DEFAULT_MARKET_NAME"
Market name
return
Promise<TransactionSignature>
Transaction signature
deleteSpotMarket
Deletes an initialized but unused spot market.
await adminClient . deleteInitializedSpotMarket (
marketIndex : number
): Promise < TransactionSignature >
Spot market index to delete
return
Promise<TransactionSignature>
Transaction signature
updateSpotMarketOracle
Updates the oracle for a spot market.
await adminClient . updateSpotMarketOracle (
spotMarketIndex : number ,
oracle : PublicKey ,
oracleSource : OracleSource
): Promise < TransactionSignature >
New oracle account public key
return
Promise<TransactionSignature>
Transaction signature
AMM Management
moveAmmPrice
Moves the AMM price to new reserve values.
await adminClient . moveAmmPrice (
perpMarketIndex : number ,
baseAssetReserve : BN ,
quoteAssetReserve : BN ,
sqrtK ?: BN
): Promise < TransactionSignature >
Square root of k (auto-calculated if not provided)
return
Promise<TransactionSignature>
Transaction signature
repegAmmCurve
Repegs the AMM curve to a new peg multiplier.
await adminClient . repegAmmCurve (
newPeg : BN ,
perpMarketIndex : number
): Promise < TransactionSignature >
return
Promise<TransactionSignature>
Transaction signature
updateK
Updates the k parameter for an AMM.
await adminClient . updateK (
perpMarketIndex : number ,
sqrtK : BN
): Promise < TransactionSignature >
New square root of k value
return
Promise<TransactionSignature>
Transaction signature
Fee Structure Management
updatePerpFeeStructure
Updates the perpetual market fee structure.
await adminClient . updatePerpFeeStructure (
feeStructure : FeeStructure
): Promise < TransactionSignature >
New fee structure configuration fillerRewardStructure
OrderFillerRewardStructure
required
Filler reward configuration
referrerRewardEpochUpperBound
Upper bound for referrer rewards
return
Promise<TransactionSignature>
Transaction signature
updateSpotFeeStructure
Updates the spot market fee structure.
await adminClient . updateSpotFeeStructure (
feeStructure : FeeStructure
): Promise < TransactionSignature >
New fee structure configuration
return
Promise<TransactionSignature>
Transaction signature
State Parameter Updates
updateAdmin
Transfers admin authority to a new address.
await adminClient . updateAdmin (
admin : PublicKey
): Promise < TransactionSignature >
return
Promise<TransactionSignature>
Transaction signature
updateOracleGuardRails
Updates oracle guard rails for price validation.
await adminClient . updateOracleGuardRails (
oracleGuardRails : OracleGuardRails
): Promise < TransactionSignature >
New oracle guard rail configuration Price divergence parameters
Oracle validity parameters
return
Promise<TransactionSignature>
Transaction signature
updateLiquidationDuration
Updates the liquidation duration parameter.
await adminClient . updateLiquidationDuration (
liquidationDuration : number
): Promise < TransactionSignature >
New liquidation duration in seconds
return
Promise<TransactionSignature>
Transaction signature
Usage Example
import { AdminClient } from '@drift-labs/sdk' ;
import { Connection , PublicKey } from '@solana/web3.js' ;
import { BN } from '@coral-xyz/anchor' ;
// Initialize admin client
const connection = new Connection ( 'https://api.mainnet-beta.solana.com' );
const adminClient = new AdminClient ({
connection ,
wallet: adminWallet ,
env: 'mainnet-beta' ,
});
await adminClient . subscribe ();
// Initialize a new perpetual market
const marketIndex = 10 ;
const oracle = new PublicKey ( '...' );
const baseAssetReserve = new BN ( 100_000_000_000 ); // 100 SOL
const quoteAssetReserve = new BN ( 10_000_000_000 ); // 10,000 USDC
const periodicity = new BN ( 3600 ); // 1 hour
await adminClient . initializePerpMarket (
marketIndex ,
oracle ,
baseAssetReserve ,
quoteAssetReserve ,
periodicity ,
undefined , // default peg
OracleSource . PYTH ,
ContractTier . A ,
2000 , // 20% initial margin
500 , // 5% maintenance margin
0 ,
10000 ,
0 ,
true ,
100 ,
142500 ,
undefined ,
undefined ,
undefined ,
undefined ,
undefined ,
undefined ,
undefined ,
0 ,
0 ,
'BTC-PERP'
);
// Update market parameters
await adminClient . updatePerpMarketMarginRatio (
marketIndex ,
1500 , // 15% initial margin
400 // 4% maintenance margin
);
// Update base spread
await adminClient . updatePerpMarketBaseSpread (
marketIndex ,
50 // 0.5 bps
);
await adminClient . unsubscribe ();