State Transitions
State Transitions
This document describes the state transition operations pertaining to:
Creating an insurance fund
Underwriting an insurance fund
Request a redemption from the insurance fund
Automatic processing of matured redemption requests
Creating insurance fund
Params descriptionSender field describes the creator of an insurance fund .Ticker, QuoteDenom, OracleBase, OracleQuote, OracleType, Expiry fields describe the derivative market info
that the insurance fund associated to.InitialDeposit field describes the initial deposit amount to be put on the insurance fund.
Steps
Get
MarketIdfor the insurance fund - Note, market could be not available yet onexchangeand it's not an issueEnsure if insurance fund associated to the
MarketIddoes not existEnsure if initial deposit amount is not zero
Get
shareDenomthat is unique - it's incremented when share denom is requested for insurance fund creation or when underwriting insurance fund that has zero balance and non-zero total share denom supply.Send coins from creator's account to insurance fund module account
Create insurance fund object with
DefaultRedemptionNoticePeriodDurationand with the params providedSet
Balanceof fund object to initial deposit amountMint
InsuranceFundInitialSupply(10^18)shareDenomtokens to creator accountSave insurance fund object to store
Register newly created insurance fund
shareDenommetadata inside BankKeeper
Underwriting an insurance fund
Params descriptionSender field describes the underwriter of an insurance fund .MarketId field describes the derivative market id to the insurance fund.Deposit field describes the deposit amount to be added on the insurance fund.
Steps
Ensure if insurance fund associated to the
MarketIddoes existSend underwriting tokens from sender's account to module account
Make actions based on the status of insurance fund associated to the
MarketId.A. when
BalanceandShareDenomSupplyare zeromint
InsuranceFundInitialSupply(10^18) to the sender.set
Balanceto deposit amountset
ShareDenomSupplytoInsuranceFundInitialSupply
B. when
Balanceis zero andShareDenomSupplyis not zerochange
ShareDenomof the the insurance fund to start new insurance fund from beginning.register newly created
ShareDenomin bank keepermint
InsuranceFundInitialSupply(10^18) to the sender.set
Balanceto deposit amountset
ShareDenomSupplytoInsuranceFundInitialSupply
C. when
Balanceis not zero andShareDenomSupplyis zeromint
InsuranceFundInitialSupply(10^18) to the sender.increase
Balanceby deposit amountset
ShareDenomSupplytoInsuranceFundInitialSupply
D. when both
BalanceandShareDenomSupplyare not zero - normal caseincrease
Balanceby deposit amountmint
prev_ShareDenomSupply * deposit_amount / prev_Balanceamount ofShareDenomto senderincrease
ShareDenomSupplywith mint amount
Save insurance fund object to store
Requesting a redemption from an insurance fund
Params descriptionSender field describes the redemption requester of an insurance fund .MarketId field describes the derivative market id associated to the insurance fund.Amount field describes the share token amount to be redeemed.
Steps
Ensure insurance fund associated to the
MarketIddoes existSend
ShareDenomto module accountGet new redemption schedule ID
Calculate
ClaimTimefrom insurance fund's redemption notice period duration and current block timeCalculate key to store pending redemption (redemption schedule)
Create redemption schedule object with details
Store redemption schedule object to store
Insurance fund actions on liquidation events in derivative market
Steps
exchangemodule finds relative insurance fund from the insurance keeper.if
missingFundis positive, it withdraws the amount from the insurance fund throughWithdrawFromInsuranceFund.if
missingFundis negative, it deposits the amount into the insurance fund throughDepositIntoInsuranceFund.
Automatic processing of pending redemptions
Steps
Iterate all matured redemptions by sorted order by ClaimTime and perform the following actions:
If
ClaimTimeis after current block time, break earlyEnsure the insurance fund exist for matured redemption schedule
Calculate redeem amount from share amount -
shareAmt * fund.Balance * fund.TotalShareSend calculate redeem amount from module account to redeemer account
Burn share tokens sent to the module account at the time of redemption schedule
Delete redemption schedule object
Reduce insurance fund's
Balanceby redeem amountStore updated insurance object to store
Hooks
Other modules may register operations to execute when a certain event has occurred within insurance fund. These events
can be registered to execute either right Before or After the exchange event (as per the hook name). The following
hooks can registered with the exchange:
Note: Hooks are not available and exchange module calls insurance keeper function directly.
Steps When liquidation event happen in derivative market
exchangemodule finds relative insurance fund from the insurance keeper.if
missingFundis positive, it withdraws the amount from the insurance fund throughWithdrawFromInsuranceFund.if
missingFundis negative, it deposits the amount into the insurance fund throughDepositIntoInsuranceFund.
Last updated