Skip to content

Commit

Permalink
Merge pull request #721 from UnUniFi/irs_err_handle
Browse files Browse the repository at this point in the history
feat: add error handling
  • Loading branch information
Senna46 authored Jan 4, 2024
2 parents 9434180 + 79c2862 commit f6da664
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 13 deletions.
4 changes: 4 additions & 0 deletions x/irs/keeper/grpc_query_estimate_mint_pt_yt_pair.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ func (k Keeper) EstimateMintPtYtPair(c context.Context, req *types.QueryEstimate
if !found {
return nil, types.ErrTrancheNotFound
}
depositInfo := k.GetStrategyDepositInfo(ctx, tranche.StrategyContract)
if req.Denom != depositInfo.Denom {
return nil, types.ErrInvalidDepositDenom
}
depositAmount, ok := sdk.NewIntFromString(req.Amount)
if !ok {
return nil, types.ErrInvalidAmount
Expand Down
14 changes: 8 additions & 6 deletions x/irs/keeper/stripping.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,6 @@ func (k Keeper) MintPtYtPair(ctx sdk.Context, sender sdk.AccAddress, pool types.
contractAddr := sdk.MustAccAddressFromBech32(pool.StrategyContract)
depositInfo := k.GetStrategyDepositInfo(ctx, pool.StrategyContract)

ptAmount, err := k.CalculateMintPtAmount(ctx, pool, underlyingAmount)
if err != nil {
return sdk.ZeroInt(), err
}
ptCoins := sdk.Coins{sdk.NewCoin(ptDenom, ptAmount)}

// Stake to strategy
if underlyingAmount.Denom == depositInfo.Denom {
wasmMsg := `{"stake":{}}`
Expand All @@ -41,13 +35,21 @@ func (k Keeper) MintPtYtPair(ctx sdk.Context, sender sdk.AccAddress, pool types.
return sdk.ZeroInt(), err
}
} else {
return sdk.ZeroInt(), types.ErrInvalidDepositDenom
// TODO: bug here, PT is calculated and minted regardless of denom
msg, err := k.ExecuteVaultTransfer(ctx, moduleAddr, pool.StrategyContract, underlyingAmount)
k.Logger(ctx).Info("transfer_memo " + msg.Memo)
if err != nil {
return sdk.ZeroInt(), err
}
}

ptAmount, err := k.CalculateMintPtAmount(ctx, pool, underlyingAmount)
if err != nil {
return sdk.ZeroInt(), err
}
ptCoins := sdk.Coins{sdk.NewCoin(ptDenom, ptAmount)}

// mint PT
// PT mint amount = usedUnderlying * (1-(strategyAmount)/interestSupply)
err = k.bankKeeper.MintCoins(ctx, types.ModuleName, ptCoins)
Expand Down
19 changes: 12 additions & 7 deletions x/irs/keeper/swap.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,27 @@ import (

// SwapPoolTokens swaps tokens in a pool. UT => PT or PT => UT
func (k Keeper) SwapPoolTokens(ctx sdk.Context, sender sdk.AccAddress, pool types.TranchePool, tokenIn sdk.Coin) (sdk.Coin, error) {
tokenOutDenom := pool.PoolAssets[0].Denom
if tokenOutDenom == tokenIn.Denom {
var tokenOutDenom string
if tokenIn.Denom == pool.PoolAssets[0].Denom {
tokenOutDenom = pool.PoolAssets[1].Denom
} else if tokenIn.Denom == pool.PoolAssets[1].Denom {
tokenOutDenom = pool.PoolAssets[0].Denom
} else {
return sdk.Coin{}, types.ErrInvalidDepositDenom
}
tokenOutAmount, err := k.SwapExactAmountIn(ctx, sender, pool, tokenIn, tokenOutDenom, sdk.ZeroInt(), pool.SwapFee)
return sdk.NewCoin(tokenOutDenom, tokenOutAmount), err
}

// SimulateSwapPoolTokens simulates a swap in a pool & return TokenOut Amount value. UT => PT or PT => UT
func (k Keeper) SimulateSwapPoolTokens(ctx sdk.Context, pool types.TranchePool, tokenIn sdk.Coin) (sdk.Coin, error) {
tokenOutDenom := pool.PoolAssets[0].Denom
if tokenOutDenom == tokenIn.Denom {
var tokenOutDenom string
if tokenIn.Denom == pool.PoolAssets[0].Denom {
tokenOutDenom = pool.PoolAssets[1].Denom
}
if tokenIn.Denom == tokenOutDenom {
return sdk.Coin{}, errors.New("cannot trade the same denomination in and out")
} else if tokenIn.Denom == pool.PoolAssets[1].Denom {
tokenOutDenom = pool.PoolAssets[0].Denom
} else {
return sdk.Coin{}, types.ErrInvalidDepositDenom
}
tokenOutAmount, err := k.CalculateSwapExactAmountIn(ctx, pool, tokenIn, tokenOutDenom, sdk.ZeroInt(), pool.SwapFee)
if err != nil {
Expand Down

0 comments on commit f6da664

Please sign in to comment.