import { PublicKey } from "@solana/web3.js";
import {
METADATA_PROGRAM_ID,
PROGRAM_ID,
PYTH_ORACLE_PROGRAM_ID,
RAYDIUM_CPMM_CONFIG,
RAYDIUM_CPMM_LOCK_PROGRAM,
RAYDIUM_CPMM_PROGRAM,
} from "./constants"
import { getSortedTokens } from "./tools";
export const getAmmAuthAddress = () => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("vault_and_lp_mint_auth_seed")],
RAYDIUM_CPMM_PROGRAM
);
return address;
}
export const getPoolAddress = (baseMint, quoteMint) => {
const { token0, token1 } = getSortedTokens(baseMint, quoteMint);
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("pool"), RAYDIUM_CPMM_CONFIG.toBuffer(), token0.toBuffer(), token1.toBuffer()],
RAYDIUM_CPMM_PROGRAM
);
return address;
}
export const getLpMintAddress = (pool) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("pool_lp_mint"), pool.toBuffer()],
RAYDIUM_CPMM_PROGRAM
);
return address;
}
export const getPoolVaultAddress = (pool, tokenMint) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("pool_vault"), pool.toBuffer(), tokenMint.toBuffer()],
RAYDIUM_CPMM_PROGRAM
);
return address;
}
export const getObservationAddress = (pool) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("observation"), pool.toBuffer()],
RAYDIUM_CPMM_PROGRAM
);
return address;
}
export const getLockAuthAddress = () => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("lock_cp_authority_seed")],
RAYDIUM_CPMM_LOCK_PROGRAM
);
return address;
}
export const getLockLiquidityAddress = (lockNifMint) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("locked_liquidity"), lockNifMint.toBuffer()],
RAYDIUM_CPMM_LOCK_PROGRAM
);
return address;
}
export const getMetadataAddress = (mint) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("metadata"), METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],
METADATA_PROGRAM_ID
);
return address;
}
export const getPriceFeedAccountAddress = (shardId, priceFeedId) => {
if (typeof priceFeedId == "string") {
if (priceFeedId.startsWith("0x")) {
priceFeedId = Buffer.from(priceFeedId.slice(2), "hex");
} else {
priceFeedId = Buffer.from(priceFeedId, "hex");
}
}
const shardBuffer = Buffer.alloc(2);
shardBuffer.writeUint16LE(shardId, 0);
const [address] = PublicKey.findProgramAddressSync(
[shardBuffer, priceFeedId],
PYTH_ORACLE_PROGRAM_ID,
);
return address;
}
// claim
export const getConfigAddress = () => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("config_seed")],
PROGRAM_ID,
);
return address;
}
export const getClaimAuthAddress = (mint) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("auth_seed"), mint.toBuffer()],
PROGRAM_ID
);
return address;
}
export const getUserStateAddress = (payer, mint) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("user_state_seed"), payer.toBuffer(), mint.toBuffer()],
PROGRAM_ID
);
return address;
}
export const getFeedAddress = (claimMint) => {
const [address] = PublicKey.findProgramAddressSync(
[Buffer.from("feed_seed"), claimMint.toBuffer()],
PROGRAM_ID
);
return address;
}