import { PublicKey } from "@solana/web3.js"; import { findProgramAddress, METADATA_PROGRAM_ID } from "../../common"; import { i32ToBytes, u16ToBytes } from "./util"; export const AMM_CONFIG_SEED = Buffer.from("amm_config", "utf8"); export const POOL_SEED = Buffer.from("pool", "utf8"); export const POOL_VAULT_SEED = Buffer.from("pool_vault", "utf8"); export const POOL_REWARD_VAULT_SEED = Buffer.from("pool_reward_vault", "utf8"); export const POSITION_SEED = Buffer.from("position", "utf8"); export const TICK_ARRAY_SEED = Buffer.from("tick_array", "utf8"); export const OPERATION_SEED = Buffer.from("operation", "utf8"); export function getPdaAmmConfigId(programId: PublicKey, index: number) { return findProgramAddress( [AMM_CONFIG_SEED, u16ToBytes(index)], programId ) } export function getPdaPoolId( programId: PublicKey, ammConfigId: PublicKey, mintA: PublicKey, mintB: PublicKey ) { return findProgramAddress( [POOL_SEED, ammConfigId.toBuffer(), mintA.toBuffer(), mintB.toBuffer()], programId ); } export function getPdaPoolVaultId( programId: PublicKey, poolId: PublicKey, vaultMint: PublicKey ) { return findProgramAddress( [POOL_VAULT_SEED, poolId.toBuffer(), vaultMint.toBuffer()], programId ); } export function getPdaPoolRewardVaulId( programId: PublicKey, poolId: PublicKey, rewardMint: PublicKey ) { return findProgramAddress( [POOL_REWARD_VAULT_SEED, poolId.toBuffer(), rewardMint.toBuffer()], programId ); } export function getPdaTickArrayAddress( programId: PublicKey, poolId: PublicKey, startIndex: number ) { return findProgramAddress( [TICK_ARRAY_SEED, poolId.toBuffer(), i32ToBytes(startIndex)], programId ); } export function getPdaProtocolPositionAddress( programId: PublicKey, poolId: PublicKey, tickLower: number, tickUpper: number ) { return findProgramAddress( [ POSITION_SEED, poolId.toBuffer(), i32ToBytes(tickLower), i32ToBytes(tickUpper), ], programId ); } export function getPdaPersonalPositionAddress( programId: PublicKey, nftMint: PublicKey ) { return findProgramAddress( [POSITION_SEED, nftMint.toBuffer()], programId ); } export function getPdaMetadataKey(mint: PublicKey) { return findProgramAddress( [ Buffer.from('metadata', 'utf8'), METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), ], METADATA_PROGRAM_ID ) } export function getPdaOperationAccount( programId: PublicKey, ) { return findProgramAddress( [OPERATION_SEED], programId ); }