UNPKG

@wuwei-labs/srsly

Version:
130 lines 5.46 kB
"use strict"; /** * PDA derivation functions for the SRSLY program * @module pda/srsly */ Object.defineProperty(exports, "__esModule", { value: true }); exports.deriveContract = deriveContract; exports.deriveActiveRental = deriveActiveRental; exports.deriveQueuedRental = deriveQueuedRental; exports.deriveRentalAuthority = deriveRentalAuthority; exports.deriveBorrowerState = deriveBorrowerState; exports.deriveConfig = deriveConfig; const kit_1 = require("@solana/kit"); const config_1 = require("../utils/config"); const signer_1 = require("../utils/signer"); const constants_1 = require("./constants"); /** * Address encoder for PDA seeds */ const addressEncoder = (0, kit_1.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 */ async function deriveContract(fleet, programAddress) { const fleetAddress = (0, signer_1.getSignerAddress)(fleet); const program = programAddress ? (0, signer_1.getSignerAddress)(programAddress) : (0, kit_1.address)((0, config_1.getAddresses)().srsly); // Encode seeds to bytes const contractSeedBytes = textEncoder.encode(constants_1.CONTRACT_SEED); const fleetBytes = addressEncoder.encode(fleetAddress); const [pda] = await (0, kit_1.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 = (0, signer_1.getSignerAddress)(contract); const program = programAddress ? (0, signer_1.getSignerAddress)(programAddress) : (0, kit_1.address)((0, config_1.getAddresses)().srsly); const rentalSeedBytes = textEncoder.encode(constants_1.RENTAL_SEED); const contractBytes = addressEncoder.encode(contractAddress); const suffixBytes = textEncoder.encode(seedSuffix); const [pda] = await (0, kit_1.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 */ async function deriveActiveRental(contract, programAddress) { return deriveRentalWithSeed(contract, constants_1.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 */ async function deriveQueuedRental(contract, programAddress) { return deriveRentalWithSeed(contract, constants_1.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 */ async function deriveRentalAuthority(programAddress) { const program = programAddress ? (0, signer_1.getSignerAddress)(programAddress) : (0, kit_1.address)((0, config_1.getAddresses)().srsly); // Encode seeds to bytes const rentalAuthoritySeedBytes = textEncoder.encode(constants_1.RENTAL_AUTHORITY_SEED); const [pda] = await (0, kit_1.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 */ async function deriveBorrowerState(borrower, programAddress) { const borrowerAddress = (0, signer_1.getSignerAddress)(borrower); const program = programAddress ? (0, signer_1.getSignerAddress)(programAddress) : (0, kit_1.address)((0, config_1.getAddresses)().srsly); // Encode seeds to bytes const borrowerStateSeedBytes = textEncoder.encode(constants_1.BORROWER_STATE_SEED); const borrowerBytes = addressEncoder.encode(borrowerAddress); const [pda] = await (0, kit_1.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 */ async function deriveConfig(programAddress) { const program = programAddress ? (0, signer_1.getSignerAddress)(programAddress) : (0, kit_1.address)((0, config_1.getAddresses)().srsly); // Encode seeds to bytes const configSeedBytes = textEncoder.encode(constants_1.CONFIG_SEED); const [pda] = await (0, kit_1.getProgramDerivedAddress)({ programAddress: program, seeds: [configSeedBytes], }); return pda; } //# sourceMappingURL=srsly.js.map