depositSol static method

TransactionInstruction depositSol({
  1. required Pubkey stakePoolAddress,
  2. required Pubkey withdrawAuthority,
  3. required Pubkey reserveStake,
  4. required Pubkey payer,
  5. required Pubkey payerTokenAccount,
  6. required Pubkey feeAccount,
  7. required Pubkey referralFeeAccount,
  8. required Pubkey poolMint,
  9. Pubkey? depositAuthority,
  10. required bu64 lamports,
})

Deposit SOL directly into the pool's reserve account. The output is a "pool" token representing ownership into the pool. Inputs are converted to the current ratio.

Keys:

  • [w] stakePoolAddress - Stake pool
  • [] withdrawAuthority - Stake pool withdraw authority
  • [w] reserveStake - Reserve stake account, to deposit SOL
  • [s] payer - Account providing the lamports to be deposited into the pool
  • [w] payerTokenAccount - User account to receive pool tokens
  • [w] feeAccount - Account to receive fee tokens
  • [w] referralFeeAccount - Account to receive a portion of fee as referral fees
  • [w] poolMint - Pool token mint account
  • [s] depositAuthority - (Optional) Stake pool sol deposit authority.

Data:

  • lamports - Amount of solana to deposit in exchange for pool tokens.

Implementation

static TransactionInstruction depositSol({
  // Keys
  required final Pubkey stakePoolAddress,
  required final Pubkey withdrawAuthority,
  required final Pubkey reserveStake,
  required final Pubkey payer,
  required final Pubkey payerTokenAccount,
  required final Pubkey feeAccount,
  required final Pubkey referralFeeAccount,
  required final Pubkey poolMint,
  final Pubkey? depositAuthority,
  // Data
  required final bu64 lamports,
}) {
  //  0. `[w]` Stake pool
  //  1. `[]` Stake pool withdraw authority
  //  2. `[w]` Reserve stake account, to deposit SOL
  //  3. `[s]` Account providing the lamports to be deposited into the pool
  //  4. `[w]` User account to receive pool tokens
  //  5. `[w]` Account to receive fee tokens
  //  6. `[w]` Account to receive a portion of fee as referral fees
  //  7. `[w]` Pool token mint account
  //  8. `[]` System program account
  //  9. `[]` Token program id
  // 10. `[s]` (Optional) Stake pool sol deposit authority.
  final List<AccountMeta> keys = [
    AccountMeta.writable(stakePoolAddress),
    AccountMeta(withdrawAuthority),
    AccountMeta.writable(reserveStake),
    AccountMeta.signer(payer),
    AccountMeta.writable(payerTokenAccount),
    AccountMeta.writable(feeAccount),
    AccountMeta.writable(referralFeeAccount),
    AccountMeta.writable(poolMint),
    AccountMeta(SystemProgram.programId),
    AccountMeta(TokenProgram.programId),
    if (depositAuthority != null)
      AccountMeta.signer(depositAuthority),
  ];

  final List<Iterable<int>> data = [
    borsh.u64.encode(lamports),
  ];

  return _instance.createTransactionIntruction(
    StakePoolInstruction.depositSol,
    keys: keys,
    data: data,
  );
}