forked from umee-network/umee
/
supply.go
54 lines (44 loc) · 1.88 KB
/
supply.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/mokitanetwork/katana/x/leverage/types"
)
// GetSupplied returns an sdk.Coin representing how much of a given denom a
// user has supplied, including interest accrued.
func (k Keeper) GetSupplied(ctx sdk.Context, supplierAddr sdk.AccAddress, denom string) (sdk.Coin, error) {
if types.HasUTokenPrefix(denom) {
return sdk.Coin{}, types.ErrUToken.Wrap(denom)
}
// sum wallet-held and collateral-enabled uTokens in the associated uToken denom
uDenom := types.ToUTokenDenom(denom)
balance := k.bankKeeper.GetBalance(ctx, supplierAddr, uDenom)
collateral := k.GetCollateral(ctx, supplierAddr, uDenom)
// convert uTokens to tokens
return k.ExchangeUToken(ctx, balance.Add(collateral))
}
// GetAllSupplied returns the total tokens supplied by a user, including
// any interest accrued.
func (k Keeper) GetAllSupplied(ctx sdk.Context, supplierAddr sdk.AccAddress) (sdk.Coins, error) {
// get all uTokens set as collateral
collateral := k.GetBorrowerCollateral(ctx, supplierAddr)
// get all uTokens not set as collateral by filtering non-uTokens from supplier balance
uTokens := sdk.Coins{}
balance := k.bankKeeper.GetAllBalances(ctx, supplierAddr)
for _, coin := range balance {
if types.HasUTokenPrefix(coin.Denom) {
uTokens = uTokens.Add(coin)
}
}
// convert the sum of found uTokens to base tokens
return k.ExchangeUTokens(ctx, collateral.Add(uTokens...))
}
// GetTotalSupply returns the total supplied by all suppliers in a given denom,
// including any interest accrued.
func (k Keeper) GetTotalSupply(ctx sdk.Context, denom string) (sdk.Coin, error) {
if types.HasUTokenPrefix(denom) {
return sdk.Coin{}, types.ErrUToken.Wrap(denom)
}
// convert associated uToken's total supply to base tokens
uTokenDenom := types.ToUTokenDenom(denom)
return k.ExchangeUToken(ctx, k.GetUTokenSupply(ctx, uTokenDenom))
}