{"version":3,"file":"createAccount.mjs","sources":["../../../../../src/plugins/systemModule/operations/createAccount.ts"],"sourcesContent":["import { Keypair, PublicKey, SystemProgram } from '@solana/web3.js';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport type { Convergence } from '../../../Convergence';\nimport {\n  assertSol,\n  Operation,\n  OperationHandler,\n  OperationScope,\n  Signer,\n  SolAmount,\n  useOperation,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'CreateAccountOperation' as const;\n\n/**\n * Creates a new uninitialized Solana account.\n *\n * ```ts\n * const { newAccount } = await convergence\n *   .system()\n *   .createAccount({ space: 100 }); // 100 bytes\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const createAccountOperation = useOperation<CreateAccountOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type CreateAccountOperation = Operation<\n  typeof Key,\n  CreateAccountInput,\n  CreateAccountOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type CreateAccountInput = {\n  /** The space in bytes of the account to create. */\n  space: number;\n\n  /**\n   * The initial balance of the account.\n   *\n   * @defaultValue By default, this will be the minumum amount of lamports\n   * required for the account to be rent-exempt.\n   * i.e. it will be equal to `await convergence.rpc().getRent(space)`.\n   */\n  lamports?: SolAmount;\n\n  /**\n   * The new account as a Signer since it will be mutated on-chain.\n   *\n   * @defaultValue Defaults to a new generated Keypair, i.e. `Keypair.generate()`\n   */\n  newAccount?: Signer;\n\n  /**\n   * The address of the program that should own the new account.\n   *\n   * @defaultValue Defaults to the System Program.\n   */\n  program?: PublicKey;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type CreateAccountOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n\n  /** The new account created as a Signer. */\n  newAccount: Signer;\n\n  /** The lamports used to initialize the account's balance. */\n  lamports: SolAmount;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const createAccountOperationHandler: OperationHandler<CreateAccountOperation> =\n  {\n    async handle(\n      operation: CreateAccountOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<CreateAccountOutput> {\n      const builder = await createAccountBuilder(\n        convergence,\n        operation.input,\n        scope\n      );\n      scope.throwIfCanceled();\n      return builder.sendAndConfirm(convergence, scope.confirmOptions);\n    },\n  };\n\n// -----------------\n// Builder\n// -----------------\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type CreateAccountBuilderParams = CreateAccountInput & {\n  /** A key to distinguish the instruction that creates the account. */\n  instructionKey?: string;\n};\n\n/**\n * @group Transaction Builders\n * @category Contexts\n */\nexport type CreateAccountBuilderContext = Omit<CreateAccountOutput, 'response'>;\n\n/**\n * Creates a new uninitialized Solana account.\n *\n * ```ts\n * const transactionBuilder = await convergence\n *   .system()\n *   .builders()\n *   .createAccount({ space: 100 }); // 100 bytes\n * ```\n *\n * Note that accessing this transaction builder is asynchronous\n * because we may need to contact the cluster to get the\n * rent-exemption for the provided space.\n *\n * @group Transaction Builders\n * @category Constructors\n */\nexport const createAccountBuilder = async (\n  convergence: Convergence,\n  params: CreateAccountBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<CreateAccountBuilderContext>> => {\n  const { payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const {\n    space,\n    newAccount = Keypair.generate(),\n    program = SystemProgram.programId,\n  } = params;\n\n  const lamports = params.lamports ?? (await convergence.rpc().getRent(space));\n  assertSol(lamports);\n\n  const txBuilder = TransactionBuilder.make<CreateAccountBuilderContext>()\n    .setFeePayer(payer)\n    .setContext({\n      newAccount,\n      lamports,\n    })\n    .add({\n      instruction: SystemProgram.createAccount({\n        fromPubkey: payer.publicKey,\n        newAccountPubkey: newAccount.publicKey,\n        space,\n        lamports: lamports.basisPoints.toNumber(),\n        programId: program,\n      }),\n      signers: [payer, newAccount],\n      key: params.instructionKey ?? 'createAccount',\n    });\n\n  await addComputeBudgetIxsIfNeeded(txBuilder, convergence);\n  return txBuilder;\n};\n"],"names":["Key","createAccountOperation","useOperation","createAccountOperationHandler","handle","operation","convergence","scope","_asyncToGenerator","_regeneratorRuntime","mark","_callee","builder","wrap","_callee$","_context","prev","next","createAccountBuilder","input","sent","throwIfCanceled","abrupt","sendAndConfirm","confirmOptions","stop","_ref","_callee2","params","_params$lamports","_params$instructionKe","options","_options$payer","payer","space","_params$newAccount","newAccount","_params$program","program","lamports","txBuilder","_args2","arguments","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","Keypair","generate","SystemProgram","programId","t0","getRent","assertSol","TransactionBuilder","make","setFeePayer","setContext","add","instruction","createAccount","fromPubkey","publicKey","newAccountPubkey","basisPoints","toNumber","signers","key","instructionKey","addComputeBudgetIxsIfNeeded","_x","_x2","apply"],"mappings":"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"}