@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
63 lines • 2.41 kB
JavaScript
"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