import { getBitcoinNetwork, toXOnly } from '@saturnbtcio/psbt'; import { SaturnSdkConfig } from '../../saturn-sdk'; import { validatePoolSdkData } from '../../util/validation'; import { hex } from '@scure/base'; import { createSetOwnerProtocolMessage, SetOwnerInstruction, } from '@saturnbtcio/pool-serde-sdk'; import { AVAILABLE_FEE_TIERS } from '../../util/constants'; import { PoolErrorException, PoolErrorType } from '../../error/pool.error'; import { SetOwnerMessageRequest } from './set-owner.dto'; import { createProtocolPda } from '../../account/pda-finder'; export class SetOwner { private readonly config: SaturnSdkConfig; constructor(config: SaturnSdkConfig) { this.config = config; } async setOwnerMessage(request: SetOwnerMessageRequest) { const scureNetwork = getBitcoinNetwork(this.config.network); validatePoolSdkData(request, scureNetwork); const initializeProtocolData: SetOwnerInstruction = { newOwner: hex.encode(toXOnly(hex.decode(request.newOwner))), }; let [protocolPda, _bump] = createProtocolPda( hex.decode(this.config.programAccount), ); const message = createSetOwnerProtocolMessage( this.config.programAccount, hex.encode(toXOnly(hex.decode(request.feePayerPubkey))), hex.encode(protocolPda), initializeProtocolData, request.recentBlockhash, ); return message; } }