@wuwei-labs/srsly
Version:
TypeScript SDK for SRSLY
74 lines • 2.92 kB
JavaScript
"use strict";
/**
* PDA derivation functions for the Antegen (Thread) program
* @module pda/thread
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.deriveContractThread = deriveContractThread;
exports.deriveFiber = deriveFiber;
const kit_1 = require("@solana/kit");
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 thread PDA
*
* Per-contract thread used by Antegen for automated payment scheduling.
* Thread PDAs use seeds: [SEED_THREAD, authority, id]
* where id = contract address.
*
* @param contract - The contract PDA (used as the thread ID)
* @param authority - The rental authority PDA (thread authority)
* @param programAddress - Optional Antegen program address (defaults to Antegen program)
* @returns The derived contract thread PDA
*/
async function deriveContractThread(contract, authority, programAddress) {
const contractAddress = (0, signer_1.getSignerAddress)(contract);
const authorityAddr = (0, signer_1.getSignerAddress)(authority);
const program = programAddress
? (0, signer_1.getSignerAddress)(programAddress)
: (0, kit_1.address)(constants_1.ANTEGEN_THREAD_PROGRAM);
// Encode seeds to bytes
// Antegen ALWAYS uses: [SEED_THREAD, authority, id]
const threadSeedBytes = textEncoder.encode(constants_1.THREAD_SEED);
const authorityBytes = addressEncoder.encode(authorityAddr);
const contractBytes = addressEncoder.encode(contractAddress);
const seeds = [threadSeedBytes, authorityBytes, contractBytes];
const [pda] = await (0, kit_1.getProgramDerivedAddress)({
programAddress: program,
seeds,
});
return pda;
}
/**
* Derive the fiber PDA for a thread
*
* Fiber PDAs use seeds: ["thread_fiber", thread, fiber_index (u8)]
*
* @param thread - The thread PDA
* @param fiberIndex - The fiber index (1 for close_rental, 2 for activate_rental)
* @param programAddress - Optional Antegen program address
* @returns The derived fiber PDA
*/
async function deriveFiber(thread, fiberIndex, programAddress) {
const threadAddress = (0, signer_1.getSignerAddress)(thread);
const program = programAddress
? (0, signer_1.getSignerAddress)(programAddress)
: (0, kit_1.address)(constants_1.ANTEGEN_FIBER_PROGRAM);
const fiberSeedBytes = textEncoder.encode(constants_1.THREAD_FIBER_SEED);
const threadBytes = addressEncoder.encode(threadAddress);
const indexBytes = new Uint8Array([fiberIndex]);
const [pda] = await (0, kit_1.getProgramDerivedAddress)({
programAddress: program,
seeds: [fiberSeedBytes, threadBytes, indexBytes],
});
return pda;
}
//# sourceMappingURL=thread.js.map