diff --git a/src/tools/squads_multisig/create_multisig.ts b/src/tools/squads_multisig/create_multisig.ts new file mode 100644 index 0000000..b1f7ae3 --- /dev/null +++ b/src/tools/squads_multisig/create_multisig.ts @@ -0,0 +1,53 @@ +import * as multisig from "@sqds/multisig"; +import { PublicKey } from "@solana/web3.js"; +import { SolanaAgentKit } from "../../index"; + +export async function createSquadsMultisig( + agent: SolanaAgentKit, + creator: PublicKey, +): Promise { + const connection = agent.connection; + const createKey = agent.wallet; // can be any keypair, using the agent wallet as only one multisig is required + console.log("Multisig Create Key:", createKey.publicKey.toBase58()); + + const [multisigPda] = multisig.getMultisigPda({ + createKey: createKey.publicKey, + }); + + const programConfigPda = multisig.getProgramConfigPda({})[0]; + + const programConfig = + await multisig.accounts.ProgramConfig.fromAccountAddress( + connection, + programConfigPda, + ); + + const configTreasury = programConfig.treasury; + const tx = multisig.transactions.multisigCreateV2({ + blockhash: (await connection.getLatestBlockhash()).blockhash, + treasury: configTreasury, + createKey: createKey.publicKey, + creator: agent.wallet.publicKey, + multisigPda, + configAuthority: null, + timeLock: 0, + threshold: 2, + rentCollector: null, + members: [ + { + key: agent.wallet.publicKey, + permissions: multisig.types.Permissions.all(), + }, + { + key: creator, + permissions: multisig.types.Permissions.all(), + }, + ], + }); + + tx.sign([agent.wallet, createKey]); + + const txId = connection.sendRawTransaction(tx.serialize()); + + return txId; +}