Commit 58c5aab1 authored by Sunny Aggarwal's avatar Sunny Aggarwal
Browse files

in progress

parent 36f71e7a
Showing with 43 additions and 11 deletions
+43 -11
......@@ -35,7 +35,12 @@ func (k Keeper) createLBP(msg *proto.MsgCreateLBP, now time.Time, store storetyp
return 0, err
}
id, idBz := k.nextPoolID(store)
lbpAddr := osmolbp.NewLbpAddress(id)
p := proto.LBP{
Id: id,
Address: lbpAddr.String(),
TokenOut: msg.TokenOut,
TokenIn: msg.TokenIn,
StartTime: msg.StartTime,
......@@ -69,33 +74,33 @@ func (k Keeper) deposit(ctx sdk.Context, msg *proto.MsgDeposit, store storetypes
if err != nil {
return err
}
p, poolIdBz, err := k.getPool(store, msg.PoolId)
lbp, lbpIdBz, err := k.getLBP(store, msg.PoolId)
if err != nil {
return err
}
if msg.Amount.Denom != p.TokenIn {
if msg.Amount.Denom != lbp.TokenIn {
return errors.Wrap(errors.ErrInvalidCoins, "deposit denom must be the same as token in denom")
}
err = k.bank.SendCoinsFromAccountToModule(ctx, sender, osmolbp.ModuleName, sdk.NewCoins(msg.Amount))
err = k.bank.SendCoins(ctx, sender, lbp.GetAddress(), sdk.NewCoins(msg.Amount))
if err != nil {
return errors.Wrap(err, "user doesn't have enough tokens to stake")
}
v, found, err := k.getUserVault(store, poolIdBz, sender)
v, found, err := k.getUserVault(store, lbpIdBz, sender)
if err != nil {
return err
}
if !found {
v.Accumulator = p.AccumulatorOut
v.Accumulator = lbp.AccumulatorOut
v.Staked = sdk.ZeroInt()
}
stakeInPool(&p, &v, msg.Amount.Amount, ctx.BlockTime())
stakeInPool(&lbp, &v, msg.Amount.Amount, ctx.BlockTime())
k.savePool(store, poolIdBz, &p)
k.saveUserVault(store, poolIdBz, sender, &v)
k.savePool(store, lbpIdBz, &lbp)
k.saveUserVault(store, lbpIdBz, sender, &v)
return nil
}
......@@ -118,7 +123,7 @@ func (k Keeper) withdraw(ctx sdk.Context, msg *proto.MsgWithdraw, store storetyp
if err != nil {
return err
}
p, poolIdBz, err := k.getPool(store, msg.PoolId)
p, poolIdBz, err := k.getLBP(store, msg.PoolId)
if err != nil {
return err
}
......
......@@ -26,7 +26,7 @@ func (k *Keeper) savePool(modulestore storetypes.KVStore, id []byte, p *proto.LB
}
// returns pool, pool bytes id, error
func (k *Keeper) getPool(modulestore storetypes.KVStore, id uint64) (proto.LBP, []byte, error) {
func (k *Keeper) getLBP(modulestore storetypes.KVStore, id uint64) (proto.LBP, []byte, error) {
store := k.lbpStore(modulestore)
idBz := make([]byte, 8)
binary.BigEndian.PutUint64(idBz, id)
......@@ -39,7 +39,7 @@ func (k *Keeper) getPool(modulestore storetypes.KVStore, id uint64) (proto.LBP,
return p, idBz, err
}
// returns pool, found (bool), error
// returns user position, found (bool), error
func (k *Keeper) getUserVault(modulestore storetypes.KVStore, poolId []byte, addr sdk.AccAddress) (proto.UserPosition, bool, error) {
store := k.userVaultStore(modulestore, poolId)
bz := store.Get(addr)
......
package osmolbp
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/osmosis-labs/osmosis/v043_temp/address"
)
const (
// ModuleName is the module name constant used in many places
ModuleName = "osmolbp"
......@@ -10,3 +15,8 @@ const (
// QuerierRoute is the querier route for authz
QuerierRoute = ModuleName
)
func NewLbpAddress(lbpId uint64) sdk.AccAddress {
key := append([]byte("lbp"), sdk.Uint64ToBigEndian(lbpId)...)
return address.Module(ModuleName, key)
}
package proto
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
)
// GetAddress returns the address of an lbp.
// If the lbp address is not bech32 valid, it panics.
func (lbp LBP) GetAddress() sdk.AccAddress {
addr, err := sdk.AccAddressFromBech32(lbp.Address)
if err != nil {
panic(fmt.Sprintf("could not bech32 decode address of lbp with id: %d", lbp.Id))
}
return addr
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment