Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
notJoon committed Feb 4, 2025
1 parent 45c641b commit ce46ff3
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 74 deletions.
5 changes: 2 additions & 3 deletions contract/r/gnoswap/position/_helper_test.gno
Original file line number Diff line number Diff line change
Expand Up @@ -454,10 +454,9 @@ func LPTokenUnStake(t *testing.T, owner std.Address, tokenId uint64, unwrap bool
sr.UnStakeToken(tokenId, unwrap)
}

func getPoolFromLpTokenId(t *testing.T, lpTokenId uint64) *pl.Pool {
func getPoolFromTokenId(t *testing.T, tokenId uint64) *pl.Pool {
t.Helper()

position := MustGetPosition(lpTokenId)
position := MustGetPosition(tokenId)
return pl.GetPoolFromPoolPath(position.poolKey)
}

Expand Down
30 changes: 15 additions & 15 deletions contract/r/gnoswap/position/api.gno
Original file line number Diff line number Diff line change
Expand Up @@ -24,25 +24,25 @@ func ApiGetPositions() string {
return makeJsonResponse(&baseStat, &PositionsResponse{Positions: rpcPositions})
}

func ApiGetPosition(lpTokenId uint64) string {
_, exist := GetPosition(lpTokenId)
func ApiGetPosition(id uint64) string {
_, exist := GetPosition(id)
if !exist {
return ""
}

rpcPosition := rpcMakePosition(lpTokenId)
rpcPosition := rpcMakePosition(id)
baseStat := NewResponseQueryBase(std.GetHeight(), time.Now().Unix())
return makeJsonResponse(&baseStat, &PositionsResponse{Positions: []RpcPosition{rpcPosition}})
}

func ApiGetPositionsByPoolPath(poolPath string) string {
rpcPositions := []RpcPosition{}
for lpTokenId := uint64(1); lpTokenId < nextId; lpTokenId++ {
position := MustGetPosition(lpTokenId)
for id := uint64(1); id < nextId; id++ {
position := MustGetPosition(id)
if position.poolKey != poolPath {
continue
}
rpcPosition := rpcMakePosition(lpTokenId)
rpcPosition := rpcMakePosition(id)
rpcPositions = append(rpcPositions, rpcPosition)
}

Expand All @@ -52,10 +52,10 @@ func ApiGetPositionsByPoolPath(poolPath string) string {

func ApiGetPositionsUnclaimedFee() string {
rpcUnclaimedFee := []RpcUnclaimedFee{}
for lpTokenId := uint64(1); lpTokenId < nextId; lpTokenId++ {
unclaimedFee0, unclaimedFee1 := unclaimedFee(lpTokenId)
for id := uint64(1); id < nextId; id++ {
unclaimedFee0, unclaimedFee1 := unclaimedFee(id)
rpcUnclaimedFee = append(rpcUnclaimedFee, RpcUnclaimedFee{
LpPositionId: lpTokenId,
LpPositionId: id,
Fee0: unclaimedFee0.ToString(),
Fee1: unclaimedFee1.ToString(),
})
Expand Down Expand Up @@ -123,10 +123,10 @@ func ApiGetPositionUnclaimedFeeByLpPositionId(lpPositionId uint64) string {
})
}

func rpcMakePosition(lpTokenId uint64) RpcPosition {
position := MustGetPosition(lpTokenId)
func rpcMakePosition(positionId uint64) RpcPosition {
position := MustGetPosition(positionId)

burned := isBurned(lpTokenId)
burned := isBurned(positionId)

pool := pl.GetPoolFromPoolPath(position.poolKey)
currentX96 := pool.Slot0SqrtPriceX96()
Expand All @@ -143,16 +143,16 @@ func rpcMakePosition(lpTokenId uint64) RpcPosition {
unclaimedFee0 := i256.Zero()
unclaimedFee1 := i256.Zero()
if !burned {
unclaimedFee0, unclaimedFee1 = unclaimedFee(lpTokenId)
unclaimedFee0, unclaimedFee1 = unclaimedFee(positionId)
}

owner, err := gnft.OwnerOf(tokenIdFrom(lpTokenId))
owner, err := gnft.OwnerOf(tokenIdFrom(positionId))
if err != nil {
owner = consts.ZERO_ADDRESS
}

return RpcPosition{
LpPositionId: lpTokenId,
LpPositionId: positionId,
Burned: burned,
Owner: owner.String(),
Operator: position.operator.String(),
Expand Down
44 changes: 22 additions & 22 deletions contract/r/gnoswap/position/position.gno
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ func mustUpdatePosition(id uint64, position Position) {
// GetPosition returns a position for a given position ID.
// Returns false if position doesn't exist
func GetPosition(id uint64) (Position, bool) {
tokenIdStr := strconv.FormatUint(id, 10)
iPosition, exist := positions.Get(tokenIdStr)
idStr := strconv.FormatUint(id, 10)
iPosition, exist := positions.Get(idStr)
if !exist {
return Position{}, false
}
Expand Down Expand Up @@ -589,7 +589,7 @@ func IncreaseLiquidity(

amount0Desired, amount1Desired, amount0Min, amount1Min := parseAmounts(amount0DesiredStr, amount1DesiredStr, amount0MinStr, amount1MinStr)
increaseLiquidityParams := IncreaseLiquidityParams{
tokenId: positionId,
positionId: positionId,
amount0Desired: amount0Desired,
amount1Desired: amount1Desired,
amount0Min: amount0Min,
Expand Down Expand Up @@ -694,12 +694,12 @@ func updatePosition(
}

func increaseLiquidity(params IncreaseLiquidityParams) (uint64, *u256.Uint, *u256.Uint, *u256.Uint, string) {
// verify tokenId exists
assertTokenExists(params.tokenId)
// verify position ID exists
assertTokenExists(params.positionId)
caller := getPrevAddr()
assertOnlyOwnerOfToken(params.tokenId, caller)
assertOnlyOwnerOfToken(params.positionId, caller)

position := MustGetPosition(params.tokenId)
position := MustGetPosition(params.positionId)
liquidity, amount0, amount1 := addLiquidity(
AddLiquidityParams{
poolKey: position.poolKey,
Expand Down Expand Up @@ -737,20 +737,20 @@ func increaseLiquidity(params IncreaseLiquidityParams) (uint64, *u256.Uint, *u25
position.liquidity = new(u256.Uint).Add(new(u256.Uint).Set(position.liquidity), liquidity)
position.burned = false

updated := setPosition(params.tokenId, position)
updated := setPosition(params.positionId, position)
if !updated {
panic(newErrorWithDetail(
errPositionDoesNotExist,
ufmt.Sprintf("can not increase liquidity for non-existent position(%d)", params.tokenId),
ufmt.Sprintf("can not increase liquidity for non-existent position(%d)", params.positionId),
))
}

return params.tokenId, liquidity, amount0, amount1, position.poolKey
return params.positionId, liquidity, amount0, amount1, position.poolKey
}

// DecreaseLiquidity decreases liquidity of the existing position
// It also handles the conversion between GNOT and WUGNOT transparently for the user.
// Returns tokenId, liquidity, fee0, fee1, amount0, amount1, poolPath
// Returns position ID, liquidity, fee0, fee1, amount0, amount1, poolPath
// ref: https://docs.gnoswap.io/contracts/position/position.gno#decreaseliquidity
func DecreaseLiquidity(
positionId uint64,
Expand All @@ -770,7 +770,7 @@ func DecreaseLiquidity(
amount0Min := u256.MustFromDecimal(amount0MinStr)
amount1Min := u256.MustFromDecimal(amount1MinStr)
decreaseLiquidityParams := DecreaseLiquidityParams{
tokenId: positionId,
positionId: positionId,
liquidity: liquidityStr,
amount0Min: amount0Min,
amount1Min: amount1Min,
Expand Down Expand Up @@ -812,19 +812,19 @@ func DecreaseLiquidity(
// unwrapped to GNOT at the end of the operation.
// Returns position ID, liquidity, fee0, fee1, amount0, amount1, poolPath
func decreaseLiquidity(params DecreaseLiquidityParams) (uint64, *u256.Uint, *u256.Uint, *u256.Uint, *u256.Uint, *u256.Uint, string) {
verifyTokenIdAndOwnership(params.tokenId)
verifyTokenIdAndOwnership(params.positionId)

// BEFORE DECREASE LIQUIDITY, COLLECT FEE FIRST
_, fee0Str, fee1Str, _, _, _ := CollectFee(params.tokenId, params.unwrapResult)
_, fee0Str, fee1Str, _, _, _ := CollectFee(params.positionId, params.unwrapResult)
fee0 := u256.MustFromDecimal(fee0Str)
fee1 := u256.MustFromDecimal(fee1Str)

position := MustGetPosition(params.tokenId)
position := MustGetPosition(params.positionId)
positionLiquidity := position.liquidity
if positionLiquidity.IsZero() {
panic(newErrorWithDetail(
errZeroLiquidity,
ufmt.Sprintf("position(position ID:%d) has 0 liquidity", params.tokenId),
ufmt.Sprintf("position(position ID:%d) has 0 liquidity", params.positionId),
))
}

Expand Down Expand Up @@ -870,7 +870,7 @@ func decreaseLiquidity(params DecreaseLiquidityParams) (uint64, *u256.Uint, *u25
position.feeGrowthInside0LastX128 = feeGrowthInside0LastX128
position.feeGrowthInside1LastX128 = feeGrowthInside1LastX128
position.liquidity = new(u256.Uint).Sub(positionLiquidity, liquidityToRemove)
mustUpdatePosition(params.tokenId, position)
mustUpdatePosition(params.positionId, position)

collect0, collect1 := pl.Collect(
pToken0,
Expand Down Expand Up @@ -901,20 +901,20 @@ func decreaseLiquidity(params DecreaseLiquidityParams) (uint64, *u256.Uint, *u25
"tokensOwed1 underflow",
))
}
mustUpdatePosition(params.tokenId, position)
mustUpdatePosition(params.positionId, position)

if position.isClear() {
burnPosition(params.tokenId) // just update flag (we don't want to burn actual position)
burnPosition(params.positionId) // just update flag (we don't want to burn actual position)
}

// NO UNWRAP
if !params.unwrapResult {
return params.tokenId, liquidityToRemove, fee0, fee1, collectAmount0, collectAmount1, position.poolKey
return params.positionId, liquidityToRemove, fee0, fee1, collectAmount0, collectAmount1, position.poolKey
}

handleUnwrap(pToken0, pToken1, params.unwrapResult, beforeWugnotBalance, caller)

return params.tokenId, liquidityToRemove, fee0, fee1, collectAmount0, collectAmount1, position.poolKey
return params.positionId, liquidityToRemove, fee0, fee1, collectAmount0, collectAmount1, position.poolKey
}

// CollectFee collects swap fee from the position
Expand Down Expand Up @@ -1037,7 +1037,7 @@ func getCurrentFeeGrowth(postion Position) (FeeGrowthInside, error) {

// Repositiomn adjusts the position of an existing liquidity token
// by changing its price range and liquidity amount.
// Returns tokenId, liquidity, tickLower, tickUpper, amount0, amount1
// Returns Position ID, liquidity, tickLower, tickUpper, amount0, amount1
// ref: https://docs.gnoswap.io/contracts/position/position.gno#reposition
func Reposition(
positionId uint64,
Expand Down
64 changes: 32 additions & 32 deletions contract/r/gnoswap/position/position_test.gno
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ func IsRegistered(t *testing.T, tokenPath string) error {
return errInvalidTokenPath
}

func newDummyPosition(tokenId uint64) Position {
func newDummyPosition(id uint64) Position {
return Position{
nonce: u256.NewUint(tokenId),
nonce: u256.NewUint(id),
operator: "user1",
poolKey: "poolKey1",
tickLower: -500,
Expand All @@ -56,12 +56,12 @@ func newDummyPosition(tokenId uint64) Position {
}

func TestMustGetPosition(t *testing.T) {
tokenId := uint64(1)
position := newDummyPosition(tokenId)
setPosition(tokenId, position)
id := uint64(1)
position := newDummyPosition(id)
setPosition(id, position)

t.Run("Success - Get existing position", func(t *testing.T) {
result := MustGetPosition(tokenId)
result := MustGetPosition(id)
uassert.Equal(t, position.nonce.ToString(), result.nonce.ToString())
uassert.Equal(t, position.operator, result.operator)
uassert.Equal(t, position.poolKey, result.poolKey)
Expand All @@ -85,10 +85,10 @@ func TestMustGetPosition(t *testing.T) {
}

func TestGetPosition(t *testing.T) {
tokenId := uint64(1)
position := newDummyPosition(tokenId)
id := uint64(1)
position := newDummyPosition(id)
t.Run("Success - Get existing position", func(t *testing.T) {
result := MustGetPosition(tokenId)
result := MustGetPosition(id)
uassert.Equal(t, position.nonce.ToString(), result.nonce.ToString())
uassert.Equal(t, position.operator, result.operator)
uassert.Equal(t, position.poolKey, result.poolKey)
Expand All @@ -100,19 +100,19 @@ func TestGetPosition(t *testing.T) {
uassert.Equal(t, position.tokensOwed0.ToString(), result.tokensOwed0.ToString())
uassert.Equal(t, position.tokensOwed1.ToString(), result.tokensOwed1.ToString())
uassert.Equal(t, position.burned, result.burned)
removePosition(tokenId)
removePosition(id)
})
}

func TestSetPosition(t *testing.T) {
tokenId := uint64(300)
position := newDummyPosition(tokenId)
id := uint64(300)
position := newDummyPosition(id)

t.Run("Success - Create new position", func(t *testing.T) {
isNew := setPosition(tokenId, position)
isNew := setPosition(id, position)
uassert.False(t, isNew)

storedPosition, _ := GetPosition(tokenId)
storedPosition, _ := GetPosition(id)
uassert.Equal(t, position.nonce.ToString(), storedPosition.nonce.ToString())
uassert.Equal(t, position.operator, storedPosition.operator)
uassert.Equal(t, position.poolKey, storedPosition.poolKey)
Expand All @@ -128,44 +128,44 @@ func TestSetPosition(t *testing.T) {

t.Run("Success - Update existing position", func(t *testing.T) {
position.tickUpper = 1000
isNew := setPosition(tokenId, position)
isNew := setPosition(id, position)
uassert.True(t, isNew)

updatedPosition, _ := GetPosition(tokenId)
updatedPosition, _ := GetPosition(id)
uassert.Equal(t, int32(1000), updatedPosition.tickUpper)
})
}

func TestRemovePosition(t *testing.T) {
tokenId := uint64(2)
position := newDummyPosition(tokenId)
id := uint64(2)
position := newDummyPosition(id)

t.Run("Success - Remove existing position", func(t *testing.T) {
setPosition(tokenId, position)
removePosition(tokenId)
_, found := GetPosition(tokenId)
setPosition(id, position)
removePosition(id)
_, found := GetPosition(id)
uassert.False(t, found)
})

t.Run("Success - Remove non-existent position", func(t *testing.T) {
removePosition(tokenId)
_, found := GetPosition(tokenId)
removePosition(id)
_, found := GetPosition(id)
uassert.False(t, found)
})
}

func TestExistPosition(t *testing.T) {
tokenId := uint64(2)
position := newDummyPosition(tokenId)
id := uint64(2)
position := newDummyPosition(id)

t.Run("False - Position does not exist", func(t *testing.T) {
uassert.False(t, existPosition(tokenId))
uassert.False(t, existPosition(id))
})

t.Run("True - Position exists", func(t *testing.T) {
setPosition(tokenId, position)
uassert.True(t, existPosition(tokenId))
removePosition(tokenId)
setPosition(id, position)
uassert.True(t, existPosition(id))
removePosition(id)
})
}

Expand Down Expand Up @@ -876,7 +876,7 @@ func TestIncreaseLiquidityInternal(t *testing.T) {
{
name: "Fail - Position Does Not Exist",
params: IncreaseLiquidityParams{
tokenId: 999,
positionId: 999,
amount0Desired: u256.NewUint(1000000),
amount1Desired: u256.NewUint(2000000),
amount0Min: u256.NewUint(900000),
Expand All @@ -889,7 +889,7 @@ func TestIncreaseLiquidityInternal(t *testing.T) {
{
name: "Fail - Zero Liquidity",
params: IncreaseLiquidityParams{
tokenId: 7,
positionId: 7,
amount0Desired: u256.Zero(),
amount1Desired: u256.Zero(),
amount0Min: u256.NewUint(900000),
Expand All @@ -911,7 +911,7 @@ func TestIncreaseLiquidityInternal(t *testing.T) {
})
} else {
tokenId, liquidity, amount0, amount1, _ := increaseLiquidity(tc.params)
uassert.Equal(t, tc.params.tokenId, tokenId)
uassert.Equal(t, tc.params.positionId, tokenId)
uassert.Equal(t, tc.expectedLiquidity, liquidity.ToString())
uassert.Equal(t, tc.expectedAmount0, amount0.ToString())
uassert.Equal(t, tc.expectedAmount1, amount1.ToString())
Expand Down
Loading

0 comments on commit ce46ff3

Please sign in to comment.