UNPKG

@wuwei-labs/srsly

Version:
74 lines 2.92 kB
"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