import { getBitcoinNetwork, toXOnly } from '@saturnbtcio/psbt'; import { SaturnSdkConfig } from '../../saturn-sdk'; import { validatePoolSdkData } from '../../util/validation'; import { hex } from '@scure/base'; import { createSetFeeTiersProtocolMessage, SetFeeTiersInstruction, } from '@saturnbtcio/pool-serde-sdk'; import { createProtocolPda } from '../../account/pda-finder'; import { SetFeeTiersMessageRequest } from './set-fee-tiers.dto'; import { PoolErrorException, PoolErrorType } from '../../error/pool.error'; export class SetFeeTiers { private readonly config: SaturnSdkConfig; constructor(config: SaturnSdkConfig) { this.config = config; } async setFeeTiersMessage(request: SetFeeTiersMessageRequest) { const scureNetwork = getBitcoinNetwork(this.config.network); validatePoolSdkData(request, scureNetwork); const setFeeTiersData: SetFeeTiersInstruction = { feeTiers: request.feeTiers, }; let [protocolPda, _bump] = createProtocolPda( hex.decode(this.config.programAccount), ); const message = createSetFeeTiersProtocolMessage( this.config.programAccount, hex.encode(toXOnly(hex.decode(request.feePayerPubkey))), hex.encode(protocolPda), setFeeTiersData, request.recentBlockhash, ); return message; } }