import { SolanaAgentKit } from "../../index"; import * as multisig from "@sqds/multisig"; const { Multisig } = multisig.accounts; /** * Approves a proposal in a Solana multisig wallet. * * @param {SolanaAgentKit} agent - The Solana agent kit instance. * @param {number | bigint} [transactionIndex] - The index of the transaction to approve. If not provided, the current transaction index will be used. * @returns {Promise} - A promise that resolves to the transaction ID of the approved proposal. * @throws {Error} - Throws an error if the approval process fails. */ export async function approve_proposal( agent: SolanaAgentKit, transactionIndex?: number | bigint, ): Promise { try { const createKey = agent.wallet; const [multisigPda] = multisig.getMultisigPda({ createKey: createKey.publicKey, }); const multisigInfo = await Multisig.fromAccountAddress( agent.connection, multisigPda, ); const currentTransactionIndex = Number(multisigInfo.transactionIndex); if (!transactionIndex) { transactionIndex = BigInt(currentTransactionIndex); } else if (typeof transactionIndex !== "bigint") { transactionIndex = BigInt(transactionIndex); } // const [proposalPda, proposalBump] = multisig.getProposalPda({ // multisigPda, // transactionIndex, // }); const multisigTx = multisig.transactions.proposalApprove({ blockhash: (await agent.connection.getLatestBlockhash()).blockhash, feePayer: agent.wallet.publicKey, multisigPda, transactionIndex: transactionIndex, member: agent.wallet.publicKey, }); multisigTx.sign([agent.wallet]); const tx = await agent.connection.sendRawTransaction( multisigTx.serialize(), ); return tx; } catch (error: any) { throw new Error(`Transfer failed: ${error}`); } }