UNPKG

@wuwei-labs/srsly

Version:
122 lines 4.92 kB
/** * PDA derivation functions for the SRSLY program * @module pda/srsly */ import { address, getProgramDerivedAddress, getAddressEncoder } from '@solana/kit'; import { getAddresses } from '../utils/config'; import { getSignerAddress } from '../utils/signer'; import { CONFIG_SEED, CONTRACT_SEED, RENTAL_SEED, RENTAL_AUTHORITY_SEED, BORROWER_STATE_SEED, ACTIVE_RENTAL_SEED, QUEUED_RENTAL_SEED, } from './constants'; /** * Address encoder for PDA seeds */ const addressEncoder = getAddressEncoder(); /** * Text encoder for string seeds */ const textEncoder = new TextEncoder(); /** * Derive the contract PDA from a fleet address * @param fleet - The fleet public key * @param programAddress - Optional SRSLY program address (defaults to network-specific address) * @returns The derived contract PDA */ export async function deriveContract(fleet, programAddress) { const fleetAddress = getSignerAddress(fleet); const program = programAddress ? getSignerAddress(programAddress) : address(getAddresses().srsly); // Encode seeds to bytes const contractSeedBytes = textEncoder.encode(CONTRACT_SEED); const fleetBytes = addressEncoder.encode(fleetAddress); const [pda] = await getProgramDerivedAddress({ programAddress: program, seeds: [contractSeedBytes, fleetBytes], }); return pda; } /** * Internal helper to derive a rental PDA with a named seed suffix */ async function deriveRentalWithSeed(contract, seedSuffix, programAddress) { const contractAddress = getSignerAddress(contract); const program = programAddress ? getSignerAddress(programAddress) : address(getAddresses().srsly); const rentalSeedBytes = textEncoder.encode(RENTAL_SEED); const contractBytes = addressEncoder.encode(contractAddress); const suffixBytes = textEncoder.encode(seedSuffix); const [pda] = await getProgramDerivedAddress({ programAddress: program, seeds: [rentalSeedBytes, contractBytes, suffixBytes], }); return pda; } /** * Derive the active rental PDA from contract address * * Seeds: ["rental_state", contract, "active"] * * @param contract - The contract public key * @param programAddress - Optional SRSLY program address (defaults to network-specific address) * @returns The derived active rental PDA */ export async function deriveActiveRental(contract, programAddress) { return deriveRentalWithSeed(contract, ACTIVE_RENTAL_SEED, programAddress); } /** * Derive the queued rental PDA from contract address * * Seeds: ["rental_state", contract, "queued"] * * @param contract - The contract public key * @param programAddress - Optional SRSLY program address (defaults to network-specific address) * @returns The derived queued rental PDA */ export async function deriveQueuedRental(contract, programAddress) { return deriveRentalWithSeed(contract, QUEUED_RENTAL_SEED, programAddress); } /** * Derive the rental authority PDA * @param programAddress - Optional SRSLY program address (defaults to network-specific address) * @returns The derived rental authority PDA */ export async function deriveRentalAuthority(programAddress) { const program = programAddress ? getSignerAddress(programAddress) : address(getAddresses().srsly); // Encode seeds to bytes const rentalAuthoritySeedBytes = textEncoder.encode(RENTAL_AUTHORITY_SEED); const [pda] = await getProgramDerivedAddress({ programAddress: program, seeds: [rentalAuthoritySeedBytes], }); return pda; } /** * Derive the borrower state PDA from a borrower address * @param borrower - The borrower public key * @param programAddress - Optional SRSLY program address (defaults to network-specific address) * @returns The derived borrower state PDA */ export async function deriveBorrowerState(borrower, programAddress) { const borrowerAddress = getSignerAddress(borrower); const program = programAddress ? getSignerAddress(programAddress) : address(getAddresses().srsly); // Encode seeds to bytes const borrowerStateSeedBytes = textEncoder.encode(BORROWER_STATE_SEED); const borrowerBytes = addressEncoder.encode(borrowerAddress); const [pda] = await getProgramDerivedAddress({ programAddress: program, seeds: [borrowerStateSeedBytes, borrowerBytes], }); return pda; } /** * Derive the config PDA * @param programAddress - Optional SRSLY program address (defaults to network-specific address) * @returns The derived config PDA */ export async function deriveConfig(programAddress) { const program = programAddress ? getSignerAddress(programAddress) : address(getAddresses().srsly); // Encode seeds to bytes const configSeedBytes = textEncoder.encode(CONFIG_SEED); const [pda] = await getProgramDerivedAddress({ programAddress: program, seeds: [configSeedBytes], }); return pda; } //# sourceMappingURL=srsly.js.map