Skip to content

Commit

Permalink
emit megavault equity in withdrawal event and log vault skipping
Browse files Browse the repository at this point in the history
  • Loading branch information
tqin7 committed Sep 19, 2024
1 parent d4d9745 commit 79d9ea7
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 8 deletions.
5 changes: 4 additions & 1 deletion protocol/x/vault/keeper/msg_server_allocate_to_vault.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ func (k msgServer) AllocateToVault(
return nil, types.ErrClobPairNotFound
}

// If vault params doesn't exist, initialize params with `STAND_BY` status.
// If vault doesn't exist:
// 1. initialize params with `STAND_BY` status.
// 2. add vault to address store.
_, exists = k.Keeper.GetVaultParams(ctx, msg.VaultId)
if !exists {
err := k.Keeper.SetVaultParams(
Expand All @@ -47,6 +49,7 @@ func (k msgServer) AllocateToVault(
if err != nil {
return nil, err
}
k.Keeper.AddVaultToAddressStore(ctx, msg.VaultId)
}

// Transfer from main vault to the specified vault.
Expand Down
33 changes: 26 additions & 7 deletions protocol/x/vault/keeper/withdraw.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ func (k Keeper) WithdrawFromMegavault(

// 2. Redeem from main vault.
totalShares := k.GetTotalShares(ctx).NumShares.BigInt()
redeemedQuoteQuantums, err = k.GetSubaccountEquity(ctx, types.MegavaultMainSubaccount)
megavaultEquity, err := k.GetSubaccountEquity(ctx, types.MegavaultMainSubaccount)
redeemedQuoteQuantums = new(big.Int).Set(megavaultEquity)
if err != nil {
log.ErrorLogWithError(ctx, "Megavault withdrawal: failed to get megavault main vault equity", err)
return nil, err
Expand All @@ -158,20 +159,36 @@ func (k Keeper) WithdrawFromMegavault(
for ; vaultParamsIterator.Valid(); vaultParamsIterator.Next() {
vaultId, err := types.GetVaultIdFromStateKey(vaultParamsIterator.Key())
if err != nil {
log.ErrorLogWithError(ctx, "Megavault withdrawal: failed to get vault ID from state key", err)
log.ErrorLogWithError(
ctx,
"Megavault withdrawal: failed to get vault ID from state key. Skipping this vault",
err,
)
continue
}
var vaultParams types.VaultParams
k.cdc.MustUnmarshal(vaultParamsIterator.Value(), &vaultParams)

_, perpetual, marketParam, marketPrice, err := k.GetVaultClobPerpAndMarket(ctx, *vaultId)
if err != nil {
log.ErrorLogWithError(ctx, "Megavault withdrawal: failed to get perpetual and market", err, "Vault ID", vaultId)
log.ErrorLogWithError(
ctx,
"Megavault withdrawal: failed to get perpetual and market. Skipping this vault",
err,
"Vault ID",
vaultId,
)
continue
}
leverage, equity, err := k.GetVaultLeverageAndEquity(ctx, *vaultId, &perpetual, &marketPrice)
if err != nil {
log.ErrorLogWithError(ctx, "Megavault withdrawal: failed to get vault leverage and equity", err, "Vault ID", vaultId)
log.ErrorLogWithError(
ctx,
"Megavault withdrawal: failed to get vault leverage and equity. Skipping this vault",
err,
"Vault ID",
vaultId,
)
continue
}

Expand All @@ -187,7 +204,7 @@ func (k Keeper) WithdrawFromMegavault(
if err != nil {
log.ErrorLogWithError(
ctx,
"Megavault withdrawal: failed to get vault withdrawal slippage",
"Megavault withdrawal: failed to get vault withdrawal slippage. Skipping this vault",
err,
"Vault ID",
vaultId,
Expand All @@ -211,7 +228,7 @@ func (k Keeper) WithdrawFromMegavault(
if err != nil {
log.ErrorLogWithError(
ctx,
"Megavault withdrawal: failed to transfer from sub vault to main vault",
"Megavault withdrawal: failed to transfer from sub vault to main vault. Skipping this vault",
err,
"Vault ID",
vaultId,
Expand All @@ -221,8 +238,9 @@ func (k Keeper) WithdrawFromMegavault(
continue
}

// Increment total redeemed quote quantums.
// Increment total redeemed quote quantums and record this vault's equity as part of megavault equity.
redeemedQuoteQuantums.Add(redeemedQuoteQuantums, quantumsToTransfer)
megavaultEquity.Add(megavaultEquity, equity)
}

// 4. Return error if less than min quote quantums are redeemed.
Expand Down Expand Up @@ -279,6 +297,7 @@ func (k Keeper) WithdrawFromMegavault(
toSubaccount.Owner,
sharesToWithdraw.Uint64(),
totalShares.Uint64(),
megavaultEquity.Uint64(),
redeemedQuoteQuantums.Uint64(),
),
)
Expand Down
3 changes: 3 additions & 0 deletions protocol/x/vault/types/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const (
AttributeKeyWithdrawer = "withdrawer"
AttributeKeySharesToWithdraw = "shares_to_withdraw"
AttributeKeyTotalShares = "total_shares"
AttributeKeyMegavaultEquity = "megavault_equity"
AttributeKeyRedeemedQuoteQuantums = "redeemed_quote_quantums"
)

Expand All @@ -39,13 +40,15 @@ func NewWithdrawFromMegavaultEvent(
withdrawerAddress string,
sharesToWithdraw uint64,
totalShares uint64,
megavaultEquity uint64,
redeemedQuoteQuantums uint64,
) sdk.Event {
return sdk.NewEvent(
EventTypeWithdrawFromMegavault,
sdk.NewAttribute(AttributeKeyWithdrawer, withdrawerAddress),
sdk.NewAttribute(AttributeKeySharesToWithdraw, fmt.Sprintf("%d", sharesToWithdraw)),
sdk.NewAttribute(AttributeKeyTotalShares, fmt.Sprintf("%d", totalShares)),
sdk.NewAttribute(AttributeKeyMegavaultEquity, fmt.Sprintf("%d", megavaultEquity)),
sdk.NewAttribute(AttributeKeyRedeemedQuoteQuantums, fmt.Sprintf("%d", redeemedQuoteQuantums)),
)
}

0 comments on commit 79d9ea7

Please sign in to comment.