UNPKG

@wuwei-labs/srsly

Version:
63 lines 2.41 kB
"use strict"; /** * Token account derivation utilities * @module pda/token */ Object.defineProperty(exports, "__esModule", { value: true }); exports.deriveAssociatedTokenAccount = deriveAssociatedTokenAccount; const kit_1 = require("@solana/kit"); const signer_1 = require("../utils/signer"); /** * SPL Token program address */ const TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'; /** * SPL Associated Token Account program address */ const ASSOCIATED_TOKEN_PROGRAM = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'; /** * Address encoder for PDA seeds */ const addressEncoder = (0, kit_1.getAddressEncoder)(); /** * Derive an Associated Token Account (ATA) address * * ATAs are deterministic token accounts owned by a wallet for a specific token mint. * This is the standard way to derive token account addresses in Solana. * * @param owner - The wallet public key that owns the ATA * @param mint - The token mint public key * @param tokenProgramAddress - Optional token program address (defaults to SPL Token) * @param associatedTokenProgramAddress - Optional ATA program address (defaults to SPL ATA) * @returns The derived ATA address * * @example * ```typescript * import { deriveAssociatedTokenAccount } from './token'; * * const ata = await deriveAssociatedTokenAccount( * walletAddress, * atlasMintAddress * ); * ``` */ async function deriveAssociatedTokenAccount(owner, mint, tokenProgramAddress, associatedTokenProgramAddress) { const ownerAddress = (0, signer_1.getSignerAddress)(owner); const mintAddress = (0, signer_1.getSignerAddress)(mint); const tokenProgram = tokenProgramAddress ? (0, signer_1.getSignerAddress)(tokenProgramAddress) : (0, kit_1.address)(TOKEN_PROGRAM); const ataProgram = associatedTokenProgramAddress ? (0, signer_1.getSignerAddress)(associatedTokenProgramAddress) : (0, kit_1.address)(ASSOCIATED_TOKEN_PROGRAM); // Encode all address seeds to bytes for PDA derivation const ownerBytes = addressEncoder.encode(ownerAddress); const tokenProgramBytes = addressEncoder.encode(tokenProgram); const mintBytes = addressEncoder.encode(mintAddress); const [pda] = await (0, kit_1.getProgramDerivedAddress)({ programAddress: ataProgram, seeds: [ownerBytes, tokenProgramBytes, mintBytes], }); return pda; } //# sourceMappingURL=token.js.map