{"version":3,"file":"createStakeTransaction.cjs","sources":["../../../../src/staking/createStakeTransaction.ts"],"sourcesContent":["import {\n  Address,\n  appendTransactionMessageInstructions,\n  createTransactionMessage,\n  generateKeyPairSigner,\n  getBase64EncodedWireTransaction,\n  pipe,\n  Rpc,\n  setTransactionMessageFeePayer,\n  setTransactionMessageLifetimeUsingBlockhash,\n  signTransactionMessageWithSigners,\n  SolanaRpcApi,\n  TransactionSigner,\n} from \"@solana/kit\";\nimport { getCreateAccountInstruction } from \"@solana-program/system\";\nimport {\n  getDelegateStakeInstruction,\n  getInitializeInstruction,\n} from \"@solana-program/stake\";\n\nimport {\n  HELIUS_VALIDATOR_ID,\n  STAKE_PROGRAM_ID,\n  STAKE_STATE_LEN,\n  SYSVAR_CLOCK,\n  SYSVAR_STAKE_HISTORY,\n  UNUSED_STAKE_CONFIG_ACC,\n} from \"./types\";\n\nexport const makeCreateStakeTransaction = ({\n  rpc,\n}: {\n  rpc: Rpc<SolanaRpcApi>;\n}) => {\n  return async (\n    ownerSigner: TransactionSigner<string>,\n    amountSol: number\n  ): Promise<{ serializedTx: string; stakeAccountPubkey: Address }> => {\n    const rentExempt = await rpc\n      .getMinimumBalanceForRentExemption(BigInt(STAKE_STATE_LEN))\n      .send();\n\n    const userLamports = BigInt(Math.round(amountSol * 1_000_000_000));\n    const lamports = rentExempt + userLamports;\n\n    const stakeAccount = await generateKeyPairSigner();\n\n    const createIx = getCreateAccountInstruction({\n      payer: ownerSigner,\n      newAccount: stakeAccount,\n      lamports,\n      space: BigInt(STAKE_STATE_LEN),\n      programAddress: STAKE_PROGRAM_ID,\n    });\n\n    const initializeIx = getInitializeInstruction({\n      stake: stakeAccount.address,\n      arg0: { staker: ownerSigner.address, withdrawer: ownerSigner.address },\n      arg1: { unixTimestamp: 0n, epoch: 0n, custodian: ownerSigner.address },\n    });\n\n    const delegateIx = getDelegateStakeInstruction({\n      stake: stakeAccount.address,\n      vote: HELIUS_VALIDATOR_ID,\n      clockSysvar: SYSVAR_CLOCK,\n      stakeHistory: SYSVAR_STAKE_HISTORY,\n      unused: UNUSED_STAKE_CONFIG_ACC,\n      stakeAuthority: ownerSigner,\n    });\n\n    const { value: blockheight } = await rpc.getLatestBlockhash().send();\n\n    const msg = pipe(\n      createTransactionMessage({ version: 0 }),\n      (m) => setTransactionMessageFeePayer(ownerSigner.address, m),\n      (m) => setTransactionMessageLifetimeUsingBlockhash(blockheight, m),\n      (m) =>\n        appendTransactionMessageInstructions(\n          [createIx, initializeIx, delegateIx],\n          m\n        )\n    );\n\n    const signedTx = await signTransactionMessageWithSigners(msg);\n    const serializedTx = getBase64EncodedWireTransaction(signedTx);\n\n    return {\n      serializedTx,\n      stakeAccountPubkey: stakeAccount.address,\n    };\n  };\n};\n"],"names":["STAKE_STATE_LEN","generateKeyPairSigner","getCreateAccountInstruction","STAKE_PROGRAM_ID","getInitializeInstruction","getDelegateStakeInstruction","HELIUS_VALIDATOR_ID","SYSVAR_CLOCK","SYSVAR_STAKE_HISTORY","UNUSED_STAKE_CONFIG_ACC","pipe","createTransactionMessage","setTransactionMessageFeePayer","setTransactionMessageLifetimeUsingBlockhash","appendTransactionMessageInstructions","signTransactionMessageWithSigners","getBase64EncodedWireTransaction"],"mappings":";;;;;;;MA6Ba,0BAA0B,GAAG,CAAC,EACzC,GAAG,GAGJ,KAAI;AACH,IAAA,OAAO,OACL,WAAsC,EACtC,SAAiB,KACiD;QAClE,MAAM,UAAU,GAAG,MAAM;AACtB,aAAA,iCAAiC,CAAC,MAAM,CAACA,qBAAe,CAAC;AACzD,aAAA,IAAI,EAAE;AAET,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAa,CAAC,CAAC;AAClE,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY;AAE1C,QAAA,MAAM,YAAY,GAAG,MAAMC,yBAAqB,EAAE;QAElD,MAAM,QAAQ,GAAGC,kCAA2B,CAAC;AAC3C,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,UAAU,EAAE,YAAY;YACxB,QAAQ;AACR,YAAA,KAAK,EAAE,MAAM,CAACF,qBAAe,CAAC;AAC9B,YAAA,cAAc,EAAEG,sBAAgB;AACjC,SAAA,CAAC;QAEF,MAAM,YAAY,GAAGC,8BAAwB,CAAC;YAC5C,KAAK,EAAE,YAAY,CAAC,OAAO;AAC3B,YAAA,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,OAAO,EAAE;AACtE,YAAA,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE;AACvE,SAAA,CAAC;QAEF,MAAM,UAAU,GAAGC,iCAA2B,CAAC;YAC7C,KAAK,EAAE,YAAY,CAAC,OAAO;AAC3B,YAAA,IAAI,EAAEC,yBAAmB;AACzB,YAAA,WAAW,EAAEC,kBAAY;AACzB,YAAA,YAAY,EAAEC,0BAAoB;AAClC,YAAA,MAAM,EAAEC,6BAAuB;AAC/B,YAAA,cAAc,EAAE,WAAW;AAC5B,SAAA,CAAC;AAEF,QAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE;QAEpE,MAAM,GAAG,GAAGC,QAAI,CACdC,4BAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACxC,CAAC,CAAC,KAAKC,iCAA6B,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,EAC5D,CAAC,CAAC,KAAKC,+CAA2C,CAAC,WAAW,EAAE,CAAC,CAAC,EAClE,CAAC,CAAC,KACAC,wCAAoC,CAClC,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,EACpC,CAAC,CACF,CACJ;AAED,QAAA,MAAM,QAAQ,GAAG,MAAMC,qCAAiC,CAAC,GAAG,CAAC;AAC7D,QAAA,MAAM,YAAY,GAAGC,mCAA+B,CAAC,QAAQ,CAAC;QAE9D,OAAO;YACL,YAAY;YACZ,kBAAkB,EAAE,YAAY,CAAC,OAAO;SACzC;AACH,IAAA,CAAC;AACH;;;;"}