-
Notifications
You must be signed in to change notification settings - Fork 44
/
pool_exit_pool.go
32 lines (25 loc) · 1.03 KB
/
pool_exit_pool.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
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
)
func (p *Pool) ExitPool(ctx sdk.Context, oracleKeeper OracleKeeper, accountedPoolKeeepr AccountedPoolKeeper, exitingShares sdk.Int, tokenOutDenom string) (exitingCoins sdk.Coins, err error) {
exitingCoins, err = p.CalcExitPoolCoinsFromShares(ctx, oracleKeeper, accountedPoolKeeepr, exitingShares, tokenOutDenom)
if err != nil {
return sdk.Coins{}, err
}
if err := p.processExitPool(ctx, exitingCoins, exitingShares); err != nil {
return sdk.Coins{}, err
}
return exitingCoins, nil
}
// exitPool exits the pool given exitingCoins and exitingShares.
// updates the pool's liquidity and totalShares.
func (p *Pool) processExitPool(ctx sdk.Context, exitingCoins sdk.Coins, exitingShares sdk.Int) error {
balances := p.GetTotalPoolLiquidity().Sub(exitingCoins...)
if err := p.UpdatePoolAssetBalances(balances); err != nil {
return err
}
totalShares := p.GetTotalShares().Amount
p.TotalShares = sdk.NewCoin(p.TotalShares.Denom, totalShares.Sub(exitingShares))
return nil
}