Ref - https://solana.com/docs/core/pda
Video - https://www.youtube.com/watch?v=p0eD29d8JCM
Program Derived Addresses (PDAs) provide developers on Solana with two main use cases:
const { PublicKey } = require('@solana/web3.js');
const { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } = require('@solana/spl-token');
// Replace these with your actual values
const userAddress = new PublicKey('5gjLjKtBhDxWL4nwGKprThQwyzzNZ7XNAVFcEtw3rD4i');
const tokenMintAddress = new PublicKey('6NeR2StEEb6CP75Gsd7ydbiAkabdriMdixPmC2U9hcJs');
// Derive the associated token address
const getAssociatedTokenAddress = (mintAddress, ownerAddress) => {
return PublicKey.findProgramAddressSync(
[
ownerAddress.toBuffer(),
TOKEN_PROGRAM_ID.toBuffer(),
mintAddress.toBuffer(),
],
ASSOCIATED_TOKEN_PROGRAM_ID
);
};
const [associatedTokenAddress, bump] = getAssociatedTokenAddress(tokenMintAddress, userAddress);
console.log(`Associated Token Address: ${associatedTokenAddress.toBase58()}, bump: ${bump}`);
createProgramAddress
vs findProgramAddress
const { PublicKey } = require('@solana/web3.js');
const { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } = require('@solana/spl-token');
const PDA = PublicKey.createProgramAddressSync(
[userAddress.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), tokenMintAddress.toBuffer(), Buffer.from([255])],
ASSOCIATED_TOKEN_PROGRAM_ID,
);
console.log(`PDA: ${PDA}`);