diff --git a/pool/_GET_pool.gno b/pool/_GET_pool.gno index 9cad86ba..a35183dc 100644 --- a/pool/_GET_pool.gno +++ b/pool/_GET_pool.gno @@ -74,14 +74,20 @@ func (pool *Pool) PoolGetTick(x int32) TickInfo { func (pool *Pool) PoolGetTickFeeGrowthOutside0X128(x int32) bigint { tick, exist := pool.ticks[x] - require(exist, ufmt.Sprintf("[POOL] _GET_pool.gno__PoolGetTick() || tick(%d) does not exist", x)) + require(exist, ufmt.Sprintf("[POOL] _GET_pool.gno__PoolGetTickFeeGrowthOutside0X128() || tick(%d) does not exist", x)) + // if !exist { + // return 0 + // } return tick.feeGrowthOutside0X128 } func (pool *Pool) PoolGetTickFeeGrowthOutside1X128(x int32) bigint { tick, exist := pool.ticks[x] - require(exist, ufmt.Sprintf("[POOL] _GET_pool.gno__PoolGetTick() || tick(%d) does not exist", x)) + require(exist, ufmt.Sprintf("[POOL] _GET_pool.gno__PoolGetTickFeeGrowthOutside1X128() || tick(%d) does not exist", x)) + // if !exist { + // return 0 + // } return tick.feeGrowthOutside1X128 } @@ -89,6 +95,9 @@ func (pool *Pool) PoolGetTickFeeGrowthOutside1X128(x int32) bigint { func (pool *Pool) PoolGetTickBitmap(x int16) bigint { tickBitmap, exist := pool.tickBitmaps[x] require(exist, ufmt.Sprintf("[POOL] _GET_pool.gno__PoolGetTickBitmap() || tickBitmap(%d) does not exist", x)) + // if !exist { + // return 0 + // } return tickBitmap } diff --git a/pool/tick.gno b/pool/tick.gno index b5b28d77..0092504d 100644 --- a/pool/tick.gno +++ b/pool/tick.gno @@ -94,7 +94,7 @@ func (pool *Pool) tickUpdate( } func (pool *Pool) tickClear(tick int32) { - delete(pool.ticks, tick) + pool.ticks = deleteFromPoolTicks(pool.ticks, tick) } func (pool *Pool) tickCross( @@ -114,3 +114,18 @@ func (pool *Pool) tickCross( liquidityNet := info.liquidityNet return liquidityNet } + +func deleteFromPoolTicks(m map[int32]TickInfo, key int32) map[int32]TickInfo { + if _, ok := m[key]; ok { + newMap := make(map[int32]TickInfo) + for k, v := range m { + if k != key { + newMap[k] = v + } + } + + return newMap + } + + return m +} diff --git a/position/_TEST_position_api_test.gnoa b/position/_TEST_position_api_test.gnoa index 5ce1bf26..c5370c17 100644 --- a/position/_TEST_position_api_test.gnoa +++ b/position/_TEST_position_api_test.gnoa @@ -71,7 +71,7 @@ func TestApiGetPositions(t *testing.T) { func TestApiGetPosition(t *testing.T) { // burn 0 to collect swap fee std.TestSetOrigCaller(test1) - DecreaseLiquidity(1, 0, 0, 0, 99999999999) + DecreaseLiquidity(1, 0, 99999999999) gps := ApiGetPosition(uint64(1)) jsonStr := gjson.Parse(gps) diff --git a/position/_TEST_position_native_test.gnoa b/position/_TEST_position_native_test.gnoa index 65ec9cc7..996e6771 100644 --- a/position/_TEST_position_native_test.gnoa +++ b/position/_TEST_position_native_test.gnoa @@ -81,8 +81,6 @@ func TestDecreaseLiquidity(t *testing.T) { tAmount0, tAmount1 := DecreaseLiquidity( bigint(1), tTargetLiquidity, - bigint(1), - bigint(1), bigint(1234567890), ) diff --git a/position/_TEST_position_test.gnoa b/position/_TEST_position_test.gno similarity index 99% rename from position/_TEST_position_test.gnoa rename to position/_TEST_position_test.gno index b9418b20..cb6128cd 100644 --- a/position/_TEST_position_test.gnoa +++ b/position/_TEST_position_test.gno @@ -180,8 +180,6 @@ func TestDecreaseLiquidity(t *testing.T) { tAmount0, tAmount1 := DecreaseLiquidity( bigint(1), tTargetLiquidity, - bigint(1), - bigint(1), bigint(1234567890), ) @@ -290,8 +288,6 @@ func TestNFTBurn(t *testing.T) { DecreaseLiquidity( tTokenId, tPositionLiquidity, // remove all liquidity - bigint(1), - bigint(1), bigint(1234567890), ) // didn't collect yet => burn will panic diff --git a/position/position.gno b/position/position.gno index 13134749..171ccddf 100644 --- a/position/position.gno +++ b/position/position.gno @@ -297,10 +297,25 @@ func burn(tokenId uint64) { require(position.isClear(), ufmt.Sprintf("[POSITION] position.gno__burn() || position(tokenId:%d) isn't clear(has something)", tokenId)) - delete(positions, tokenId) + positions = deleteFromPositions(positions, tokenId) gnft.Burn(tid(tokenId)) } func isAuthorizedForToken(tokenId uint64) { require(isApprovedOrOwner(PrevRealmAddr(), tokenId), ufmt.Sprintf("[POSITION] position.gno__isAuthorizedForToken() || caller(%s) is not approved or owner of tokenId(%d)", PrevRealmAddr(), tokenId)) } + +func deleteFromPositions(m map[uint64]Position, key uint64) map[uint64]Position { + if _, ok := m[key]; ok { + newMap := make(map[uint64]Position) + for k, v := range m { + if k != key { + newMap[k] = v + } + } + + return newMap + } + + return m +} diff --git a/router/_TEST_router_swap_route_1route_1hop_out_range_test.gno b/router/_TEST_router_swap_route_1route_1hop_out_range_test.gnoa similarity index 100% rename from router/_TEST_router_swap_route_1route_1hop_out_range_test.gno rename to router/_TEST_router_swap_route_1route_1hop_out_range_test.gnoa diff --git a/router/_TEST_router_swap_route_2route_2hop_test.gnoa b/router/_TEST_router_swap_route_2route_2hop_test.gno similarity index 100% rename from router/_TEST_router_swap_route_2route_2hop_test.gnoa rename to router/_TEST_router_swap_route_2route_2hop_test.gno diff --git a/staker/staker.gno b/staker/staker.gno index 6ca2feba..ff752355 100644 --- a/staker/staker.gno +++ b/staker/staker.gno @@ -23,20 +23,20 @@ var ( poolTiers map[string]uint8 = make(map[string]uint8) // poolPath -> tier ) -func init() { - // init pool tiers - // tier 1 - poolTiers["gno.land/r/demo/bar:gnot:100"] = 1 // DEV - - // tier 2 - poolTiers["GNS/USDT_500"] = 2 - poolTiers["ATOM/GNS_500"] = 2 - - // tier 3 - poolTiers["ATOM/GNOT_500"] = 3 - poolTiers["ATOM/USDT_500"] = 3 - poolTiers["ATOM/WETH_500"] = 3 -} +// func init() { +// // init pool tiers +// // tier 1 +// poolTiers["GNS/GNOT"] = 1 + +// // tier 2 +// poolTiers["GNS/USDT_500"] = 2 +// poolTiers["ATOM/GNS_500"] = 2 + +// // tier 3 +// poolTiers["ATOM/GNOT_500"] = 3 +// poolTiers["ATOM/USDT_500"] = 3 +// poolTiers["ATOM/WETH_500"] = 3 +// } func CreateExternalIncentive( targetPoolPath string, @@ -166,9 +166,9 @@ func UnstakeToken( gns.TransferFrom(a2u(INTERNAL_REWARD_ACCOUNT), a2u(deposit.owner), uint64(internalGNS)) // unstaked status - delete(deposits, tokenId) + deposits = deleteFromDeposits(deposits, tokenId) - // transfer NFT ownership to unstaker + // transfer NFT ownership to origin owner gnft.TransferFrom(a2u(GetOrigPkgAddr()), a2u(deposit.owner), tid(tokenId)) } @@ -187,7 +187,7 @@ func EndExternalIncentive(refundee, targetPoolPath, rewardToken string) { transferByRegisterCall(incentive.rewardToken, incentive.refundee, uint64(refund)) - delete(incentives, incentiveId) + incentives = deleteFromIncentives(incentives, incentiveId) for i, v := range poolIncentives[targetPoolPath] { if v == incentiveId { poolIncentives[targetPoolPath] = append(poolIncentives[targetPoolPath][:i], poolIncentives[targetPoolPath][i+1:]...) @@ -204,3 +204,33 @@ func transferDeposit(tokenId uint64, to std.Address) { // transfer NFT ownership gnft.TransferFrom(a2u(owner), a2u(to), tid(tokenId)) } + +func deleteFromDeposits(m map[uint64]Deposit, key uint64) map[uint64]Deposit { + if _, ok := m[key]; ok { + newMap := make(map[uint64]Deposit) + for k, v := range m { + if k != key { + newMap[k] = v + } + } + + return newMap + } + + return m +} + +func deleteFromIncentives(m map[string]Incentive, key string) map[string]Incentive { + if _, ok := m[key]; ok { + newMap := make(map[string]Incentive) + for k, v := range m { + if k != key { + newMap[k] = v + } + } + + return newMap + } + + return m +}