setPreferredValidator static method
TransactionInstruction
setPreferredValidator({
- required Pubkey stakePoolAddress,
- required Pubkey staker,
- required Pubkey validatorList,
- required PreferredValidatorType validatorType,
- required Pubkey? validatorVoteAddress,
(Staker only) Set the preferred deposit or withdraw stake account for the stake pool.
In order to avoid users abusing the stake pool as a free conversion between SOL staked on different validators, the staker can force all deposits and/or withdraws to go to one chosen account, or unset that account.
Fails if the validator is not part of the stake pool.
Keys:
stakePoolAddress[w]- Stake pool.staker[s]Stake pool staker.validatorList[]Validator list.
Data:
validatorType- Affected operation (deposit or withdraw).validatorVoteAddress- Validator vote account that deposits or withdraws must go through, unset withnull
Implementation
static TransactionInstruction setPreferredValidator({
// Keys
required final Pubkey stakePoolAddress,
required final Pubkey staker,
required final Pubkey validatorList,
// Data
required final PreferredValidatorType validatorType,
required final Pubkey? validatorVoteAddress,
}) {
// 0. `[w]` Stake pool
// 1. `[s]` Stake pool staker
// 2. `[]` Validator list
final List<AccountMeta> keys = [
AccountMeta.writable(stakePoolAddress),
AccountMeta.signer(staker),
AccountMeta(validatorList),
];
final List<Iterable<int>> data = [
borsh.enumeration(PreferredValidatorType.values).encode(validatorType),
borsh.pubkey.option().encode(validatorVoteAddress?.toBase58()),
];
return _instance.createTransactionIntruction(
StakePoolInstruction.setPreferredValidator,
keys: keys,
data: data,
);
}