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