# Other Instructions

## \[User] RequestStakeUpdate

* Create a StakeUpdateRequest { amount } account.
* if amount < 0, its considered a withdraw request.
* Else it's a deposit request.
* This request has an internal approval step for AML checks

## \[Admin] ApproveStakeUpdate

* Mark StakeUpdate as AML check completed.

## \[Admin] CompleteStakeUpdate

* Wait until funds are no longer locked in francium. ie, the Epoch is back to the Running state.
* if deposit:
  * Move requested amount from PendingDepositVault into DepositVault
* if withdraw:
  * Move requested amount from DepositVault into User's USDC ATA
  * If requested amount is more than the available balance, move all the available balance.

## \[User|Admin] CancelStakeUpdate

* If the stake update was a deposit
  * Move the amount from PendingDepositVault into User's USDC ATA.
* Delete the StakeUpdate account

## \[User] ClaimWinning { page, index }

* Mark the winner entry as claimed.
* Move the prize amount from the prize vault to deposit vault and update user's stake account.

## \[Admin] FundJackpot

* prize\_amount = EpochTierWinners(tier=1,epoch\_index=current).amount
* Move prize\_amount from Admin's USDC ATA -> Tier1PrizeVault.
* EpochTierWinners(tier, epoch\_index).claimable = true

## \[Admin] WithdrawVault

* vault = Treasury or Insurance
* Move \`amount\` from \`vault\` into Admin's USDC ATA.

## \[Admin] RotateKey { key\_type, value }

* Change the authorized key of any of SuperAdmin, Admin, Investor.
* This is updated as LatestEpoch.pubkeys.\<key\_type> = value

##
