setLockupChecked static method

TransactionInstruction setLockupChecked({
  1. required Pubkey stakeAccount,
  2. required Pubkey authority,
  3. required Pubkey? custodian,
  4. required LockupCheckedArgs lockup,
})

Set stake lockup.

This instruction behaves like SetLockup with the additional requirement that the new lockup authority also be a signer.

If a lockup is not active, the withdraw authority may set a new lockup. If a lockup is active, the lockup custodian may update the lockup parameters.

Keys:

  • [w] stakeAccount - Initialized stake account.
  • [s] authority - Lockup authority or withdraw authority.
  • [s] custodian - New lockup authority (optional).

Implementation

static TransactionInstruction setLockupChecked({
  // Keys
  required final Pubkey stakeAccount,
  required final Pubkey authority,
  required final Pubkey? custodian,
  // Data
  required final LockupCheckedArgs lockup,
}) {
  // 0. `[w]` Initialized stake account
  // 1. `[s]` Lockup authority or withdraw authority
  // 2. `[s]` New lockup authority (optional)
  final List<AccountMeta> keys = [
    AccountMeta.writable(stakeAccount),
    AccountMeta.signer(authority),
    if (custodian != null)
      AccountMeta.signer(custodian),
  ];

  final List<Iterable<u8>> data = [
    LockupCheckedArgs.codec.encode(lockup.toJson()),
  ];

  return _instance.createTransactionIntruction(
    StakeInstruction.setLockupChecked,
    keys: keys,
    data: data,
  );
}