depositSol static method
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,
);
}