depositStake static method
TransactionInstruction
depositStake({
- required Pubkey stakePoolAddress,
- required Pubkey validatorList,
- required Pubkey depositAuthority,
- bool isDepositAuthoritySigner = false,
- required Pubkey withdrawAuthority,
- required Pubkey stakeAccount,
- required Pubkey validatorStakeAccount,
- required Pubkey reserveStake,
- required Pubkey userTokenAccount,
- required Pubkey tokenAccount,
- required Pubkey referralFeeAccount,
- required Pubkey poolMint,
Deposit some stake into the pool. The output is a "pool" token representing ownership into the pool. Inputs are converted to the current ratio.
Keys:
[w]
stakePoolAddress
- Stake pool.[w]
validatorList
- Validator stake list storage account.[s]/[]
depositAuthority
- Stake pool deposit authority.[]
withdrawAuthority
- Stake pool withdraw authority.[w]
stakeAccount
- Stake account to join the pool (withdraw authority for the stake account should be first set to the stake pool deposit authority).[w]
validatorStakeAccount
- Validator stake account for the stake account to be merged with.[w]
reserveStake
- Reserve stake account, to withdraw rent exempt reserve.[w]
userTokenAccount
- User account to receive pool tokens.[w]
tokenAccount
- Account to receive pool fee tokens.[w]
referralFeeAccount
- Account to receive a portion of pool fee tokens as referral fees.[w]
poolMint
- Pool token mint account.
Implementation
static TransactionInstruction depositStake({
required final Pubkey stakePoolAddress,
required final Pubkey validatorList,
required final Pubkey depositAuthority,
final bool isDepositAuthoritySigner = false,
required final Pubkey withdrawAuthority,
required final Pubkey stakeAccount,
required final Pubkey validatorStakeAccount,
required final Pubkey reserveStake,
required final Pubkey userTokenAccount,
required final Pubkey tokenAccount,
required final Pubkey referralFeeAccount,
required final Pubkey poolMint,
}) {
// 0. `[w]` Stake pool
// 1. `[w]` Validator stake list storage account
// 2. `[s]/[]` Stake pool deposit authority
// 3. `[]` Stake pool withdraw authority
// 4. `[w]` Stake account to join the pool (withdraw authority for the stake account should be
// first set to the stake pool deposit authority)
// 5. `[w]` Validator stake account for the stake account to be merged with
// 6. `[w]` Reserve stake account, to withdraw rent exempt reserve
// 7. `[w]` User account to receive pool tokens
// 8. `[w]` Account to receive pool fee tokens
// 9. `[w]` Account to receive a portion of pool fee tokens as referral fees
// 10. `[w]` Pool token mint account
// 11. `[]` Sysvar clock account
// 12. `[]` Sysvar stake history account
// 13. `[]` Pool token program id
// 14. `[]` Stake program id
final List<AccountMeta> keys = [
AccountMeta.writable(stakePoolAddress),
AccountMeta.writable(validatorList),
AccountMeta(depositAuthority, isSigner: isDepositAuthoritySigner),
AccountMeta(withdrawAuthority),
AccountMeta.writable(stakeAccount),
AccountMeta.writable(validatorStakeAccount),
AccountMeta.writable(reserveStake),
AccountMeta.writable(userTokenAccount),
AccountMeta.writable(tokenAccount),
AccountMeta.writable(referralFeeAccount),
AccountMeta.writable(poolMint),
AccountMeta(sysvarClockPubkey),
AccountMeta(sysvarStakeHistoryPubkey),
AccountMeta(TokenProgram.programId),
AccountMeta(StakeProgram.programId),
];
return _instance.createTransactionIntruction(
StakePoolInstruction.depositStake,
keys: keys,
);
}