From 7f6730b8014953bf4107c67a9e64515d344f3755 Mon Sep 17 00:00:00 2001 From: tolelom Date: Thu, 5 Sep 2024 18:10:36 +0900 Subject: [PATCH 1/2] 0905 save --- best_swap_route.go | 4 - core/alpha_router.go | 143 +- core/alpha_router_config.go | 15 +- core/alpha_router_params.go | 15 + core/best_swap_route.go | 44 + core/chain_id.go | 12 + core/constants.go | 9 + core/currency/token.go | 17 +- core/pool.go | 20 + core/portion_provider.go | 4 +- core/providers/v3_pool_accessor.go | 12 + core/providers/v3_pool_provider.go | 34 + core/providers/v3_subgraph_pool.go | 21 + core/providers/v3_subgraph_provider.go | 50 + core/quote.go | 8 + core/quoter/base_quoter.go | 8 + core/v3_candidate_pools.go | 34 + core/v3_route_with_valid_quote.go | 4 + database/database.go | 8 + database/mocks/pools.json | 6343 ++++++++++++++++++++++++ database/mocks/tokens.json | 242 + database/pool.go | 49 + database/token.go | 13 + 23 files changed, 7061 insertions(+), 48 deletions(-) delete mode 100644 best_swap_route.go create mode 100644 core/chain_id.go create mode 100644 core/pool.go create mode 100644 core/providers/v3_pool_accessor.go create mode 100644 core/providers/v3_pool_provider.go create mode 100644 core/providers/v3_subgraph_pool.go create mode 100644 core/providers/v3_subgraph_provider.go create mode 100644 core/quote.go create mode 100644 core/quoter/base_quoter.go create mode 100644 core/v3_candidate_pools.go create mode 100644 core/v3_route_with_valid_quote.go create mode 100644 database/database.go create mode 100644 database/mocks/pools.json create mode 100644 database/mocks/tokens.json create mode 100644 database/pool.go create mode 100644 database/token.go diff --git a/best_swap_route.go b/best_swap_route.go deleted file mode 100644 index 4259232..0000000 --- a/best_swap_route.go +++ /dev/null @@ -1,4 +0,0 @@ -package router - -type BestSwapRoute struct { -} diff --git a/core/alpha_router.go b/core/alpha_router.go index 53d33f9..bfc7480 100644 --- a/core/alpha_router.go +++ b/core/alpha_router.go @@ -1,9 +1,12 @@ package core -import "router/core/currency" +import ( + "router/core/currency" + "router/core/math" +) type AlphaRouter struct { - //chainId ChainId + chainId ChainId portionProvider IPortionProvider } @@ -14,52 +17,54 @@ func NewAlphaRouter(params AlphaRouterParams) *AlphaRouter { // Todo: goroutine func (a *AlphaRouter) route( baseCurrency currency.Currency, - quoteCurrency currency.Currency, - amount float64, // todo: float64 -> fraction + quoteCurrency currency.Currency, // 여기는 왜 quote를 쓰지 + amount math.Fraction, tradeType TradeType, swapConfig SwapOptions, routerConfig AlphaRouterConfig, -) SwapRoute { - //originalAmount := amount // for save +) *SwapRoute { + originalAmount := amount // for save - //currencyIn, currencyOut := a.determineCurrencyInOutFromTradeType(tradeType, baseCurrency, quoteCurrency) + currencyIn, currencyOut := a.determineCurrencyInOutFromTradeType(tradeType, baseCurrency, quoteCurrency) // token은 currency의 wrapped된 버전이다. - //tokenIn := currencyIn.GetToken() - //tokenOut := currencyOut.GetToken() + tokenIn := currencyIn.GetToken() + tokenOut := currencyOut.GetToken() // 왠만하면 함수로 뺄 것 - // 내용 이해 필요 - if tradeType == EXACT_OUTPUT { - portionAmount, portionErr := a.portionProvider.GetPortionAmount(amount, tradeType, swapConfig) - - if portionErr == nil && portionAmount > 0 { - // In case of exact out swap, before we route, we need to make sure that the - // token out amount accounts for flat portion, and token in amount after the best swap route contains the token in equivalent of portion. - // In other words, in case a pool's LP fee bps is lower than the portion bps (0.01%/0.05% for v3), a pool can go insolvency. - // This is because instead of the swapper being responsible for the portion, - // the pool instead gets responsible for the portion. - // The addition below avoids that situation. - amount += portionAmount - } - } + // TODO: 이해하기 + //if tradeType == EXACT_OUTPUT { + // portionAmount, portionErr := a.portionProvider.GetPortionAmount(amount, tradeType, swapConfig) + // if portionErr == nil && portionAmount > 0 { + // // 정확한 교환의 경우 라우팅하기 전에 다음 사항을 확인해야 합니다. + // // 토큰 아웃 금액은 고정 부분을 차지하며, 최상의 스왑 경로 이후의 토큰 인 금액에는 해당 부분에 해당하는 토큰이 포함됩니다. + // // 즉, 풀의 LP 수수료 bps가 부분 bps(v3의 경우 0.01%/0.05%)보다 낮은 경우 풀은 파산할 수 있습니다. + // // 그 이유는 스왑퍼가 해당 부분을 담당하는 대신, + // // 대신 풀이 해당 부분을 담당합니다. + // // 아래 추가 내용은 이러한 상황을 방지합니다. + // amount.Add(portionAmount) + // } + //} // routing config merge다루는 부분 패스 - //routerConfig = setRouterConfig(routingConfig, chainId) + // 이름 리팩토링 + routerConfig = a.setRouterConfig(routerConfig) // tokenIn 또는 tokenOut과 동일한 값... //quoteToken := quoteCurrency.GetToken() // main logic? - //routes := a.getSwapRouteFromChain(tokenIn, tokenOut, amount, tradeType, routingConfig) + // todo: 원본 코드에서 quote, routes를 활용하는데 quote가 무엇인가? - //if routes == nil { - // // todo: error 처리 해 줄 것 - //} + // 후처리는 나중으로 + bestSwapRoute := a.getSwapRouteFromChain(tokenIn, tokenOut, amount, tradeType, routerConfig) + if bestSwapRoute == nil { + return nil + } - //trade := a.buildTrade(currencyIn, currencyOut, tradeType, routes) + trade := a.buildTrade(currencyIn, currencyOut, tradeType, bestSwapRoute.routeWithValidQuote) - swapRoute := a.buildSwapRoute() + swapRoute := a.buildSwapRoute(trade) return swapRoute } @@ -75,26 +80,82 @@ func (a *AlphaRouter) determineCurrencyInOutFromTradeType( } // todo: goroutine -func (a *AlphaRouter) getSwapRouteFromChain(tokenIn, tokenOut currency.Token, amount float64, tradeType TradeType, routingConfig AlphaRouterConfig) *BestSwapRoute { - //percents, amount := a.getAmountDistribution(amount, routingConfig) - - return &BestSwapRoute{} +// quoteToken Token을 getSwapRouteFromChain에 매개변수로 넘기면 계산 효율은 좋아진다(아주 미세하게), 하지만 quoteToken은 지금의 매개변수로 간단하게 알 수 있다. +func (a *AlphaRouter) getSwapRouteFromChain(tokenIn, tokenOut currency.Token, amount math.Fraction, tradeType TradeType, routerConfig AlphaRouterConfig) *BestSwapRoute { + // 금액 분포, 즉 입력 금액의 일부를 생성합니다. + // 다양한 경로에 대한 입력 금액의 일부에 대한 견적을 받은 다음 + // 결합하여 분할 경로를 생성합니다. + // amount를 어떤 값들로(어떤 퍼센트 만큼씩) 나눌 것인지 + quotes := a.getAmountDistribution(amount, routerConfig.distributionPercent) + + // black box + v3CandidatePools := getV3CandidatePools() + // const quotePromises: Promisse[] = []; + // const getQuotesResults = await Promise.all(quotePromises) + + // main logic + // 모든 경로에 대한 모든 금액에 대한 모든 견적이 주어지면 최상의 조합을 찾으십시오. + bestSwapRoute := getBestSwapRoute(amount, tradeType, routerConfig) + + return bestSwapRoute } -func (a *AlphaRouter) getAmountDistribution(amount float64, routingConfig AlphaRouterConfig) (float64, float64) { +func (a *AlphaRouter) getAmountDistribution(amount math.Fraction, distributionPercent int) []Quote { + var quotes []Quote + + for i := 1; i <= 100; i += distributionPercent { + quotes = append(quotes, Quote{ + percent: math.NewFraction(int64(i), 100), + amount: amount.Mul(math.NewFraction(int64(i), 100)), + }) + } - return 0, 0 + return quotes } -func (a *AlphaRouter) buildTrade(currencyIn currency.Currency, currencyOut currency.Currency, tradeType TradeType, routes Routes) Trade { +func (a *AlphaRouter) buildTrade(currencyIn currency.Currency, currencyOut currency.Currency, tradeType TradeType, routes []V3RouteWithValidQuote) Trade { return Trade{} } -func (a *AlphaRouter) buildSwapRoute() SwapRoute { - return SwapRoute{} +func (a *AlphaRouter) buildSwapRoute(trade Trade) *SwapRoute { + return &SwapRoute{} } -func (a *AlphaRouter) setRouterConfig(routerConfig AlphaRouterConfig, chainId int) AlphaRouterConfig { - return AlphaRouterConfig{} +// todo: 함수명이 명확하지 않다 +func (a *AlphaRouter) setRouterConfig(routerConfig AlphaRouterConfig) AlphaRouterConfig { + defaultConfig := AlphaRouterConfig{ + v3ProtocolPoolSelection: ProtocolPoolSelection{ + topN: 2, + topNDirectSwaps: 2, + topNTokenInOut: 3, + topNSecondHop: 1, + topNWithEachBaseToken: 3, + topNWithBaseToken: 5, + }, + maxSwapsPerPath: 3, + minSplits: 1, + maxSplits: 7, + distributionPercent: 5, + useCachedRoutes: true, + writeToCachedRoutes: true, + optimisticCachedRoutes: false, + } + + if routerConfig.v3ProtocolPoolSelection != (ProtocolPoolSelection{}) { + defaultConfig.v3ProtocolPoolSelection = routerConfig.v3ProtocolPoolSelection + } + if routerConfig.maxSwapsPerPath != 0 { + defaultConfig.maxSwapsPerPath = routerConfig.maxSwapsPerPath + } + if routerConfig.maxSplits != 0 { + defaultConfig.maxSplits = routerConfig.maxSplits + } + if routerConfig.minSplits != 0 { + defaultConfig.minSplits = routerConfig.minSplits + } + if routerConfig.distributionPercent != 0 { + defaultConfig.distributionPercent = routerConfig.distributionPercent + } + return defaultConfig } diff --git a/core/alpha_router_config.go b/core/alpha_router_config.go index 4d0a9f5..642db6b 100644 --- a/core/alpha_router_config.go +++ b/core/alpha_router_config.go @@ -5,5 +5,18 @@ type AlphaRouterConfig struct { maxSwapsPerPath int maxSplits int minSplits int - distributionPercent int + + /** + * The minimum percentage of the input token to use for each route in a split route. + * All routes will have a multiple of this value. For example is distribution percentage is 5, + * a potential return swap would be: + * + * 5% of input => Route 1 + * 55% of input => Route 2 + * 40% of input => Route 3 + */ + distributionPercent int + useCachedRoutes bool + writeToCachedRoutes bool + optimisticCachedRoutes bool } diff --git a/core/alpha_router_params.go b/core/alpha_router_params.go index e9c8e8d..d5aa83c 100644 --- a/core/alpha_router_params.go +++ b/core/alpha_router_params.go @@ -1,4 +1,19 @@ package core +import "router/core/providers" + type AlphaRouterParams struct { + // The chain id for this instance of the Alpha Router. + chainId ChainId + // The provider for getting all pools that exist on V3 from the Subgraph. The pools + // from this provider are filtered during the algorithm to a set of candidate pools. + v3SubgraphProvider *providers.IV3SubgraphProvider + // The provider for getting data about V3 pools. + v3PoolProvider *providers.IV3PoolProvider + // The provider for getting V3 quotes. + onChainQuoteProvider *IOnChainQuoteProvider + // The provider for getting data about Tokens. + tokenProvider *ITokenProvider + // A provider for computing the portion-related data for routes and quotes. + portionProvider *IPortionProvider } diff --git a/core/best_swap_route.go b/core/best_swap_route.go index 0138ae7..8332180 100644 --- a/core/best_swap_route.go +++ b/core/best_swap_route.go @@ -1,4 +1,48 @@ package core +import "router/core/math" + type BestSwapRoute struct { + quote math.Fraction + routeWithValidQuote []V3RouteWithValidQuote +} + + +// todo: goroutine +// 모든 경로에 대한 모든 금액에 대한 모든 견적이 주어지면 최상의 조합을 찾으십시오. +func getBestSwapRoute(amount math.Fraction, routesWithValidQuotes []V3RouteWithValidQuote, tradeType TradeType, routerConfig AlphaRouterConfig) *BestSwapRoute { + // 유효한 인용문 목록에 대한 입력 비율 맵을 작성합니다. + // 다양한 이유로(부족한 유동성 등) 견적이 null이 될 수 있으므로 여기에도 입력합니다. + percentToQuotes := map[int][]V3RouteWithValidQuote{} + + // ???????? + for _, routeWithValidQuote := range routesWithValidQuotes { + if !percentToQuotes[routeWithValidQuote.percent] { + percentToQuotes[routeWithValidQuote.percent] = []V3RouteWithValidQuote{} + } + percentToQuotes[routeWithValidQuote.percent]!.push(routeWithValidQuote) + } + + // 각 백분율에 대한 유효한 인용문이 모두 주어지면 최적의 경로를 찾습니다. + bestSwapRoute := getBestSwapRouteBy() + if bestSwapRoute == nil { + // error + } + + // 입력의 백분율을 계산할 때 정밀도가 손실될 수 있으므로 각 백분율의 합계가 + // 최적의 견적 경로가 정확한 In 또는 ExactOut에 정확히 합산되지 않을 수 있습니다. + + // 여기에서 확인하고 불일치가 있는 경우 + // 누락된 금액을 무작위 경로에 추가하세요. 누락된 금액 크기는 무시할 수 있으므로 견적은 여전히 매우 정확해야 합니다. + + + return bestSwapRoute +} + + +// todo: goroutine +func getBestSwapRouteBy(tradeType TradeType) *BestSwapRoute { + + + return &BestSwapRoute{} } diff --git a/core/chain_id.go b/core/chain_id.go new file mode 100644 index 0000000..f6e2e70 --- /dev/null +++ b/core/chain_id.go @@ -0,0 +1,12 @@ +package core + +type ChainId int + +const ( + MAINNET = 1 + TEST3 = 2 + BETA_GNOSWAP = 3 + DEV_GNOSWAP = 4 + TEST_GNOSWAP = 5 + LOCAL = 99 +) diff --git a/core/constants.go b/core/constants.go index efe32d3..05796c6 100644 --- a/core/constants.go +++ b/core/constants.go @@ -6,3 +6,12 @@ const ( EXACT_INPUT = iota EXACT_OUTPUT ) + +type FeeAmount int + +const ( + LOWEST = 100 + LOW = 500 + MEDIUM = 3000 + HIGH = 10000 +) diff --git a/core/currency/token.go b/core/currency/token.go index e4988cd..b44f125 100644 --- a/core/currency/token.go +++ b/core/currency/token.go @@ -1,10 +1,25 @@ package currency +import "strings" + type Token struct { BaseCurrency - address string + Address string } func (t *Token) getToken() Token { return *t } + +// tolelom: 토큰 2개 비교해서 이름 순으로 정렬해서 pool 이름에 접근하려는 것으로 생각되는데 +// 함수명이 직관적이지 않다... + 바로 함수명 리턴하는 함수 있어도 좋을 거 같은데 +func (t *Token) sortsBefore(other Token) bool { + if t.ChainId != other.ChainId { + // other chain err + } + if t.address == other.address { + // same token err + } + + return strings.ToLower(t.Address) < strings.ToLower(other.Address) +} diff --git a/core/pool.go b/core/pool.go new file mode 100644 index 0000000..0bfd780 --- /dev/null +++ b/core/pool.go @@ -0,0 +1,20 @@ +package core + +import "router/core/currency" + +type Pool struct { + tokenA currency.Token + tokenB currency.Token + fee FeeAmount + sqrtRatioX96 float64 + liquidity float64 + tickCurrent float64 + tickDataProvider TickDataProvider + + path string +} + +func NewPool(tokenA currency.Token, tokenB currency.Token, fee FeeAmount, sqrtRatioX96 float64, liquidity float64, tickCurrent float64, tickDataProvider TickDataProvider) *Pool { + + return &Pool{} +} diff --git a/core/portion_provider.go b/core/portion_provider.go index b30b5a1..b78cc23 100644 --- a/core/portion_provider.go +++ b/core/portion_provider.go @@ -1,7 +1,9 @@ package core +import "router/core/math" + type IPortionProvider interface { - GetPortionAmount(tokenOutAmount float64, tradeType TradeType, swapConfig SwapOptions) (float64, error) + GetPortionAmount(tokenOutAmount math.Fraction, tradeType TradeType, swapConfig SwapOptions) (math.Fraction, error) } type PortionProvider struct { diff --git a/core/providers/v3_pool_accessor.go b/core/providers/v3_pool_accessor.go new file mode 100644 index 0000000..986d37e --- /dev/null +++ b/core/providers/v3_pool_accessor.go @@ -0,0 +1,12 @@ +package providers + +import ( + "router/core" + "router/core/currency" +) + +type V3PoolAccessor interface { + GetPool(tokenA currency.Token, tokenB currency.Token, feeAmount core.FeeAmount) (*core.Pool, error) // Pool 또는 오류 반환 + GetPoolByAddress(address string) (*core.Pool, error) // Pool 또는 오류 반환 + GetAllPools() []core.Pool // Pool 배열 반환 +} diff --git a/core/providers/v3_pool_provider.go b/core/providers/v3_pool_provider.go new file mode 100644 index 0000000..49127a0 --- /dev/null +++ b/core/providers/v3_pool_provider.go @@ -0,0 +1,34 @@ +package providers + +import ( + "router/core" + "router/core/currency" + "router/database" +) + +type IV3PoolProvider interface { + getPools(tokenPairs ??) V3PoolAccessor + getPoolAddress(tokenA, tokenB currency.Token, feeAmount core.FeeAmount) (string, currency.Token, currency.Token) +} + +type V3PoolProvider struct { + PoolAddressCache map[string]string + database database.Database +} + +func NewV3PoolProvider(chainId core.ChainId, db database.Database) *V3PoolProvider { + return &V3PoolProvider{ + PoolAddressCache: make(map[string]string), + database: db, + } +} + + +// todo: goroutine +func (pp *V3PoolProvider) getPools() { + +} + +func (pp *V3PoolProvider) getPoolAddress(tokenA, tokenB currency.Token, feeAmount core.FeeAmount) (string, currency.Token, currency.Token) { + +} \ No newline at end of file diff --git a/core/providers/v3_subgraph_pool.go b/core/providers/v3_subgraph_pool.go new file mode 100644 index 0000000..f85c019 --- /dev/null +++ b/core/providers/v3_subgraph_pool.go @@ -0,0 +1,21 @@ +package providers + +import "router/core/currency" + +type V3SubgraphPool struct { + ID string `json:"id"` + Liquidity string `json:"liquidity"` + TokenA currency.Token `json:"tokenA"` + TokenB currency.Token `json:"tokenB"` + TotalValueLockedUSD float64 `json:"tvlUSD"` + Fee float64 `json:"fee"` +} + +type RawV3SubgraphPool struct { + ID string + Liquidity string + TokenAPath string + TokenBPath string + TotalValueLockedUSD string + Fee float64 +} diff --git a/core/providers/v3_subgraph_provider.go b/core/providers/v3_subgraph_provider.go new file mode 100644 index 0000000..d25e7d0 --- /dev/null +++ b/core/providers/v3_subgraph_provider.go @@ -0,0 +1,50 @@ +package providers + +import ( + "router/core" + "router/core/currency" + "router/database" +) + +const ( + defaultTrackedUSDThreshold = 0.01 + defaultLiquidityThreshold = 100000 +) + +type IV3SubgraphProvider interface { + getPools(tokenIn *currency.Token, tokenOut *currency.Token) []V3SubgraphPool +} + +type V3SubgraphProvider struct { + chainId core.ChainId + db database.Database + trackedUsdThreshold float64 + liquidityThreshold float64 +} + +func NewV3SubgraphProvider(chainId core.ChainId, db database.Database, trackedUSDThreshold, liquidityThreshold float64) *V3SubgraphProvider { + if trackedUSDThreshold == 0.0 { + trackedUSDThreshold = defaultTrackedUSDThreshold + } + if liquidityThreshold == 0.0 { + liquidityThreshold = defaultLiquidityThreshold + } + + return &V3SubgraphProvider{ + chainId: chainId, + db: db, + trackedUsdThreshold: trackedUSDThreshold, + liquidityThreshold: liquidityThreshold, + } +} + +func (sp *V3SubgraphProvider) getPools(tokenIn *currency.Token, tokenOut *currency.Token) []V3SubgraphPool { + pools := sp.db.GetPools() + sanitizedPools := sp.selectPools(pools) + return sanitizedPools +} + +func (sp *V3SubgraphProvider) selectPools(pools []database.PoolV0) []V3SubgraphPool { + + return []V3SubgraphPool{} +} diff --git a/core/quote.go b/core/quote.go new file mode 100644 index 0000000..88dfc8a --- /dev/null +++ b/core/quote.go @@ -0,0 +1,8 @@ +package core + +import "router/core/math" + +type Quote struct { + percent *math.Fraction + amount *math.Fraction +} diff --git a/core/quoter/base_quoter.go b/core/quoter/base_quoter.go new file mode 100644 index 0000000..f6ebb0b --- /dev/null +++ b/core/quoter/base_quoter.go @@ -0,0 +1,8 @@ +package quoter + +import "router/core" + +type BaseQuoter struct { + chainId core.ChainId + protocol Protocol +} diff --git a/core/v3_candidate_pools.go b/core/v3_candidate_pools.go new file mode 100644 index 0000000..c5951a7 --- /dev/null +++ b/core/v3_candidate_pools.go @@ -0,0 +1,34 @@ +package core + +import ( + "router/core/currency" + "router/core/providers" +) + +// 추측하기로 사용 가능한 풀들을 땡겨오는 무언가? + +type V3CandidatePools struct { + poolAccessor providers.V3PoolAccessor + candidatePools CandidatePoolsBySelectionCriteria + subgraphPools []providers.V3SubgraphPool +} + +func getV3CandidatePools( + tokenIn currency.Token, + tokenOut currency.Token, + tradeType TradeType, + routerConfig AlphaRouterConfig, + //subgraphProvider, + //tokenProvider, + //poolPrivider, + chainId ChainId, +) V3CandidatePools { + // ????? Protocol이 왜 들어가 + v3ProtocolPoolSelection := routerConfig.v3ProtocolPoolSelection + + tokenInAddress := tokenIn.Address + tokenOutAddress := tokenOut.Address + + //allPools := + +} diff --git a/core/v3_route_with_valid_quote.go b/core/v3_route_with_valid_quote.go new file mode 100644 index 0000000..dc208fc --- /dev/null +++ b/core/v3_route_with_valid_quote.go @@ -0,0 +1,4 @@ +package core + +type V3RouteWithValidQuote struct { +} diff --git a/database/database.go b/database/database.go new file mode 100644 index 0000000..e289de0 --- /dev/null +++ b/database/database.go @@ -0,0 +1,8 @@ +package database + +type Database interface { + GetPools() []PoolV0 + GetTokens() []TokenV0 + //query(sql string) T ???? + //commit(string, any[][]) bool ?????? +} diff --git a/database/mocks/pools.json b/database/mocks/pools.json new file mode 100644 index 0000000..0df3871 --- /dev/null +++ b/database/mocks/pools.json @@ -0,0 +1,6343 @@ +[ + { + "id": "c46287e4-e3ee-4142-8cc2-128fedf97df0", + "height": 123, + "time": "2024-05-28T21:54:24.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/bar:gno.land/r/demo/baz:100", + "token0_path": "gno.land/r/demo/bar", + "token1_path": "gno.land/r/demo/baz", + "token0_balance": "105.999956", + "token1_balance": "103.428446", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "79188560365900331282262334060", + "tick": -10, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "22093852746122072075110943023", + "fee_growth_global1_x128": "22093852746122072075110943023", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "77008381207", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "-31973600640", + "liquidityGross": "111997602238", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10": { + "initialized": true, + "liquidityNet": "-40012000799", + "liquidityGross": "40012000799", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "190": { + "initialized": true, + "liquidityNet": "-5022779768", + "liquidityGross": "5022779768", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-20": { + "initialized": true, + "liquidityNet": "31933570629", + "liquidityGross": "112037632249", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-30": { + "initialized": true, + "liquidityNet": "40052030810", + "liquidityGross": "40052030810", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-200": { + "initialized": true, + "liquidityNet": "5022779768", + "liquidityGross": "5022779768", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1569275433846670190958947355801916604025588861116008629249", + "-1": "110535781335317623158134761856780485761912292132416347244582396059713536" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "71985601439", + "tickLower": -20, + "tickUpper": 0, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "40012000799", + "tickLower": 0, + "tickUpper": 10, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "40052030810", + "tickLower": -30, + "tickUpper": -20, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "5022779768", + "tickLower": -200, + "tickUpper": 190, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "4aa79ab9-822a-4c5b-a651-64049769321e", + "height": 73, + "time": "2024-05-28T21:50:13.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/bar:gno.land/r/demo/baz:3000", + "token0_path": "gno.land/r/demo/bar", + "token1_path": "gno.land/r/demo/baz", + "token0_balance": "0.000001", + "token1_balance": "0.000099", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "792321063670230269303669868814", + "tick": 46055, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "25", + "ticks": { + "36060": { + "initialized": true, + "liquidityNet": "25", + "liquidityGross": "25", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "56040": { + "initialized": true, + "liquidityNet": "-25", + "liquidityGross": "25", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "618970019642690137449562112", + "3": "93536104789177786765035829293842113257979682750464" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "25", + "tickLower": 36060, + "tickUpper": 56040, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "10168cab-5023-44a9-a76a-869188a95dea", + "height": 72, + "time": "2024-05-28T21:50:08.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/bar:gno.land/r/demo/baz:500", + "token0_path": "gno.land/r/demo/bar", + "token1_path": "gno.land/r/demo/baz", + "token0_balance": "19.980011", + "token1_balance": "20", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "79267784519130042428790663799", + "tick": 10, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "39992000799", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "39992000799", + "liquidityGross": "39992000799", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20": { + "initialized": true, + "liquidityNet": "-39992000799", + "liquidityGross": "39992000799", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "5" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "39992000799", + "tickLower": 0, + "tickUpper": 20, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "977f0421-0da6-46eb-9c90-c5ae7df31e17", + "height": 4130, + "time": "2024-05-29T03:30:23.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/bar:gno.land/r/demo/foo:3000", + "token0_path": "gno.land/r/demo/bar", + "token1_path": "gno.land/r/demo/foo", + "token0_balance": "2999.179363", + "token1_balance": "3000.199999", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "79232123823359799118286999568", + "tick": 1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "10206885310", + "ticks": { + "6960": { + "initialized": true, + "liquidityNet": "-10206885310", + "liquidityGross": "10206885310", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6960": { + "initialized": true, + "liquidityNet": "10206885310", + "liquidityGross": "10206885310", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "83076749736557242056487941267521536", + "-1": "1393796574908163946345982392040522594123776" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "10206885310", + "tickLower": -6960, + "tickUpper": 6960, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "5923.24467953887837" + }, + { + "id": "b46b52a1-aa13-4fe7-b463-5c4f43bf1dfc", + "height": 3458, + "time": "2024-05-29T02:33:56.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/bar:gno.land/r/demo/wugnot:3000", + "token0_path": "gno.land/r/demo/bar", + "token1_path": "gno.land/r/demo/wugnot", + "token0_balance": "122.958157", + "token1_balance": "123", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "79232123823359799118286999568", + "tick": 1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "418454400", + "ticks": { + "6960": { + "initialized": true, + "liquidityNet": "-418454400", + "liquidityGross": "418454400", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6960": { + "initialized": true, + "liquidityNet": "418454400", + "liquidityGross": "418454400", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "83076749736557242056487941267521536", + "-1": "1393796574908163946345982392040522594123776" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "418454400", + "tickLower": -6960, + "tickUpper": 6960, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "129.6523314756859689" + }, + { + "id": "3f43ffa3-58f2-4140-9d1f-d804295318c8", + "height": 4174, + "time": "2024-05-29T03:34:10.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/baz:gno.land/r/demo/foo:3000", + "token0_path": "gno.land/r/demo/baz", + "token1_path": "gno.land/r/demo/foo", + "token0_balance": "2999.999997", + "token1_balance": "2999.999997", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "79228162514264337593543950336", + "tick": -1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "10207941252", + "ticks": { + "6960": { + "initialized": true, + "liquidityNet": "-10207941252", + "liquidityGross": "10207941252", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6960": { + "initialized": true, + "liquidityNet": "10207941252", + "liquidityGross": "10207941252", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "83076749736557242056487941267521536", + "-1": "1393796574908163946345982392040522594123776" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "10207941252", + "tickLower": -6960, + "tickUpper": 6960, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "5922.849818935321275" + }, + { + "id": "85af63b8-2c36-45d3-84f7-e0f3e8a5c180", + "height": 76, + "time": "2024-05-28T21:50:28.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/baz:gno.land/r/demo/qux:500", + "token0_path": "gno.land/r/demo/baz", + "token1_path": "gno.land/r/demo/qux", + "token0_balance": "2.000418", + "token1_balance": "20", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "250553947533412109193337304115", + "tick": 23028, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "16076115", + "ticks": { + "13030": { + "initialized": true, + "liquidityNet": "16076115", + "liquidityGross": "16076115", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "33030": { + "initialized": true, + "liquidityNet": "-16076115", + "liquidityGross": "16076115", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "5": "8388608", + "12": "3450873173395281893717377931138512726225554486085193277581262111899648" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "16076115", + "tickLower": 13030, + "tickUpper": 33030, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "1b6d17a7-11b6-437d-968d-49a466f80758", + "height": 17009, + "time": "2024-05-29T21:30:54.000Z", + "date": "2024-05-30", + "pool_path": "gno.land/r/demo/foo:gno.land/r/gnoswap/gns:500", + "token0_path": "gno.land/r/demo/foo", + "token1_path": "gno.land/r/gnoswap/gns", + "token0_balance": "10.125084", + "token1_balance": "19.752569", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "110660362189895649586228779477", + "tick": 6683, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "1515894392925920853963132691717757", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "14142007", + "ticks": { + "887270": { + "initialized": true, + "liquidityNet": "-14142007", + "liquidityGross": "14142007", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887270": { + "initialized": true, + "liquidityNet": "14142007", + "liquidityGross": "14142007", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "0", + "346": "2854495385411919762116571938898990272765493248", + "-347": "40564819207303340847894502572032" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "14142007", + "tickLower": -887270, + "tickUpper": 887270, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "38.728868435870423492" + }, + { + "id": "7769403a-2691-4fd2-90ca-597f45ad2bb9", + "height": 4200, + "time": "2024-05-29T03:36:21.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/foo:gno.land/r/demo/qux:3000", + "token0_path": "gno.land/r/demo/foo", + "token1_path": "gno.land/r/demo/qux", + "token0_balance": "1099.999998", + "token1_balance": "1099.999998", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "79228162514264337593543950336", + "tick": -1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "3742911789", + "ticks": { + "6960": { + "initialized": true, + "liquidityNet": "-3742911789", + "liquidityGross": "3742911789", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6960": { + "initialized": true, + "liquidityNet": "3742911789", + "liquidityGross": "3742911789", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "83076749736557242056487941267521536", + "-1": "1393796574908163946345982392040522594123776" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3742911789", + "tickLower": -6960, + "tickUpper": 6960, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "2171.7115984994295201" + }, + { + "id": "c0a43254-19e2-4d50-a812-1fafdf76b38d", + "height": 79, + "time": "2024-05-28T21:50:43.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/foo:gno.land/r/demo/qux:500", + "token0_path": "gno.land/r/demo/foo", + "token1_path": "gno.land/r/demo/qux", + "token0_balance": "20", + "token1_balance": "9.960887", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "56022262241300288188759753413", + "tick": -6932, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "289419747", + "ticks": { + "-5930": { + "initialized": true, + "liquidityNet": "-289419747", + "liquidityGross": "289419747", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-7930": { + "initialized": true, + "liquidityNet": "289419747", + "liquidityGross": "289419747", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "-3": "47890485652059026823698344598447161988085597568237568", + "-4": "3450873173395281893717377931138512726225554486085193277581262111899648" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "289419747", + "tickLower": -7930, + "tickUpper": -5930, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "39.485665499054474" + }, + { + "id": "2c357fd0-ea4a-4216-a29b-35192ea41242", + "height": 4352, + "time": "2024-05-29T03:49:05.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/gnoswap/gns:gno.land/r/demo/wugnot:100", + "token0_path": "gno.land/r/gnoswap/gns", + "token1_path": "gno.land/r/demo/wugnot", + "token0_balance": "21.178101", + "token1_balance": "18.86168", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "75126367219584836835447254273", + "tick": -1064, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "1937605295035561071419316264176002", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "21776888", + "ticks": { + "50000": { + "initialized": true, + "liquidityNet": "-21776888", + "liquidityGross": "21776888", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-50000": { + "initialized": true, + "liquidityNet": "21776888", + "liquidityGross": "21776888", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "0", + "195": "1208925819614629174706176", + "-1": "0", + "-2": "0", + "-3": "0", + "-4": "0", + "-5": "0", + "-196": "95780971304118053647396689196894323976171195136475136" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "21776888", + "tickLower": -50000, + "tickUpper": 50000, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "39.973268836509020532" + }, + { + "id": "b42e82ee-3039-4551-a6d4-d62c5adec786", + "height": 17069, + "time": "2024-05-29T21:35:56.000Z", + "date": "2024-05-30", + "pool_path": "gno.land/r/gnoswap/gns:gno.land/r/demo/wugnot:3000", + "token0_path": "gno.land/r/gnoswap/gns", + "token1_path": "gno.land/r/demo/wugnot", + "token0_balance": "173.025211", + "token1_balance": "377.808483", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "75581802227381638701829671466", + "tick": -943, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "49398430952889634712225519790128852", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "478802075", + "ticks": { + "6000": { + "initialized": true, + "liquidityNet": "-439578809", + "liquidityGross": "439578809", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "49980": { + "initialized": true, + "liquidityNet": "-39223266", + "liquidityGross": "39223266", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-7860": { + "initialized": true, + "liquidityNet": "439578809", + "liquidityGross": "439578809", + "secondsOutside": 0, + "feeGrowthOutside0X128": "49398430952889634712225519790128852", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-13920": { + "initialized": true, + "liquidityNet": "-2914196966", + "liquidityGross": "2914196966", + "secondsOutside": 0, + "feeGrowthOutside0X128": "49398430952889634712225519790128852", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-17220": { + "initialized": true, + "liquidityNet": "2914196966", + "liquidityGross": "2914196966", + "secondsOutside": 0, + "feeGrowthOutside0X128": "49398430952889634712225519790128852", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-49980": { + "initialized": true, + "liquidityNet": "39223266", + "liquidityGross": "39223266", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1267650600228229401496703205376", + "3": "36893488147419103232", + "-1": "42535295865117307932921825928987803648", + "-2": "53919893334301279589334030174039261347274288845081144962207220498432", + "-4": "3138550867693340381917894711603833208051177722232017256448" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "39223266", + "tickLower": -49980, + "tickUpper": 49980, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "439578809", + "tickLower": -7860, + "tickUpper": 6000, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2914196966", + "tickLower": -17220, + "tickUpper": -13920, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "562.3893358328828479" + }, + { + "id": "648390dc-bc27-44d8-a9ca-c8330b28e33f", + "height": 1326, + "time": "2024-05-28T23:35:16.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test02:100", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test02", + "token0_balance": "200000", + "token1_balance": "194184.987757", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "79228162514264337593543950336", + "tick": -1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "645255352923", + "ticks": { + "6931": { + "initialized": true, + "liquidityNet": "-341455086361", + "liquidityGross": "341455086361", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "7985": { + "initialized": true, + "liquidityNet": "-303800266562", + "liquidityGross": "303800266562", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6933": { + "initialized": true, + "liquidityNet": "341455086361", + "liquidityGross": "341455086361", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-7420": { + "initialized": true, + "liquidityNet": "303800266562", + "liquidityGross": "303800266562", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "524288", + "31": "562949953421312", + "-28": "55213970774324510299478046898216203619608871777363092441300193790394368", + "-29": "16" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "303800266562", + "tickLower": -7420, + "tickUpper": 7985, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "341455086361", + "tickLower": -6933, + "tickUpper": 6931, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "58bd89b7-db4c-4b67-a562-5b63096328eb", + "height": 208, + "time": "2024-05-28T22:01:32.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test02:10000", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test02", + "token0_balance": "299999.999998", + "token1_balance": "104792.223264", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "79228162514264337593543950336", + "tick": -1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1480679921772", + "ticks": { + "3600": { + "initialized": true, + "liquidityNet": "-607082448615", + "liquidityGross": "607082448615", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "5200": { + "initialized": true, + "liquidityNet": "-873597473157", + "liquidityGross": "873597473157", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-1000": { + "initialized": true, + "liquidityNet": "607082448615", + "liquidityGross": "607082448615", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-1800": { + "initialized": true, + "liquidityNet": "873597473157", + "liquidityGross": "873597473157", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "67371008", + "-1": "3844659212957764301173255361616590690440604959601346852872615094012740632576" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "873597473157", + "tickLower": -1800, + "tickUpper": 5200, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "607082448615", + "tickLower": -1000, + "tickUpper": 3600, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "c7710a14-d633-411f-9721-4723228fb3e9", + "height": 206, + "time": "2024-05-28T22:01:22.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test02:500", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test02", + "token0_balance": "2000000", + "token1_balance": "2225268.629958", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "79228162514264337593543950336", + "tick": -1, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "6591074495769", + "ticks": { + "5980": { + "initialized": true, + "liquidityNet": "-3869527205709", + "liquidityGross": "3869527205709", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "9160": { + "initialized": true, + "liquidityNet": "-2721547290060", + "liquidityGross": "2721547290060", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-7880": { + "initialized": true, + "liquidityNet": "3869527205709", + "liquidityGross": "3869527205709", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-8760": { + "initialized": true, + "liquidityNet": "2721547290060", + "liquidityGross": "2721547290060", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "77371252455336267181195264", + "3": "356811923176489970264571492362373784095686656", + "-4": "110427941548649020598956094153244330415707713819297677244974171676475392" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3869527205709", + "tickLower": -7880, + "tickUpper": 5980, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2721547290060", + "tickLower": -8760, + "tickUpper": 9160, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "5a4311ae-bd6e-4799-8fe3-9a4ba7ff9a2f", + "height": 1413, + "time": "2024-05-28T23:42:33.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test03:100", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test03", + "token0_balance": "200000.000002", + "token1_balance": "552917.958812", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "112040957517951813098925484553", + "tick": 6931, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "640551436426", + "ticks": { + "16095": { + "initialized": true, + "liquidityNet": "-384736712332", + "liquidityGross": "384736712332", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23027": { + "initialized": true, + "liquidityNet": "-255814724094", + "liquidityGross": "255814724094", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6933": { + "initialized": true, + "liquidityNet": "384736712332", + "liquidityGross": "384736712332", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-23029": { + "initialized": true, + "liquidityNet": "255814724094", + "liquidityGross": "255814724094", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "62": "13479973333575319897333507543509815336818572211270286240551805124608", + "89": "14134776518227074636666380005943348126619871175004951664972849610340958208", + "-28": "55213970774324510299478046898216203619608871777363092441300193790394368", + "-90": "2048" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "255814724094", + "tickLower": -23029, + "tickUpper": 23027, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "384736712332", + "tickLower": -6933, + "tickUpper": 16095, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "4aa44d38-d2bd-4e20-9924-395ec4d77da2", + "height": 214, + "time": "2024-05-28T22:02:02.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test03:3000", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test03", + "token0_balance": "300000", + "token1_balance": "513881.596624", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "112040957517951813098925484553", + "tick": 6931, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1838402222765", + "ticks": { + "1980": { + "initialized": true, + "liquidityNet": "1156557440321", + "liquidityGross": "1156557440321", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "3420": { + "initialized": true, + "liquidityNet": "681844782444", + "liquidityGross": "681844782444", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "11580": { + "initialized": true, + "liquidityNet": "-681844782444", + "liquidityGross": "681844782444", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "12540": { + "initialized": true, + "liquidityNet": "-1156557440321", + "liquidityGross": "1156557440321", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "822764832864073794439012262857521667824200137671794056409120768" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1156557440321", + "tickLower": 1980, + "tickUpper": 12540, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "681844782444", + "tickLower": 3420, + "tickUpper": 11580, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "43050a75-9b06-4e14-bb58-eb6b6f790420", + "height": 212, + "time": "2024-05-28T22:01:52.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test03:500", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test03", + "token0_balance": "300000", + "token1_balance": "588109.370077", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "112040957517951813098925484553", + "tick": 6931, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "298643245367211", + "ticks": { + "4050": { + "initialized": true, + "liquidityNet": "769932604253", + "liquidityGross": "769932604253", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6910": { + "initialized": true, + "liquidityNet": "297873312762958", + "liquidityGross": "297873312762958", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6950": { + "initialized": true, + "liquidityNet": "-297873312762958", + "liquidityGross": "297873312762958", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10990": { + "initialized": true, + "liquidityNet": "-769932604253", + "liquidityGross": "769932604253", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "1": "713623846352979940529142984724747568191373312", + "2": "13026212097360055296045949730777628060759282538560618496", + "4": "37778931862957161709568" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "769932604253", + "tickLower": 4050, + "tickUpper": 10990, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "297873312762958", + "tickLower": 6910, + "tickUpper": 6950, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "72a1fecb-111a-4d97-90da-dd1e6c01ccdb", + "height": 216, + "time": "2024-05-28T22:02:12.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test04:100", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "110000", + "token1_balance": "603601.297941", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "137229452036901483513756353252", + "tick": 10987, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "897653692757", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "768371022155", + "liquidityGross": "768371022155", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6932": { + "initialized": true, + "liquidityNet": "129282670602", + "liquidityGross": "129282670602", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13864": { + "initialized": true, + "liquidityNet": "-129282670602", + "liquidityGross": "129282670602", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16096": { + "initialized": true, + "liquidityNet": "-768371022155", + "liquidityGross": "768371022155", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "27": "1048576", + "54": "1099511627776", + "62": "26959946667150639794667015087019630673637144422540572481103610249216" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "768371022155", + "tickLower": 0, + "tickUpper": 16096, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "129282670602", + "tickLower": 6932, + "tickUpper": 13864, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "4572204c-9e6f-4e3e-85e5-2368e18ded05", + "height": 220, + "time": "2024-05-28T22:02:32.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test04:10000", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "11000", + "token1_balance": "29637.104777", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "137229452036901483513756353252", + "tick": 10987, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "146473939245", + "ticks": { + "9000": { + "initialized": true, + "liquidityNet": "141429532925", + "liquidityGross": "141429532925", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13600": { + "initialized": true, + "liquidityNet": "-141429532925", + "liquidityGross": "141429532925", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19400": { + "initialized": true, + "liquidityNet": "-5044406320", + "liquidityGross": "5044406320", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-16000": { + "initialized": true, + "liquidityNet": "5044406320", + "liquidityGross": "5044406320", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "158456325323676615550812815360", + "-1": "95780971304118053647396689196894323976171195136475136" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "5044406320", + "tickLower": -16000, + "tickUpper": 19400, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "141429532925", + "tickLower": 9000, + "tickUpper": 13600, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "71880558-2f40-437f-954c-e2b8581bb49b", + "height": 218, + "time": "2024-05-28T22:02:22.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test04:500", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "130000", + "token1_balance": "449774.797268", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "137229452036901483513756353252", + "tick": 10987, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "838853156990", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "446692308052", + "liquidityGross": "446692308052", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "7000": { + "initialized": true, + "liquidityNet": "392160848938", + "liquidityGross": "392160848938", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13830": { + "initialized": true, + "liquidityNet": "-392160848938", + "liquidityGross": "392160848938", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-446692308052", + "liquidityGross": "446692308052", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "2": "392318858461667547739736838950479151006397215279002157056", + "5": "10141204801825835211973625643008", + "8": "4294967296" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "446692308052", + "tickLower": 0, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "392160848938", + "tickLower": 7000, + "tickUpper": 13830, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "749ecaca-1080-40be-a65f-644cda87a2aa", + "height": 222, + "time": "2024-05-28T22:02:42.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test05:100", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "200000", + "token1_balance": "1059521.26264", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "158459202898910110285447649633", + "tick": 13864, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "211730565629227", + "ticks": { + "6932": { + "initialized": true, + "liquidityNet": "1089882298316", + "liquidityGross": "1089882298316", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13844": { + "initialized": true, + "liquidityNet": "210640683330911", + "liquidityGross": "210640683330911", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13883": { + "initialized": true, + "liquidityNet": "-210640683330911", + "liquidityGross": "210640683330911", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17919": { + "initialized": true, + "liquidityNet": "-1089882298316", + "liquidityGross": "1089882298316", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "1048576", + "54": "576460752304472064", + "69": "57896044618658097711785492504343953926634992332820282019728792003956564819968" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1089882298316", + "tickLower": 6932, + "tickUpper": 17919, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "210640683330911", + "tickLower": 13844, + "tickUpper": 13883, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "cb197014-41d2-4e4d-8657-17ab4d8f2787", + "height": 227, + "time": "2024-05-28T22:03:07.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test05:3000", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "200000", + "token1_balance": "821629.318056", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "158459202898910110285447649633", + "tick": 13864, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1422886078301", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "600834739707", + "liquidityGross": "600834739707", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10980": { + "initialized": true, + "liquidityNet": "822051338594", + "liquidityGross": "822051338594", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19440": { + "initialized": true, + "liquidityNet": "-822051338594", + "liquidityGross": "822051338594", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21960": { + "initialized": true, + "liquidityNet": "-600834739707", + "liquidityGross": "600834739707", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "12259964326927110866866776217202473468949912977468817409", + "1": "1298074214634002055037803435130880" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "822051338594", + "tickLower": 10980, + "tickUpper": 19440, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "600834739707", + "tickLower": 0, + "tickUpper": 21960, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "09565abb-4dfe-4387-89c0-ef4f434f9bb4", + "height": 224, + "time": "2024-05-28T22:02:52.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test05:500", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "220000", + "token1_balance": "1237051.759807", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "158459202898910110285447649633", + "tick": 13864, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1336969032586", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "1200466900869", + "liquidityGross": "1200466900869", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10990": { + "initialized": true, + "liquidityNet": "136502131717", + "liquidityGross": "136502131717", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-136502131717", + "liquidityGross": "136502131717", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-1200466900869", + "liquidityGross": "1200466900869", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "4": "37778931862957161709568", + "8": "713623846352979940529142984724747572486340608" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1200466900869", + "tickLower": 0, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "136502131717", + "tickLower": 10990, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "0fabb7cb-bca3-41e4-af99-13d622e7cbdf", + "height": 228, + "time": "2024-05-28T22:03:12.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test06:100", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "110000", + "token1_balance": "699753.726648", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "177166786517138269218369076073", + "tick": 16096, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "851285808449", + "ticks": { + "6931": { + "initialized": true, + "liquidityNet": "763455778198", + "liquidityGross": "763455778198", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6932": { + "initialized": true, + "liquidityNet": "87830030251", + "liquidityGross": "87830030251", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21973": { + "initialized": true, + "liquidityNet": "-87830030251", + "liquidityGross": "87830030251", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23028": { + "initialized": true, + "liquidityNet": "-763455778198", + "liquidityGross": "763455778198", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "1572864", + "85": "13164036458569648337239753460458804039861886925068638906788872192", + "89": "28269553036454149273332760011886696253239742350009903329945699220681916416" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "763455778198", + "tickLower": 6931, + "tickUpper": 23028, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "87830030251", + "tickLower": 6932, + "tickUpper": 21973, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "e2264376-2fd6-4d4d-b98f-9a166adbaa02", + "height": 232, + "time": "2024-05-28T22:03:32.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test06:10000", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "200000", + "token1_balance": "855699.617718", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "177166786517138269218369076073", + "tick": 16096, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "2234606354066", + "ticks": { + "9200": { + "initialized": true, + "liquidityNet": "766046541430", + "liquidityGross": "766046541430", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13800": { + "initialized": true, + "liquidityNet": "1468559812636", + "liquidityGross": "1468559812636", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19400": { + "initialized": true, + "liquidityNet": "-1468559812636", + "liquidityGross": "1468559812636", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23000": { + "initialized": true, + "liquidityNet": "-766046541430", + "liquidityGross": "766046541430", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "41538533324604239852799885171490816" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1468559812636", + "tickLower": 13800, + "tickUpper": 19400, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "766046541430", + "tickLower": 9200, + "tickUpper": 23000, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "81c97d38-98a2-4442-a86d-e864d4c97b55", + "height": 2077, + "time": "2024-05-29T00:38:11.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test06:500", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "200000.000001", + "token1_balance": "515468.996472", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "177166786517138269218369076073", + "tick": 16096, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1186348363840", + "ticks": { + "10990": { + "initialized": true, + "liquidityNet": "878686193995", + "liquidityGross": "878686193995", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13860": { + "initialized": true, + "liquidityNet": "307662169845", + "liquidityGross": "307662169845", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-878686193995", + "liquidityGross": "878686193995", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "42050": { + "initialized": true, + "liquidityNet": "-307662169845", + "liquidityGross": "307662169845", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "4": "37778931862957161709568", + "5": "81129638414606681695789005144064", + "8": "713623846352979940529142984724747568191373312", + "16": "649037107316853453566312041152512" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "307662169845", + "tickLower": 13860, + "tickUpper": 42050, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "878686193995", + "tickLower": 10990, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "2d86d265-da4a-4fa3-bfc1-fdb0852f489e", + "height": 234, + "time": "2024-05-28T22:03:42.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test07:100", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "200000", + "token1_balance": "1643579.804184", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "3656516507626", + "ticks": { + "13863": { + "initialized": true, + "liquidityNet": "3656516507626", + "liquidityGross": "3656516507626", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20795": { + "initialized": true, + "liquidityNet": "-3656516507626", + "liquidityGross": "3656516507626", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "54": "549755813888", + "81": "576460752303423488" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3656516507626", + "tickLower": 13863, + "tickUpper": 20795, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "9ab2882b-9508-4251-8077-1b691704ff3a", + "height": 238, + "time": "2024-05-28T22:04:02.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test07:3000", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "330000", + "token1_balance": "1063557.389232", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "3503711092709", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "251184036671", + "liquidityGross": "251184036671", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16080": { + "initialized": true, + "liquidityNet": "3252527056038", + "liquidityGross": "3252527056038", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23040": { + "initialized": true, + "liquidityNet": "-3252527056038", + "liquidityGross": "3252527056038", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "24840": { + "initialized": true, + "liquidityNet": "-251184036671", + "liquidityGross": "251184036671", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "1": "365375409673008096471859671642445362345751351296" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3252527056038", + "tickLower": 16080, + "tickUpper": 23040, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "251184036671", + "tickLower": 0, + "tickUpper": 24840, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "65c5ab85-1937-4bf0-96b2-28d9037c32bb", + "height": 236, + "time": "2024-05-28T22:03:52.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test01:gno.land/r/demo/test07:500", + "token0_path": "gno.land/r/demo/test01", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "300000", + "token1_balance": "3024894.28831", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "4986280340203", + "ticks": { + "6930": { + "initialized": true, + "liquidityNet": "1335662213946", + "liquidityGross": "1335662213946", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13860": { + "initialized": true, + "liquidityNet": "3650618126257", + "liquidityGross": "3650618126257", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-3650618126257", + "liquidityGross": "3650618126257", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-1335662213946", + "liquidityGross": "1335662213946", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "3064991081731777716716694054300618367237478244367204352", + "5": "81129638414606681695789005144064", + "8": "713623846352979940529142984724747572486340608" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3650618126257", + "tickLower": 13860, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1335662213946", + "tickLower": 6930, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "953128e2-bbf7-4eeb-9c23-a8cbfe14e6cd", + "height": 1414, + "time": "2024-05-28T23:42:38.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test03:100", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test03", + "token0_balance": "200000.000001", + "token1_balance": "394788.874196", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "125268435273034278662106613985", + "tick": 9163, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1025564240772", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "539812865689", + "liquidityGross": "539812865689", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6931": { + "initialized": true, + "liquidityNet": "485751375083", + "liquidityGross": "485751375083", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16095": { + "initialized": true, + "liquidityNet": "-539812865689", + "liquidityGross": "539812865689", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17039": { + "initialized": true, + "liquidityNet": "-485751375083", + "liquidityGross": "485751375083", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "27": "524288", + "62": "13479973333575319897333507543509815336818572211270286240551805124608", + "66": "11150372599265311570767859136324180752990208" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "539812865689", + "tickLower": 0, + "tickUpper": 16095, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "485751375083", + "tickLower": 6931, + "tickUpper": 17039, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "be1725ee-9197-4ce7-9205-cac1a4f18448", + "height": 2150, + "time": "2024-05-29T00:44:20.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test03:10000", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test03", + "token0_balance": "300000.000001", + "token1_balance": "397342.241126", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "125268435273034278662106613985", + "tick": 9163, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1431518828224", + "ticks": { + "2200": { + "initialized": true, + "liquidityNet": "546089542724", + "liquidityGross": "546089542724", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "7000": { + "initialized": true, + "liquidityNet": "885429285500", + "liquidityGross": "885429285500", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16000": { + "initialized": true, + "liquidityNet": "-546089542724", + "liquidityGross": "546089542724", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "18000": { + "initialized": true, + "liquidityNet": "-885429285500", + "liquidityGross": "885429285500", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1239148965104994938433570816" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "0", + "tickLower": 7200, + "tickUpper": 18000, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "546089542724", + "tickLower": 2200, + "tickUpper": 16000, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "885429285500", + "tickLower": 7000, + "tickUpper": 18000, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "60643a77-bc1c-459a-8044-e512ae246027", + "height": 242, + "time": "2024-05-28T22:04:23.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test03:500", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test03", + "token0_balance": "210000", + "token1_balance": "400249.519174", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "125268435273034278662106613985", + "tick": 9163, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "688767291139", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "688767291139", + "liquidityGross": "688767291139", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-668721841370", + "liquidityGross": "668721841370", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "40260": { + "initialized": true, + "liquidityNet": "-20045449769", + "liquidityGross": "20045449769", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "8": "713623846352979940529142984724747568191373312", + "15": "98079714615416886934934209737619787751599303819750539264" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "20045449769", + "tickLower": 0, + "tickUpper": 40260, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "668721841370", + "tickLower": 0, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "fd0f2fb2-9dd1-4854-8820-ab0eacccf368", + "height": 1416, + "time": "2024-05-28T23:42:48.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test04:100", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "1100000.000002", + "token1_balance": "7256727.888862", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "148220422202328681379356648616", + "tick": 12528, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "8710012695130", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "7918193359211", + "liquidityGross": "7918193359211", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6932": { + "initialized": true, + "liquidityNet": "791819335919", + "liquidityGross": "791819335919", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17919": { + "initialized": true, + "liquidityNet": "-8710012695130", + "liquidityGross": "8710012695130", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "27": "1048576", + "69": "57896044618658097711785492504343953926634992332820282019728792003956564819968" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "791819335919", + "tickLower": 6932, + "tickUpper": 17919, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "7918193359211", + "tickLower": 0, + "tickUpper": 17919, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "b9095901-26bc-4d1f-a977-d282dbe3dd83", + "height": 1418, + "time": "2024-05-28T23:42:58.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test04:3000", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "300000.000002", + "token1_balance": "1390220.295062", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "148220422202328681379356648616", + "tick": 12528, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "2069672570615", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "789142421925", + "liquidityGross": "789142421925", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "5580": { + "initialized": true, + "liquidityNet": "1280530148690", + "liquidityGross": "1280530148690", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17940": { + "initialized": true, + "liquidityNet": "-789142421925", + "liquidityGross": "789142421925", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19440": { + "initialized": true, + "liquidityNet": "-1280530148690", + "liquidityGross": "1280530148690", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "9903520314283042199192993793", + "1": "295147913975445848064" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "789142421925", + "tickLower": 0, + "tickUpper": 17940, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1280530148690", + "tickLower": 5580, + "tickUpper": 19440, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "39bd301f-fa7a-4f49-bd0e-9742a14517f5", + "height": 249, + "time": "2024-05-28T22:04:58.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test04:500", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "200000", + "token1_balance": "234861.819738", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "148220422202328681379356648616", + "tick": 12528, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1696172926230", + "ticks": { + "10990": { + "initialized": true, + "liquidityNet": "1696172926230", + "liquidityGross": "1696172926230", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16100": { + "initialized": true, + "liquidityNet": "-1143858432077", + "liquidityGross": "1143858432077", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-552314494153", + "liquidityGross": "552314494153", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "4": "37778931862957161709568", + "6": "18889465931478580854784", + "8": "4294967296" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "552314494153", + "tickLower": 10990, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1143858432077", + "tickLower": 10990, + "tickUpper": 16100, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "0da30535-736a-4eb9-a3a4-281003e9daef", + "height": 252, + "time": "2024-05-28T22:05:13.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test05:100", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "200000", + "token1_balance": "1815368.180615", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "168055490493400581012375348341", + "tick": 15040, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "2652533865050", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "1069809237160", + "liquidityGross": "1069809237160", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10986": { + "initialized": true, + "liquidityNet": "1582724627890", + "liquidityGross": "1582724627890", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17918": { + "initialized": true, + "liquidityNet": "-1582724627890", + "liquidityGross": "1582724627890", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19460": { + "initialized": true, + "liquidityNet": "-1069809237160", + "liquidityGross": "1069809237160", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "42": "27606985387162255149739023449108101809804435888681546220650096895197184", + "69": "28948022309329048855892746252171976963317496166410141009864396001978282409984", + "76": "16" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1582724627890", + "tickLower": 10986, + "tickUpper": 17918, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1069809237160", + "tickLower": 0, + "tickUpper": 19460, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "c3e5aa46-9737-435c-b787-f34a012ef092", + "height": 1419, + "time": "2024-05-28T23:43:03.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test05:10000", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "200000.000001", + "token1_balance": "862817.960265", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "168038686624738107201655182823", + "tick": 15038, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1803922504487", + "ticks": { + "8200": { + "initialized": true, + "liquidityNet": "721509875487", + "liquidityGross": "721509875487", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "11000": { + "initialized": true, + "liquidityNet": "1082412629000", + "liquidityGross": "1082412629000", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19400": { + "initialized": true, + "liquidityNet": "-1082412629000", + "liquidityGross": "1082412629000", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "22000": { + "initialized": true, + "liquidityNet": "-721509875487", + "liquidityGross": "721509875487", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1298232670958735471838807212425216" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1082412629000", + "tickLower": 11000, + "tickUpper": 19400, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "721509875487", + "tickLower": 8200, + "tickUpper": 22000, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "517ae716-350a-49de-946f-5e2be6d0d649", + "height": 254, + "time": "2024-05-28T22:05:23.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test05:500", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "70000", + "token1_balance": "444352.351021", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "168047088349031487587651502716", + "tick": 15039, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "678344716012", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "362122074046", + "liquidityGross": "362122074046", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13860": { + "initialized": true, + "liquidityNet": "316222641966", + "liquidityGross": "316222641966", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17920": { + "initialized": true, + "liquidityNet": "-316222641966", + "liquidityGross": "316222641966", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-362122074046", + "liquidityGross": "362122074046", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "5": "81129638414606681695789005144064", + "7": "1", + "8": "713623846352979940529142984724747568191373312" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "316222641966", + "tickLower": 13860, + "tickUpper": 17920, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "362122074046", + "tickLower": 0, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "16873b2f-6a7e-4aa4-b530-19a4ebbb77ce", + "height": 258, + "time": "2024-05-28T22:05:43.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test06:100", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "300000", + "token1_balance": "3556595.831719", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "185803414919609663338769187695", + "tick": 17048, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "3820135099602", + "ticks": { + "6931": { + "initialized": true, + "liquidityNet": "3820135099602", + "liquidityGross": "3820135099602", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20795": { + "initialized": true, + "liquidityNet": "-2745476398818", + "liquidityGross": "2745476398818", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21972": { + "initialized": true, + "liquidityNet": "-1074658700784", + "liquidityGross": "1074658700784", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "524288", + "81": "576460752303423488", + "85": "6582018229284824168619876730229402019930943462534319453394436096" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1074658700784", + "tickLower": 6931, + "tickUpper": 21972, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2745476398818", + "tickLower": 6931, + "tickUpper": 20795, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "f01e9fb7-0ff3-45ec-b58c-2cb0c440b980", + "height": 262, + "time": "2024-05-28T22:06:03.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test06:3000", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "130000", + "token1_balance": "2962793.238727", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "185803414919609663338769187695", + "tick": 17048, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "2320160418641", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "2080536637782", + "liquidityGross": "2080536637782", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10140": { + "initialized": true, + "liquidityNet": "239623780859", + "liquidityGross": "239623780859", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19440": { + "initialized": true, + "liquidityNet": "-2080536637782", + "liquidityGross": "2080536637782", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "24000": { + "initialized": true, + "liquidityNet": "-239623780859", + "liquidityGross": "239623780859", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "748288838313422294120286634350736906063837462003713", + "1": "22300745198530623141536013420553540858806272" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2080536637782", + "tickLower": 0, + "tickUpper": 19440, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "239623780859", + "tickLower": 10140, + "tickUpper": 24000, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "d7d5ce88-3b37-4524-9f4a-27b3673f8457", + "height": 260, + "time": "2024-05-28T22:05:53.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test06:500", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "110000", + "token1_balance": "3405998.390206", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "185803414919609663338769187695", + "tick": 17048, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "5604711294322", + "ticks": { + "10990": { + "initialized": true, + "liquidityNet": "5497206911483", + "liquidityGross": "5497206911483", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13860": { + "initialized": true, + "liquidityNet": "107504382839", + "liquidityGross": "107504382839", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17920": { + "initialized": true, + "liquidityNet": "-5497206911483", + "liquidityGross": "5497206911483", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-107504382839", + "liquidityGross": "107504382839", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "4": "37778931862957161709568", + "5": "81129638414606681695789005144064", + "7": "1", + "8": "713623846352979940529142984724747568191373312" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "107504382839", + "tickLower": 13860, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "5497206911483", + "tickLower": 10990, + "tickUpper": 17920, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "fc57396a-11fa-48ee-a456-c1961dbf591a", + "height": 264, + "time": "2024-05-28T22:06:13.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test07:100", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "200000", + "token1_balance": "2197760.108887", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "201983302084203846042855734064", + "tick": 18718, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "4282600918831", + "ticks": { + "10986": { + "initialized": true, + "liquidityNet": "1697928016019", + "liquidityGross": "1697928016019", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16095": { + "initialized": true, + "liquidityNet": "2584672902812", + "liquidityGross": "2584672902812", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20795": { + "initialized": true, + "liquidityNet": "-2584672902812", + "liquidityGross": "2584672902812", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21972": { + "initialized": true, + "liquidityNet": "-1697928016019", + "liquidityGross": "1697928016019", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "42": "27606985387162255149739023449108101809804435888681546220650096895197184", + "62": "13479973333575319897333507543509815336818572211270286240551805124608", + "81": "576460752303423488", + "85": "6582018229284824168619876730229402019930943462534319453394436096" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2584672902812", + "tickLower": 16095, + "tickUpper": 20795, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1697928016019", + "tickLower": 10986, + "tickUpper": 21972, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "081865d9-580b-4a74-bee3-83f002ff9e96", + "height": 268, + "time": "2024-05-28T22:06:33.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test07:10000", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "200000", + "token1_balance": "1302721.366415", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "201983302084203846042855734064", + "tick": 18718, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1130626515386", + "ticks": { + "11800": { + "initialized": true, + "liquidityNet": "875687746553", + "liquidityGross": "875687746553", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "25600": { + "initialized": true, + "liquidityNet": "-875687746553", + "liquidityGross": "875687746553", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "887200": { + "initialized": true, + "liquidityNet": "-254938768833", + "liquidityGross": "254938768833", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887200": { + "initialized": true, + "liquidityNet": "254938768833", + "liquidityGross": "254938768833", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "340282366920938463463951068184071634944", + "17": "19342813113834066795298816", + "-18": "5986310706507378352962293074805895248510699696029696" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "254938768833", + "tickLower": -887200, + "tickUpper": 887200, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "875687746553", + "tickLower": 11800, + "tickUpper": 25600, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "473de96b-6a95-4748-9f7d-2c158cbae500", + "height": 266, + "time": "2024-05-28T22:06:23.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test02:gno.land/r/demo/test07:500", + "token0_path": "gno.land/r/demo/test02", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "110000", + "token1_balance": "1877271.946038", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "201983302084203846042855734064", + "tick": 18718, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "2014593557194", + "ticks": { + "6930": { + "initialized": true, + "liquidityNet": "1314566955365", + "liquidityGross": "1314566955365", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13860": { + "initialized": true, + "liquidityNet": "700026601829", + "liquidityGross": "700026601829", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19460": { + "initialized": true, + "liquidityNet": "-700026601829", + "liquidityGross": "700026601829", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23030": { + "initialized": true, + "liquidityNet": "-1314566955365", + "liquidityGross": "1314566955365", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "3064991081731777716716694054300618367237478244367204352", + "5": "81129638414606681695789005144064", + "7": "22835963083295358096932575511191922182123945984", + "8": "57896044618658097711785492504343953926634992332820282019728792003956564819968" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1314566955365", + "tickLower": 6930, + "tickUpper": 23030, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "700026601829", + "tickLower": 13860, + "tickUpper": 19460, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "d67e4d7e-96b0-420f-ad3e-4e0a077858f8", + "height": 270, + "time": "2024-05-28T22:06:43.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test04:100", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "110000", + "token1_balance": "1325035.53584", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "216974850665551570981289654314", + "tick": 20150, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "3458033555050", + "ticks": { + "6932": { + "initialized": true, + "liquidityNet": "314366686822", + "liquidityGross": "314366686822", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17919": { + "initialized": true, + "liquidityNet": "3143666868228", + "liquidityGross": "3143666868228", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21973": { + "initialized": true, + "liquidityNet": "-3458033555050", + "liquidityGross": "3458033555050", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "1048576", + "69": "57896044618658097711785492504343953926634992332820282019728792003956564819968", + "85": "13164036458569648337239753460458804039861886925068638906788872192" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3143666868228", + "tickLower": 17919, + "tickUpper": 21973, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "314366686822", + "tickLower": 6932, + "tickUpper": 21973, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "1a6ab617-9163-4c99-9a20-699b57579e15", + "height": 1557, + "time": "2024-05-28T23:54:37.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test04:3000", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "600000.000001", + "token1_balance": "4518138.179282", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "216974850665551570981289654314", + "tick": 20150, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "4961307923823", + "ticks": { + "13200": { + "initialized": true, + "liquidityNet": "4687447160455", + "liquidityGross": "4687447160455", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "27060": { + "initialized": true, + "liquidityNet": "-4687447160455", + "liquidityGross": "4687447160455", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "887220": { + "initialized": true, + "liquidityNet": "-273860763368", + "liquidityGross": "273860763368", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887220": { + "initialized": true, + "liquidityNet": "273860763368", + "liquidityGross": "273860763368", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1684996666696914987166688442938726917102321526408785780068975640576", + "1": "50216813883093446110686315385661331328818843555712276103168", + "57": "50216813883093446110686315385661331328818843555712276103168", + "-58": "2305843009213693952" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "273860763368", + "tickLower": -887220, + "tickUpper": 887220, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "4687447160455", + "tickLower": 13200, + "tickUpper": 27060, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "74d6c08e-50ee-4149-b43a-09d29c497aae", + "height": 273, + "time": "2024-05-28T22:06:58.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test04:500", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test04", + "token0_balance": "30000", + "token1_balance": "429942.823203", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "216974850665551570981289654314", + "tick": 20150, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "856457838176", + "ticks": { + "16100": { + "initialized": true, + "liquidityNet": "856457838176", + "liquidityGross": "856457838176", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-856457838176", + "liquidityGross": "856457838176", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "1162202700706", + "liquidityGross": "1162202700706", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23030": { + "initialized": true, + "liquidityNet": "-1162202700706", + "liquidityGross": "1162202700706", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "6": "18889465931478580854784", + "8": "57896044618658097711785492504344667550481345312760811162713516751529051160576" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1162202700706", + "tickLower": 21970, + "tickUpper": 23030, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "856457838176", + "tickLower": 16100, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "3e11d991-3646-4160-81a5-e9adfa8a9e53", + "height": 276, + "time": "2024-05-28T22:07:13.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test05:100", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "210000", + "token1_balance": "253575.533768", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "112046559425783515914356180039", + "tick": 6932, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "612166512982", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "612166512982", + "liquidityGross": "612166512982", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10987": { + "initialized": true, + "liquidityNet": "-77065616555", + "liquidityGross": "77065616555", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21973": { + "initialized": true, + "liquidityNet": "-535100896427", + "liquidityGross": "535100896427", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "42": "55213970774324510299478046898216203619608871777363092441300193790394368", + "85": "13164036458569648337239753460458804039861886925068638906788872192" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "77065616555", + "tickLower": 0, + "tickUpper": 10987, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "535100896427", + "tickLower": 0, + "tickUpper": 21973, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "1e0f4eb7-76d6-40b7-bf08-fc7b6e6170da", + "height": 280, + "time": "2024-05-28T22:07:34.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test05:10000", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "101000", + "token1_balance": "204746.232212", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "112046559425783515914356180039", + "tick": 6932, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "494285805719", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "494285805719", + "liquidityGross": "494285805719", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "11000": { + "initialized": true, + "liquidityNet": "-7684346445", + "liquidityGross": "7684346445", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13800": { + "initialized": true, + "liquidityNet": "-486601459274", + "liquidityGross": "486601459274", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "590331839155724615681" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "7684346445", + "tickLower": 0, + "tickUpper": 11000, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "486601459274", + "tickLower": 0, + "tickUpper": 13800, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "0150ed1c-7541-4142-8512-36b4df66e12c", + "height": 278, + "time": "2024-05-28T22:07:24.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test05:500", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "110000", + "token1_balance": "310885.212226", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "112046559425783515914356180039", + "tick": 6932, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "35620306296991", + "ticks": { + "6920": { + "initialized": true, + "liquidityNet": "35364499474091", + "liquidityGross": "35364499474091", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6940": { + "initialized": true, + "liquidityNet": "-35364499474091", + "liquidityGross": "35364499474091", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23030": { + "initialized": true, + "liquidityNet": "-255806822900", + "liquidityGross": "255806822900", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-23030": { + "initialized": true, + "liquidityNet": "255806822900", + "liquidityGross": "255806822900", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "7662477704329444291791735135751545918093695610918010880", + "8": "57896044618658097711785492504343953926634992332820282019728792003956564819968", + "-9": "2" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "255806822900", + "tickLower": -23030, + "tickUpper": 23030, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "35364499474091", + "tickLower": 6920, + "tickUpper": 6940, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "c63c0563-4e09-47f8-ab31-de4b0bb430c8", + "height": 282, + "time": "2024-05-28T22:07:44.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test06:100", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "200000", + "token1_balance": "1483754.181426", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "177166786517138269218369076073", + "tick": 16096, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "3634690381049", + "ticks": { + "6932": { + "initialized": true, + "liquidityNet": "1067787556984", + "liquidityGross": "1067787556984", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13864": { + "initialized": true, + "liquidityNet": "2566902824065", + "liquidityGross": "2566902824065", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17919": { + "initialized": true, + "liquidityNet": "-2566902824065", + "liquidityGross": "2566902824065", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20796": { + "initialized": true, + "liquidityNet": "-1067787556984", + "liquidityGross": "1067787556984", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "1048576", + "54": "1099511627776", + "69": "57896044618658097711785492504343953926634992332820282019728792003956564819968", + "81": "1152921504606846976" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2566902824065", + "tickLower": 13864, + "tickUpper": 17919, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1067787556984", + "tickLower": 6932, + "tickUpper": 20796, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "500dfb09-da02-41d9-accc-0bb727d7e017", + "height": 286, + "time": "2024-05-28T22:08:04.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test06:3000", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "200000", + "token1_balance": "600527.349889", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "177166786517138269218369076073", + "tick": 16096, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "2538982397905", + "ticks": { + "13860": { + "initialized": true, + "liquidityNet": "2538982397905", + "liquidityGross": "2538982397905", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17940": { + "initialized": true, + "liquidityNet": "-2538982397905", + "liquidityGross": "2538982397905", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20820": { + "initialized": true, + "liquidityNet": "2695602900952", + "liquidityGross": "2695602900952", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23040": { + "initialized": true, + "liquidityNet": "-2695602900952", + "liquidityGross": "2695602900952", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "3450873173395281893717377931138512726225554486085193277581262111899648", + "1": "340282366923414343541945376777659482112" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2695602900952", + "tickLower": 20820, + "tickUpper": 23040, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2538982397905", + "tickLower": 13860, + "tickUpper": 17940, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "21d80fbc-5d62-4ce3-9fb3-a324f18c7335", + "height": 284, + "time": "2024-05-28T22:07:54.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test06:500", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "104000", + "token1_balance": "1094769.887439", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "177166786517138269218369076073", + "tick": 16096, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "13661850641439", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "878686193995", + "liquidityGross": "878686193995", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16090": { + "initialized": true, + "liquidityNet": "12783164447444", + "liquidityGross": "12783164447444", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16110": { + "initialized": true, + "liquidityNet": "-12783164447444", + "liquidityGross": "12783164447444", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-878686193995", + "liquidityGross": "878686193995", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "6": "47223664828696452136960", + "8": "713623846352979940529142984724747568191373312" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "878686193995", + "tickLower": 0, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "12783164447444", + "tickLower": 16090, + "tickUpper": 16110, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "9b3c1f2b-9d34-4ded-8527-ce99a9f88065", + "height": 288, + "time": "2024-05-28T22:08:14.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test07:100", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "100100", + "token1_balance": "574455.706523", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "143919192289106366690228709881", + "tick": 11939, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1106787657292", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "703006511387", + "liquidityGross": "703006511387", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "11927": { + "initialized": true, + "liquidityNet": "403781145905", + "liquidityGross": "403781145905", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "11948": { + "initialized": true, + "liquidityNet": "-403781145905", + "liquidityGross": "403781145905", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17918": { + "initialized": true, + "liquidityNet": "-703006511387", + "liquidityGross": "703006511387", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "46": "5986313561002763764882055191377834147500972461522944", + "69": "28948022309329048855892746252171976963317496166410141009864396001978282409984" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "703006511387", + "tickLower": 0, + "tickUpper": 17918, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "403781145905", + "tickLower": 11927, + "tickUpper": 11948, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "b74c7148-21a4-4101-926f-71fcd178508e", + "height": 293, + "time": "2024-05-28T22:08:39.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test07:10000", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "100500", + "token1_balance": "59553.43453", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "143919192289106366690228709881", + "tick": 11939, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "697974926041", + "ticks": { + "5000": { + "initialized": true, + "liquidityNet": "3127769979", + "liquidityGross": "3127769979", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "11000": { + "initialized": true, + "liquidityNet": "694847156062", + "liquidityGross": "694847156062", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "18000": { + "initialized": true, + "liquidityNet": "-694847156062", + "liquidityGross": "694847156062", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "18800": { + "initialized": true, + "liquidityNet": "-3127769979", + "liquidityGross": "3127769979", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "21044980667887493470337630208" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "694847156062", + "tickLower": 11000, + "tickUpper": 18000, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "3127769979", + "tickLower": 5000, + "tickUpper": 18800, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "caff2653-903d-4a1e-9331-8d4491c345dd", + "height": 1425, + "time": "2024-05-28T23:43:34.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test03:gno.land/r/demo/test07:500", + "token0_path": "gno.land/r/demo/test03", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "20000.000001", + "token1_balance": "255506.750445", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "143919192289106366690228709881", + "tick": 11939, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "295072405121", + "ticks": { + "6930": { + "initialized": true, + "liquidityNet": "198359274067", + "liquidityGross": "198359274067", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13860": { + "initialized": true, + "liquidityNet": "-198359274067", + "liquidityGross": "198359274067", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16100": { + "initialized": true, + "liquidityNet": "-96713131054", + "liquidityGross": "96713131054", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887270": { + "initialized": true, + "liquidityNet": "96713131054", + "liquidityGross": "96713131054", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "3064991081731777716716694054300618367237478244367204352", + "5": "81129638414606681695789005144064", + "6": "18889465931478580854784", + "-347": "40564819207303340847894502572032" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "198359274067", + "tickLower": 6930, + "tickUpper": 13860, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "96713131054", + "tickLower": -887270, + "tickUpper": 16100, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "e6f40772-4c3a-4d2b-9ac5-233280b7a2ce", + "height": 294, + "time": "2024-05-28T22:08:44.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test05:100", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "27000", + "token1_balance": "495773.790776", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "360468299012", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "333766943532", + "liquidityGross": "333766943532", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "13863": { + "initialized": true, + "liquidityNet": "26701355480", + "liquidityGross": "26701355480", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21972": { + "initialized": true, + "liquidityNet": "-360468299012", + "liquidityGross": "360468299012", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "54": "549755813888", + "85": "6582018229284824168619876730229402019930943462534319453394436096" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "333766943532", + "tickLower": 0, + "tickUpper": 21972, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "26701355480", + "tickLower": 13863, + "tickUpper": 21972, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "73433381-bd5f-4eda-a687-3a020a134594", + "height": 1421, + "time": "2024-05-28T23:43:13.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test05:3000", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "89167.983349", + "token1_balance": "549433.055734", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1031998740465", + "ticks": { + "10980": { + "initialized": true, + "liquidityNet": "651211360675", + "liquidityGross": "651211360675", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16080": { + "initialized": true, + "liquidityNet": "380787379790", + "liquidityGross": "380787379790", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19440": { + "initialized": true, + "liquidityNet": "-380787379790", + "liquidityGross": "380787379790", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "24840": { + "initialized": true, + "liquidityNet": "-651211360675", + "liquidityGross": "651211360675", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "12259964326927110866866776217202473468949912977468817408", + "1": "365375409332725729550921208474218660093335965696" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "380787379790", + "tickLower": 16080, + "tickUpper": 19440, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "651211360675", + "tickLower": 10980, + "tickUpper": 24840, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "52583250-130a-423d-9546-942897dca60e", + "height": 296, + "time": "2024-05-28T22:08:54.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test05:500", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test05", + "token0_balance": "10100", + "token1_balance": "56967.730926", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "39303549713", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "39303549713", + "liquidityGross": "39303549713", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-1825309062", + "liquidityGross": "1825309062", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "39120": { + "initialized": true, + "liquidityNet": "-37478240651", + "liquidityGross": "37478240651", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "8": "4294967296", + "15": "4722366482869645213696" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1825309062", + "tickLower": 0, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "37478240651", + "tickLower": 0, + "tickUpper": 39120, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "382270de-9794-4519-846a-5195975241fe", + "height": 300, + "time": "2024-05-28T22:09:14.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test06:100", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "11000", + "token1_balance": "214090.291257", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "209617234798521195396786051541", + "tick": 19460, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "246664491921", + "ticks": { + "10986": { + "initialized": true, + "liquidityNet": "224248063949", + "liquidityGross": "224248063949", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "16095": { + "initialized": true, + "liquidityNet": "22416427972", + "liquidityGross": "22416427972", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21971": { + "initialized": true, + "liquidityNet": "-224248063949", + "liquidityGross": "224248063949", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21972": { + "initialized": true, + "liquidityNet": "-22416427972", + "liquidityGross": "22416427972", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "42": "27606985387162255149739023449108101809804435888681546220650096895197184", + "62": "13479973333575319897333507543509815336818572211270286240551805124608", + "85": "9873027343927236252929815095344103029896415193801479180091654144" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "224248063949", + "tickLower": 10986, + "tickUpper": 21971, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "22416427972", + "tickLower": 16095, + "tickUpper": 21972, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "75c3b889-46f8-491b-9769-c416d187f914", + "height": 1438, + "time": "2024-05-28T23:44:39.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test06:10000", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "56000.000001", + "token1_balance": "396160.959752", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "209617234798521195396786051541", + "tick": 19460, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "512642206600", + "ticks": { + "11000": { + "initialized": true, + "liquidityNet": "16310312376", + "liquidityGross": "16310312376", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "12600": { + "initialized": true, + "liquidityNet": "496331894224", + "liquidityGross": "496331894224", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23000": { + "initialized": true, + "liquidityNet": "-16310312376", + "liquidityGross": "16310312376", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "26400": { + "initialized": true, + "liquidityNet": "-496331894224", + "liquidityGross": "496331894224", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "5444559409109883694044281363712798883840" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "16310312376", + "tickLower": 11000, + "tickUpper": 23000, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "496331894224", + "tickLower": 12600, + "tickUpper": 26400, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "ce2b5cce-e8dd-417a-8373-8c292eb3caa3", + "height": 302, + "time": "2024-05-28T22:09:24.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test06:500", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "16000", + "token1_balance": "538706.550148", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "209617234798521195396786051541", + "tick": 19460, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "542882088367", + "ticks": { + "6930": { + "initialized": true, + "liquidityNet": "134599149006", + "liquidityGross": "134599149006", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "10990": { + "initialized": true, + "liquidityNet": "408282939361", + "liquidityGross": "408282939361", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "20800": { + "initialized": true, + "liquidityNet": "-408282939361", + "liquidityGross": "408282939361", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-134599149006", + "liquidityGross": "134599149006", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "2": "3064991081731777716716694054300618367237478244367204352", + "4": "37778931862957161709568", + "8": "713623846352979940529142984724747572486340608" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "134599149006", + "tickLower": 6930, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "408282939361", + "tickLower": 10990, + "tickUpper": 20800, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "3b88b723-9a3b-4e14-8b66-29db5e0ec836", + "height": 306, + "time": "2024-05-28T22:09:44.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test07:100", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "100100", + "token1_balance": "642989.002177", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "987576683080", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "443109284038", + "liquidityGross": "443109284038", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17907": { + "initialized": true, + "liquidityNet": "544467399042", + "liquidityGross": "544467399042", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17927": { + "initialized": true, + "liquidityNet": "-544467399042", + "liquidityGross": "544467399042", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "34013": { + "initialized": true, + "liquidityNet": "-443109284038", + "liquidityGross": "443109284038", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "69": "14134776518227074636666380005943348126619871175004951664972849610340958208", + "70": "128", + "132": "3369993333393829974333376885877453834204643052817571560137951281152" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "443109284038", + "tickLower": 0, + "tickUpper": 34013, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "544467399042", + "tickLower": 17907, + "tickUpper": 17927, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "cdaac55c-db9c-439b-87c4-db7ffda33f2b", + "height": 310, + "time": "2024-05-28T22:10:04.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test07:3000", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "521111", + "token1_balance": "3362908.011011", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "4420294995030", + "ticks": { + "10980": { + "initialized": true, + "liquidityNet": "4310749808901", + "liquidityGross": "4310749808901", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "22980": { + "initialized": true, + "liquidityNet": "-109545186129", + "liquidityGross": "109545186129", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "24780": { + "initialized": true, + "liquidityNet": "-4310749808901", + "liquidityGross": "4310749808901", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-115140": { + "initialized": true, + "liquidityNet": "109545186129", + "liquidityGross": "109545186129", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "12259964326927110866866776217202473468949912977468817408", + "1": "182687704836504048235929835821222681172875673600", + "-8": "680564733841876926926749214863536422912" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "109545186129", + "tickLower": -115140, + "tickUpper": 22980, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "4310749808901", + "tickLower": 10980, + "tickUpper": 24780, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "dc5c9777-3908-47cf-aacc-b1cb55f2052f", + "height": 308, + "time": "2024-05-28T22:09:54.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test04:gno.land/r/demo/test07:500", + "token0_path": "gno.land/r/demo/test04", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "155555", + "token1_balance": "1291104.53641", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "194063811628978436763827156157", + "tick": 17918, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1471740279028", + "ticks": { + "10990": { + "initialized": true, + "liquidityNet": "1335662213946", + "liquidityGross": "1335662213946", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "-1335662213946", + "liquidityGross": "1335662213946", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "887270": { + "initialized": true, + "liquidityNet": "-136078065082", + "liquidityGross": "136078065082", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887270": { + "initialized": true, + "liquidityNet": "136078065082", + "liquidityGross": "136078065082", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "4": "37778931862957161709568", + "8": "713623846352979940529142984724747568191373312", + "346": "2854495385411919762116571938898990272765493248", + "-347": "40564819207303340847894502572032" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "136078065082", + "tickLower": -887270, + "tickUpper": 887270, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1335662213946", + "tickLower": 10990, + "tickUpper": 21970, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "898dff0d-b622-49d5-aebe-5529314fd376", + "height": 312, + "time": "2024-05-28T22:10:14.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test05:gno.land/r/demo/test06:100", + "token0_path": "gno.land/r/demo/test05", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "50002", + "token1_balance": "961051.639819", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "185812704858112987160112734866", + "tick": 17049, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1041583707619", + "ticks": { + "6932": { + "initialized": true, + "liquidityNet": "1032199749047", + "liquidityGross": "1032199749047", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17038": { + "initialized": true, + "liquidityNet": "9383958572", + "liquidityGross": "9383958572", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "17059": { + "initialized": true, + "liquidityNet": "-9383958572", + "liquidityGross": "9383958572", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19461": { + "initialized": true, + "liquidityNet": "-1032199749047", + "liquidityGross": "1032199749047", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "1048576", + "66": "11692018673833522978285264045659832319337836838912", + "76": "32" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1032199749047", + "tickLower": 6932, + "tickUpper": 19461, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "9383958572", + "tickLower": 17038, + "tickUpper": 17059, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "f972ae7a-1bd4-45f3-a681-2706e553c5b5", + "height": 1446, + "time": "2024-05-28T23:45:19.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test05:gno.land/r/demo/test06:10000", + "token0_path": "gno.land/r/demo/test05", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "95555.000001", + "token1_balance": "522579.964326", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "185812704858112987160112734866", + "tick": 17049, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "474925019482", + "ticks": { + "10200": { + "initialized": true, + "liquidityNet": "355055103830", + "liquidityGross": "355055103830", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "24000": { + "initialized": true, + "liquidityNet": "-355055103830", + "liquidityGross": "355055103830", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "887200": { + "initialized": true, + "liquidityNet": "-119869915652", + "liquidityGross": "119869915652", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887200": { + "initialized": true, + "liquidityNet": "119869915652", + "liquidityGross": "119869915652", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1329227995784915872906058860094029824", + "17": "19342813113834066795298816", + "-18": "5986310706507378352962293074805895248510699696029696" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "119869915652", + "tickLower": -887200, + "tickUpper": 887200, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "355055103830", + "tickLower": 10200, + "tickUpper": 24000, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "01304d00-a3ad-466f-9896-15e2aa4b2134", + "height": 314, + "time": "2024-05-28T22:10:25.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test05:gno.land/r/demo/test06:500", + "token0_path": "gno.land/r/demo/test05", + "token1_path": "gno.land/r/demo/test06", + "token0_balance": "10000", + "token1_balance": "10", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "185812704858112987160112734866", + "tick": 17049, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "0", + "ticks": { + "0": { + "initialized": true, + "liquidityNet": "24149631", + "liquidityGross": "24149631", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "6930": { + "initialized": true, + "liquidityNet": "-24149631", + "liquidityGross": "24149631", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "21970": { + "initialized": true, + "liquidityNet": "581101350353", + "liquidityGross": "581101350353", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "23030": { + "initialized": true, + "liquidityNet": "-581101350353", + "liquidityGross": "581101350353", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "1", + "2": "3064991081731777716716694054300618367237478244367204352", + "8": "57896044618658097711785492504344667550481345312760811162713516751524756193280" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "24149631", + "tickLower": 0, + "tickUpper": 6930, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "581101350353", + "tickLower": 21970, + "tickUpper": 23030, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "6f9a5593-6bfb-4901-8692-d1160996e435", + "height": 318, + "time": "2024-05-28T22:10:45.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test05:gno.land/r/demo/test07:100", + "token0_path": "gno.land/r/demo/test05", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "10001", + "token1_balance": "65726.110737", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "203534321882434658179006309724", + "tick": 18871, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "31610428429", + "ticks": { + "18859": { + "initialized": true, + "liquidityNet": "5710378946", + "liquidityGross": "5710378946", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "18880": { + "initialized": true, + "liquidityNet": "-5710378946", + "liquidityGross": "5710378946", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "115135": { + "initialized": true, + "liquidityNet": "-25900049483", + "liquidityGross": "25900049483", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-69082": { + "initialized": true, + "liquidityNet": "25900049483", + "liquidityGross": "25900049483", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "73": "6277104728542034017524965904354203819049979699813882527744", + "449": "3138550867693340381917894711603833208051177722232017256448", + "-270": "274877906944" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "25900049483", + "tickLower": -69082, + "tickUpper": 115135, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "5710378946", + "tickLower": 18859, + "tickUpper": 18880, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "ef774162-c115-4f69-b64a-3ba84297adc5", + "height": 322, + "time": "2024-05-28T22:11:05.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test05:gno.land/r/demo/test07:3000", + "token0_path": "gno.land/r/demo/test05", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "1123", + "token1_balance": "9934.094213", + "fee": 3000, + "tick_spacing": 60, + "max_liquidity_per_tick": "11505743598341114571880798222544994", + "sqrt_price_x96": "203534321882434658179006309724", + "tick": 18871, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "9090548103", + "ticks": { + "8460": { + "initialized": true, + "liquidityNet": "8773977825", + "liquidityGross": "8773977825", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "25800": { + "initialized": true, + "liquidityNet": "-8773977825", + "liquidityGross": "8773977825", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "144660": { + "initialized": true, + "liquidityNet": "-316570278", + "liquidityGross": "316570278", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-50220": { + "initialized": true, + "liquidityNet": "316570278", + "liquidityGross": "316570278", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "0": "2787593149816327892691964784081045188247552", + "1": "23945242826029513411849172299223580994042798784118784", + "9": "162259276829213363391578010288128", + "-4": "196159429230833773869868419475239575503198607639501078528" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "316570278", + "tickLower": -50220, + "tickUpper": 144660, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "8773977825", + "tickLower": 8460, + "tickUpper": 25800, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "12b7dd2d-2f83-40b8-a416-fa709bc597fc", + "height": 320, + "time": "2024-05-28T22:10:55.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test05:gno.land/r/demo/test07:500", + "token0_path": "gno.land/r/demo/test05", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "3222", + "token1_balance": "70279.133039", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "203534321882434658179006309724", + "tick": 18871, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "199339100667", + "ticks": { + "16100": { + "initialized": true, + "liquidityNet": "196705957803", + "liquidityGross": "196705957803", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "19460": { + "initialized": true, + "liquidityNet": "-196705957803", + "liquidityGross": "196705957803", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "93160": { + "initialized": true, + "liquidityNet": "-2633142864", + "liquidityGross": "2633142864", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-6930": { + "initialized": true, + "liquidityNet": "2633142864", + "liquidityGross": "2633142864", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "6": "18889465931478580854784", + "7": "22835963083295358096932575511191922182123945984", + "36": "1267650600228229401496703205376", + "-3": "37778931862957161709568" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "2633142864", + "tickLower": -6930, + "tickUpper": 93160, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "196705957803", + "tickLower": 16100, + "tickUpper": 19460, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "47206ae5-2910-459c-896a-4754ae862f05", + "height": 324, + "time": "2024-05-28T22:11:15.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test06:gno.land/r/demo/test07:100", + "token0_path": "gno.land/r/demo/test06", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "50999.999995", + "token1_balance": "11572.055391", + "fee": 100, + "tick_spacing": 1, + "max_liquidity_per_tick": "191757530477355301479181766273477", + "sqrt_price_x96": "35428694210863812305972703520", + "tick": -16097, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "927312514193", + "ticks": { + "6931": { + "initialized": true, + "liquidityNet": "-32698218047", + "liquidityGross": "32698218047", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-16087": { + "initialized": true, + "liquidityNet": "-894614296146", + "liquidityGross": "894614296146", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-16108": { + "initialized": true, + "liquidityNet": "894614296146", + "liquidityGross": "894614296146", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-46055": { + "initialized": true, + "liquidityNet": "32698218047", + "liquidityGross": "32698218047", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "27": "524288", + "-63": "2199024304128", + "-180": "33554432" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "32698218047", + "tickLower": -46055, + "tickUpper": 6931, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "894614296146", + "tickLower": -16108, + "tickUpper": -16087, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "99aa93dd-7aaf-4be4-abc8-68927a1cc724", + "height": 328, + "time": "2024-05-28T22:11:35.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test06:gno.land/r/demo/test07:10000", + "token0_path": "gno.land/r/demo/test06", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "0.124445", + "token1_balance": "0.025227", + "fee": 10000, + "tick_spacing": 200, + "max_liquidity_per_tick": "38350317471085141830651933667504588", + "sqrt_price_x96": "35428694210863812305972703520", + "tick": -16097, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "56516", + "ticks": { + "887200": { + "initialized": true, + "liquidityNet": "-55202", + "liquidityGross": "55202", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-7800": { + "initialized": true, + "liquidityNet": "-1314", + "liquidityGross": "1314", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-67200": { + "initialized": true, + "liquidityNet": "1314", + "liquidityGross": "1314", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-887200": { + "initialized": true, + "liquidityNet": "55202", + "liquidityGross": "55202", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "17": "19342813113834066795298816", + "-1": "210624583337114373395836055367340864637790190801098222508621955072", + "-2": "95780971304118053647396689196894323976171195136475136", + "-18": "5986310706507378352962293074805895248510699696029696" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1314", + "tickLower": -67200, + "tickUpper": -7800, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "55202", + "tickLower": -887200, + "tickUpper": 887200, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + }, + { + "id": "2f59a2ad-1106-48df-8154-b60356cc1b1b", + "height": 326, + "time": "2024-05-28T22:11:25.000Z", + "date": "2024-05-29", + "pool_path": "gno.land/r/demo/test06:gno.land/r/demo/test07:500", + "token0_path": "gno.land/r/demo/test06", + "token1_path": "gno.land/r/demo/test07", + "token0_balance": "51110.999991", + "token1_balance": "6799.064309", + "fee": 500, + "tick_spacing": 10, + "max_liquidity_per_tick": "1917569901783203986719870431555990", + "sqrt_price_x96": "35428694210863812305972703520", + "tick": -16097, + "fee_protocol": 0, + "unlocked": 1, + "fee_growth_global0_x128": "0", + "fee_growth_global1_x128": "0", + "protocol_fee_token0": "0", + "protocol_fee_token1": "0", + "liquidity": "1485944850883", + "ticks": { + "-7850": { + "initialized": true, + "liquidityNet": "-66170632068", + "liquidityGross": "66170632068", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-16090": { + "initialized": true, + "liquidityNet": "-1419774218815", + "liquidityGross": "1419774218815", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-16110": { + "initialized": true, + "liquidityNet": "1419774218815", + "liquidityGross": "1419774218815", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + }, + "-20960": { + "initialized": true, + "liquidityNet": "66170632068", + "liquidityGross": "66170632068", + "secondsOutside": 0, + "feeGrowthOutside0X128": "0", + "feeGrowthOutside1X128": "0", + "tickCumulativeOutside": 0, + "secondsPerLiquidityOutsideX": "0" + } + }, + "tick_bitmaps": { + "-4": "883423532389192164791648750371459257913741948437809479060803100646309888", + "-7": "15324955408658888583583470271503091836187391221836021760", + "-9": "411376139330301510538742295639337626245683966408394965837152256" + }, + "positions": [ + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "66170632068", + "tickLower": -20960, + "tickUpper": -7850, + "token0Owed": "0", + "token1Owed": "0" + }, + { + "owner": "g10wwa53xgu4397kvzz7akxar9370zjdpwux5th9", + "liquidity": "1419774218815", + "tickLower": -16110, + "tickUpper": -16090, + "token0Owed": "0", + "token1Owed": "0" + } + ], + "tvl_usd": "0" + } +] diff --git a/database/mocks/tokens.json b/database/mocks/tokens.json new file mode 100644 index 0000000..43eca62 --- /dev/null +++ b/database/mocks/tokens.json @@ -0,0 +1,242 @@ +[ + { + "id": "10462bc2-29ff-4ae9-8e68-b66324d532ef", + "pkg_name": "baz", + "pkg_path": "gno.land/r/demo/baz", + "pkg_addr": "g1kqvad28j548dd9pz6wkzmy75mysr5np3cgvupj", + "published_at": "2024-05-28T21:46:38.000Z", + "published_height": 30, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Baz", + "token_symbol": "BAZ", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "1940cbe1-9b1d-44d2-896e-a91c3c1e1058", + "pkg_name": "obl", + "pkg_path": "gno.land/r/demo/obl", + "pkg_addr": "g1padpj27sequxmy0zxznamgtslh9k2e4alxuw8a", + "published_at": "2024-05-28T21:46:48.000Z", + "published_height": 32, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Obl", + "token_symbol": "OBL", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "2010c6f1-a637-4dff-8d5a-69882402a464", + "pkg_name": "qux", + "pkg_path": "gno.land/r/demo/qux", + "pkg_addr": "g1dhzu4av0dfzr05u5m6hlm0utfttde8aghfhfdq", + "published_at": "2024-05-28T21:46:43.000Z", + "published_height": 31, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Qux", + "token_symbol": "QUX", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "28801c25-eb30-46b4-b9f0-67dfddf7086b", + "pkg_name": "gns", + "pkg_path": "gno.land/r/gnoswap/gns", + "pkg_addr": "g1zs77uvf8mxzq5k6lu2g8l8fzm6fvf79zkp6cgg", + "published_at": "2024-05-28T21:45:47.000Z", + "published_height": 20, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Gnoswap", + "token_symbol": "GNS", + "token_decimals": 6, + "token_holders": 2, + "total_supply": 1000000000000000, + "register": 0 + }, + { + "id": "34463890-38e2-4dbe-af61-2e7c47dc5ced", + "pkg_name": "test01", + "pkg_path": "gno.land/r/demo/test01", + "pkg_addr": "g109hgmx0pcl3duv09rfspnj07cw8jt85vp26xtj", + "published_at": "2024-05-28T21:46:53.000Z", + "published_height": 33, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test01", + "token_symbol": "TEST01", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "49119a9d-9017-422f-8c7f-c3a785823d1d", + "pkg_name": "test05", + "pkg_path": "gno.land/r/demo/test05", + "pkg_addr": "g1h8jjywc9gzlm7xskqahv0ae9c9cjw9p3jjp590", + "published_at": "2024-05-28T21:47:13.000Z", + "published_height": 37, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test05", + "token_symbol": "TEST05", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "57e7a02b-58b4-496f-b902-56762bb731fe", + "pkg_name": "usdc", + "pkg_path": "gno.land/r/demo/usdc", + "pkg_addr": "g1ry759dakjfzrtukk0a2lavp9drryt7t3w2vnux", + "published_at": "2024-05-28T21:45:52.000Z", + "published_height": 21, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Usd Coin", + "token_symbol": "USDC", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "778d8e76-07f0-4a6f-9750-9b58a537ee5a", + "pkg_name": "test02", + "pkg_path": "gno.land/r/demo/test02", + "pkg_addr": "g1wcmm78wysvlkj6vtx7r2n5rxqjmfe7l09ch8j5", + "published_at": "2024-05-28T21:46:58.000Z", + "published_height": 34, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test02", + "token_symbol": "TEST02", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "8b61a8ee-bb22-487a-a6ff-b065538d95b1", + "pkg_name": "test06", + "pkg_path": "gno.land/r/demo/test06", + "pkg_addr": "g12gd44p25383gngncq4kmm89p8dwhgg5xymz2nu", + "published_at": "2024-05-28T21:47:18.000Z", + "published_height": 38, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test06", + "token_symbol": "TEST06", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "ac7a9451-a341-47ce-9585-a4e3b8992e98", + "pkg_name": "bar", + "pkg_path": "gno.land/r/demo/bar", + "pkg_addr": "g1ee4v7q5gxnfh7fgdu0v5r7ta3n9krxxg7rfgje", + "published_at": "2024-05-28T21:46:33.000Z", + "published_height": 29, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Bar", + "token_symbol": "BAR", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "af99396a-b093-4a62-84c9-17d129c94e8c", + "pkg_name": "test04", + "pkg_path": "gno.land/r/demo/test04", + "pkg_addr": "g19d6jleqxtmmxmws9cud5c5tcf8deyeyyu0tqfc", + "published_at": "2024-05-28T21:47:08.000Z", + "published_height": 36, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test04", + "token_symbol": "TEST04", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "be97b9ae-160f-47fc-8e6a-fa55101c54ac", + "pkg_name": "test03", + "pkg_path": "gno.land/r/demo/test03", + "pkg_addr": "g12nygvef063dz8f3uqj4h0zwy5j0qe06q7emx86", + "published_at": "2024-05-28T21:47:03.000Z", + "published_height": 35, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test03", + "token_symbol": "TEST03", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "c54f2bb1-3ae4-4bde-afbf-31f0666e66fa", + "pkg_name": "test07", + "pkg_path": "gno.land/r/demo/test07", + "pkg_addr": "g1rhmk720jp9azclc7grf50p8nhqyx7sehe970yy", + "published_at": "2024-05-28T21:47:23.000Z", + "published_height": 39, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Test07", + "token_symbol": "TEST07", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "d6c938f5-c4d6-4c66-86f0-4cb873cd2e3f", + "pkg_name": "foo", + "pkg_path": "gno.land/r/demo/foo", + "pkg_addr": "g1m5920e2mxfawvp8tljyga94s2jtpj69rxf8y4h", + "published_at": "2024-05-28T21:46:28.000Z", + "published_height": 28, + "publisher": "g13f63ua8uhmuf9mgc0x8zfz04yrsaqh7j78vcgq", + "token_name": "Foo", + "token_symbol": "FOO", + "token_decimals": 6, + "token_holders": 1, + "total_supply": 100000000000000, + "register": 0 + }, + { + "id": "d7ca2446-6db8-4473-b79d-24d7de0db76a", + "pkg_name": "wugnot", + "pkg_path": "gno.land/r/demo/wugnot", + "pkg_addr": "g1pf6dv9fjk3rn0m4jjcne306ga4he3mzmupfjl6", + "published_at": "2024-05-28T21:45:05.000Z", + "published_height": 0, + "publisher": "", + "token_name": "wrapped GNOT", + "token_symbol": "wugnot", + "token_decimals": 6, + "token_holders": 0, + "total_supply": 519771872, + "register": 1 + }, + { + "id": "e75cbe1e-2fa2-4f0e-984d-91d39fd83557", + "pkg_name": "foo20", + "pkg_path": "gno.land/r/demo/foo20", + "pkg_addr": "", + "published_at": "2024-05-28T21:45:05.000Z", + "published_height": 0, + "publisher": "", + "token_name": "Foo", + "token_symbol": "FOO", + "token_decimals": 4, + "token_holders": 0, + "total_supply": 10100000000, + "register": 1 + } +] diff --git a/database/pool.go b/database/pool.go new file mode 100644 index 0000000..ce839eb --- /dev/null +++ b/database/pool.go @@ -0,0 +1,49 @@ +package database + +// V0이 붙네 +type PoolV0 struct { + id string + height int + //time Date + pool_path string + token0_path string + token1_path string + token0_balance string + token1_balance string + fee int + tick_spacing int + max_liquidity_per_tick string + sqrt_price_x96 string + tick int + fee_protocol int + unlocked bool + fee_growth_global0_x128 string + fee_growth_global1_x128 string + protocol_fee_token0 string + protocol_fee_token1 string + liquidity string + ticks map[string]PoolTickV0 // ticks: { [key in string]: PoolTickVO }; + tick_bitmaps map[string]string // tick_bitmaps: { [key in string]: string }; + positions []PoolPositionV0 + tvl_usd string +} + +type PoolTickV0 struct { + initialized bool + liquidityNet string + liquidityGross string + secondsOutside int + feeGrowthOutside0X128 string // 애는 갑자기 OX128이야 0_x128이 아니라 + feeGrowthOutside1X128 string + tickCumulativeOutside int + secondsPerLiquidityOutsideX string +} + +type PoolPositionV0 struct { + owner string + liquidity string + tickLower int + tickUpper int + token0Owed string + token1Owed string +} diff --git a/database/token.go b/database/token.go new file mode 100644 index 0000000..61d2d12 --- /dev/null +++ b/database/token.go @@ -0,0 +1,13 @@ +package database + +type TokenV0 struct { + id string + pkg_name string + pkg_path string + pkg_address string + publisher string + token_name string + token_symbol string + token_decimals float64 + register bool +} From 5b7d48e0a34fca95ef45dde8623527da33f75296 Mon Sep 17 00:00:00 2001 From: tolelom Date: Mon, 9 Sep 2024 18:47:16 +0900 Subject: [PATCH 2/2] =?UTF-8?q?issue:=20router/swap=5Frouter/core/entities?= =?UTF-8?q?/currency=5Famount.go=EC=9D=98=20=EC=A0=9C=EB=84=A4=EB=A6=AD=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/constants.go | 17 --- core/currency/base_currency.go | 37 ----- core/currency/currency.go | 6 - core/currency/native_currency.go | 9 -- core/currency/token.go | 25 ---- core/providers/v3_pool_accessor.go | 12 -- core/providers/v3_pool_provider.go | 34 ----- core/quote.go | 8 -- core/router.go | 15 -- core/tokens/gnot.go | 17 --- database/database.go | 6 +- database/gnoswap_db.go | 5 + go.mod | 2 + {core => swap_router}/alpha_router.go | 55 ++++---- {core => swap_router}/alpha_router_config.go | 6 +- {core => swap_router}/alpha_router_params.go | 4 +- {core => swap_router}/best_swap_route.go | 7 +- {core => swap_router}/chain_id.go | 2 +- swap_router/constants.go | 19 +++ swap_router/core/constants.go | 9 ++ .../core/entities/currency/currency.go | 38 ++++++ swap_router/core/entities/currency/gnot.go | 36 +++++ .../core/entities/currency/native_currency.go | 5 + swap_router/core/entities/currency/token.go | 81 +++++++++++ swap_router/core/entities/currency/wgnot.go | 10 ++ .../entities/fractions/currency_amount.go | 83 +++++++++++ .../core/entities/fractions}/math/doc.go | 0 .../core/entities/fractions}/math/fraction.go | 41 ++++-- .../entities/fractions}/math/fraction_test.go | 30 ++-- .../core/entities/fractions}/math/math.go | 0 .../entities/fractions}/math/math_test.go | 0 .../core/entities/fractions/percent.go | 1 + swap_router/core/fractions/percent.go | 9 ++ {core => swap_router}/pool.go | 9 +- {core => swap_router}/portion_provider.go | 6 +- .../protocol_pool_selection.go | 6 +- .../providers/on_chain_quote_provider.go | 9 ++ swap_router/providers/quoters/quoter.go | 6 + swap_router/providers/quoters/v3_quoter.go | 1 + swap_router/providers/token_provider.go | 7 + swap_router/providers/v3_pool_accessor.go | 12 ++ swap_router/providers/v3_pool_provider.go | 82 +++++++++++ .../providers/v3_subgraph_pool.go | 4 +- .../providers/v3_subgraph_provider.go | 8 +- swap_router/quote.go | 10 ++ {core => swap_router}/quoter/base_quoter.go | 4 +- swap_router/quoter/v3_quoter.go | 5 + swap_router/router-sdk/entities/protocol.go | 9 ++ swap_router/router-sdk/entities/trade.go | 9 ++ swap_router/router.go | 129 ++++++++++++++++++ {core => swap_router}/routes.go | 2 +- swap_router/tokens/gnot.go | 19 +++ {core => swap_router}/trade.go | 2 +- {core => swap_router}/v3_candidate_pools.go | 6 +- .../v3_route_with_valid_quote.go | 2 +- swap_router/v3_sdk/constants.go | 21 +++ swap_router/v3_sdk/entities/route.go | 8 ++ 57 files changed, 744 insertions(+), 261 deletions(-) delete mode 100644 core/constants.go delete mode 100644 core/currency/base_currency.go delete mode 100644 core/currency/currency.go delete mode 100644 core/currency/native_currency.go delete mode 100644 core/currency/token.go delete mode 100644 core/providers/v3_pool_accessor.go delete mode 100644 core/providers/v3_pool_provider.go delete mode 100644 core/quote.go delete mode 100644 core/router.go delete mode 100644 core/tokens/gnot.go create mode 100644 database/gnoswap_db.go rename {core => swap_router}/alpha_router.go (69%) rename {core => swap_router}/alpha_router_config.go (91%) rename {core => swap_router}/alpha_router_params.go (92%) rename {core => swap_router}/best_swap_route.go (95%) rename {core => swap_router}/chain_id.go (87%) create mode 100644 swap_router/constants.go create mode 100644 swap_router/core/constants.go create mode 100644 swap_router/core/entities/currency/currency.go create mode 100644 swap_router/core/entities/currency/gnot.go create mode 100644 swap_router/core/entities/currency/native_currency.go create mode 100644 swap_router/core/entities/currency/token.go create mode 100644 swap_router/core/entities/currency/wgnot.go create mode 100644 swap_router/core/entities/fractions/currency_amount.go rename {core => swap_router/core/entities/fractions}/math/doc.go (100%) rename {core => swap_router/core/entities/fractions}/math/fraction.go (81%) rename {core => swap_router/core/entities/fractions}/math/fraction_test.go (81%) rename {core => swap_router/core/entities/fractions}/math/math.go (100%) rename {core => swap_router/core/entities/fractions}/math/math_test.go (100%) create mode 100644 swap_router/core/entities/fractions/percent.go create mode 100644 swap_router/core/fractions/percent.go rename {core => swap_router}/pool.go (74%) rename {core => swap_router}/portion_provider.go (69%) rename {core => swap_router}/protocol_pool_selection.go (68%) create mode 100644 swap_router/providers/on_chain_quote_provider.go create mode 100644 swap_router/providers/quoters/quoter.go create mode 100644 swap_router/providers/quoters/v3_quoter.go create mode 100644 swap_router/providers/token_provider.go create mode 100644 swap_router/providers/v3_pool_accessor.go create mode 100644 swap_router/providers/v3_pool_provider.go rename {core => swap_router}/providers/v3_subgraph_pool.go (90%) rename {core => swap_router}/providers/v3_subgraph_provider.go (80%) create mode 100644 swap_router/quote.go rename {core => swap_router}/quoter/base_quoter.go (52%) create mode 100644 swap_router/quoter/v3_quoter.go create mode 100644 swap_router/router-sdk/entities/protocol.go create mode 100644 swap_router/router-sdk/entities/trade.go create mode 100644 swap_router/router.go rename {core => swap_router}/routes.go (54%) create mode 100644 swap_router/tokens/gnot.go rename {core => swap_router}/trade.go (76%) rename {core => swap_router}/v3_candidate_pools.go (87%) rename {core => swap_router}/v3_route_with_valid_quote.go (66%) create mode 100644 swap_router/v3_sdk/constants.go create mode 100644 swap_router/v3_sdk/entities/route.go diff --git a/core/constants.go b/core/constants.go deleted file mode 100644 index 05796c6..0000000 --- a/core/constants.go +++ /dev/null @@ -1,17 +0,0 @@ -package core - -type TradeType int - -const ( - EXACT_INPUT = iota - EXACT_OUTPUT -) - -type FeeAmount int - -const ( - LOWEST = 100 - LOW = 500 - MEDIUM = 3000 - HIGH = 10000 -) diff --git a/core/currency/base_currency.go b/core/currency/base_currency.go deleted file mode 100644 index afd93bc..0000000 --- a/core/currency/base_currency.go +++ /dev/null @@ -1,37 +0,0 @@ -package currency - -type BaseCurrency struct { - // The chain ID on which this currency resides - ChainId int64 - // The decimals used in representing currency amounts - decimals int64 - - // 이 아래 필드는 옵션 - - // The symbol of the currency, i.e. a short textual non-unique identifier - symbol string - // The name of the currency, i.e. a descriptive textual non-unique identifier - name string - address string -} - -func NewBaseCurrency(chainId int64, decimals int64, symbol string, name string) *BaseCurrency { - // 아래 코드는 원문 - //invariant(Number.isSafeInteger(chainId), 'CHAIN_ID'); - //invariant( - // decimals >= 0 && decimals < 255 && Number.isInteger(decimals), - // 'DECIMALS', - //); - - // 이 제약이 걸린 이유는 아직 알지 못한다. - if decimals < 0 || 255 < decimals { - panic("decimals must be between 0 and 255") - } - - return &BaseCurrency{ - ChainId: chainId, - decimals: decimals, - symbol: symbol, - name: name, - } -} diff --git a/core/currency/currency.go b/core/currency/currency.go deleted file mode 100644 index 097e8b4..0000000 --- a/core/currency/currency.go +++ /dev/null @@ -1,6 +0,0 @@ -package currency - -// Currency는 Token | NativeCurrency -type Currency interface { - GetToken() Token -} diff --git a/core/currency/native_currency.go b/core/currency/native_currency.go deleted file mode 100644 index cf106da..0000000 --- a/core/currency/native_currency.go +++ /dev/null @@ -1,9 +0,0 @@ -package currency - -type NativeCurrency struct { - BaseCurrency -} - -func (n *NativeCurrency) getToken() Token { - return Token{} // 임시 -} diff --git a/core/currency/token.go b/core/currency/token.go deleted file mode 100644 index b44f125..0000000 --- a/core/currency/token.go +++ /dev/null @@ -1,25 +0,0 @@ -package currency - -import "strings" - -type Token struct { - BaseCurrency - Address string -} - -func (t *Token) getToken() Token { - return *t -} - -// tolelom: 토큰 2개 비교해서 이름 순으로 정렬해서 pool 이름에 접근하려는 것으로 생각되는데 -// 함수명이 직관적이지 않다... + 바로 함수명 리턴하는 함수 있어도 좋을 거 같은데 -func (t *Token) sortsBefore(other Token) bool { - if t.ChainId != other.ChainId { - // other chain err - } - if t.address == other.address { - // same token err - } - - return strings.ToLower(t.Address) < strings.ToLower(other.Address) -} diff --git a/core/providers/v3_pool_accessor.go b/core/providers/v3_pool_accessor.go deleted file mode 100644 index 986d37e..0000000 --- a/core/providers/v3_pool_accessor.go +++ /dev/null @@ -1,12 +0,0 @@ -package providers - -import ( - "router/core" - "router/core/currency" -) - -type V3PoolAccessor interface { - GetPool(tokenA currency.Token, tokenB currency.Token, feeAmount core.FeeAmount) (*core.Pool, error) // Pool 또는 오류 반환 - GetPoolByAddress(address string) (*core.Pool, error) // Pool 또는 오류 반환 - GetAllPools() []core.Pool // Pool 배열 반환 -} diff --git a/core/providers/v3_pool_provider.go b/core/providers/v3_pool_provider.go deleted file mode 100644 index 49127a0..0000000 --- a/core/providers/v3_pool_provider.go +++ /dev/null @@ -1,34 +0,0 @@ -package providers - -import ( - "router/core" - "router/core/currency" - "router/database" -) - -type IV3PoolProvider interface { - getPools(tokenPairs ??) V3PoolAccessor - getPoolAddress(tokenA, tokenB currency.Token, feeAmount core.FeeAmount) (string, currency.Token, currency.Token) -} - -type V3PoolProvider struct { - PoolAddressCache map[string]string - database database.Database -} - -func NewV3PoolProvider(chainId core.ChainId, db database.Database) *V3PoolProvider { - return &V3PoolProvider{ - PoolAddressCache: make(map[string]string), - database: db, - } -} - - -// todo: goroutine -func (pp *V3PoolProvider) getPools() { - -} - -func (pp *V3PoolProvider) getPoolAddress(tokenA, tokenB currency.Token, feeAmount core.FeeAmount) (string, currency.Token, currency.Token) { - -} \ No newline at end of file diff --git a/core/quote.go b/core/quote.go deleted file mode 100644 index 88dfc8a..0000000 --- a/core/quote.go +++ /dev/null @@ -1,8 +0,0 @@ -package core - -import "router/core/math" - -type Quote struct { - percent *math.Fraction - amount *math.Fraction -} diff --git a/core/router.go b/core/router.go deleted file mode 100644 index f4958ae..0000000 --- a/core/router.go +++ /dev/null @@ -1,15 +0,0 @@ -package core - -type SwapRoute struct { - route Routes -} - -type IRouter interface { -} - -// TODO: 원문: type SwapOptions = SwapOptionsUniversalRouter | SwapOptionsSwapRouter02 -type SwapOptions struct { -} - -type SwapOptionsUniversalRouter struct { -} diff --git a/core/tokens/gnot.go b/core/tokens/gnot.go deleted file mode 100644 index 3663863..0000000 --- a/core/tokens/gnot.go +++ /dev/null @@ -1,17 +0,0 @@ -package tokens - -import "router/core/currency" - -type Gnot struct { - currency.NativeCurrency -} - -func NewGnot(chainId1 int64) *Gnot { - return &Gnot{ - NativeCurrency: currency.NativeCurrency{ - BaseCurrency: currency.BaseCurrency{ - ChainId: chainId1, - }, - }, - } -} diff --git a/database/database.go b/database/database.go index e289de0..63a5bc5 100644 --- a/database/database.go +++ b/database/database.go @@ -1,8 +1,10 @@ package database +import "context" + type Database interface { GetPools() []PoolV0 GetTokens() []TokenV0 - //query(sql string) T ???? - //commit(string, any[][]) bool ?????? + Query(ctx context.Context, sql string) (interface{}, error) // 제너릭 타입은 Go에서 다루기 복잡하므로 interface{} 사용 + Commit(ctx context.Context, sql string, data [][]interface{}) (bool, error) } diff --git a/database/gnoswap_db.go b/database/gnoswap_db.go new file mode 100644 index 0000000..086f83c --- /dev/null +++ b/database/gnoswap_db.go @@ -0,0 +1,5 @@ +package database + +type GnoswapDB struct { + Database +} diff --git a/go.mod b/go.mod index b3c8eb5..57fde8b 100644 --- a/go.mod +++ b/go.mod @@ -1 +1,3 @@ module router + +go 1.18 diff --git a/core/alpha_router.go b/swap_router/alpha_router.go similarity index 69% rename from core/alpha_router.go rename to swap_router/alpha_router.go index bfc7480..a25e23a 100644 --- a/core/alpha_router.go +++ b/swap_router/alpha_router.go @@ -1,13 +1,20 @@ -package core +package swap_router import ( - "router/core/currency" - "router/core/math" + currency2 "router/swap_router/core/entities/currency" + "router/swap_router/core/entities/fractions/math" + "router/swap_router/providers" + "router/swap_router/quoter" ) type AlphaRouter struct { - chainId ChainId - portionProvider IPortionProvider + chainId ChainId + subgraphProvider providers.IV3SubgraphProvider + poolProvider providers.IV3PoolProvider + onChainQuoteProvider providers.IOnChainQuoteProvider + tokenProvider providers.ITokenProvider + quoter quoter.V3Quoter + portionProvider IPortionProvider } func NewAlphaRouter(params AlphaRouterParams) *AlphaRouter { @@ -16,8 +23,8 @@ func NewAlphaRouter(params AlphaRouterParams) *AlphaRouter { // Todo: goroutine func (a *AlphaRouter) route( - baseCurrency currency.Currency, - quoteCurrency currency.Currency, // 여기는 왜 quote를 쓰지 + baseCurrency currency2.ICurrency, + quoteCurrency currency2.ICurrency, // 여기는 왜 quote를 쓰지 amount math.Fraction, tradeType TradeType, swapConfig SwapOptions, @@ -33,18 +40,18 @@ func (a *AlphaRouter) route( // 왠만하면 함수로 뺄 것 // TODO: 이해하기 - //if tradeType == EXACT_OUTPUT { - // portionAmount, portionErr := a.portionProvider.GetPortionAmount(amount, tradeType, swapConfig) - // if portionErr == nil && portionAmount > 0 { - // // 정확한 교환의 경우 라우팅하기 전에 다음 사항을 확인해야 합니다. - // // 토큰 아웃 금액은 고정 부분을 차지하며, 최상의 스왑 경로 이후의 토큰 인 금액에는 해당 부분에 해당하는 토큰이 포함됩니다. - // // 즉, 풀의 LP 수수료 bps가 부분 bps(v3의 경우 0.01%/0.05%)보다 낮은 경우 풀은 파산할 수 있습니다. - // // 그 이유는 스왑퍼가 해당 부분을 담당하는 대신, - // // 대신 풀이 해당 부분을 담당합니다. - // // 아래 추가 내용은 이러한 상황을 방지합니다. - // amount.Add(portionAmount) - // } - //} + if tradeType == EXACT_OUTPUT { + portionAmount, portionErr := a.portionProvider.GetPortionAmount(amount, tradeType, swapConfig) + if portionErr == nil && portionAmount > 0 { + // 정확한 교환의 경우 라우팅하기 전에 다음 사항을 확인해야 합니다. + // 토큰 아웃 금액은 고정 부분을 차지하며, 최상의 스왑 경로 이후의 토큰 인 금액에는 해당 부분에 해당하는 토큰이 포함됩니다. + // 즉, 풀의 LP 수수료 bps가 부분 bps(v3의 경우 0.01%/0.05%)보다 낮은 경우 풀은 파산할 수 있습니다. + // 그 이유는 스왑퍼가 해당 부분을 담당하는 대신, + // 대신 풀이 해당 부분을 담당합니다. + // 아래 추가 내용은 이러한 상황을 방지합니다. + amount.Add(portionAmount) + } + } // routing config merge다루는 부분 패스 // 이름 리팩토링 @@ -70,9 +77,9 @@ func (a *AlphaRouter) route( func (a *AlphaRouter) determineCurrencyInOutFromTradeType( tradeType TradeType, - baseCurrency currency.Currency, - quoteCurrency currency.Currency, -) (currency.Currency, currency.Currency) { + baseCurrency currency2.ICurrency, + quoteCurrency currency2.ICurrency, +) (currency2.ICurrency, currency2.ICurrency) { if tradeType == EXACT_INPUT { return baseCurrency, quoteCurrency } @@ -81,7 +88,7 @@ func (a *AlphaRouter) determineCurrencyInOutFromTradeType( // todo: goroutine // quoteToken Token을 getSwapRouteFromChain에 매개변수로 넘기면 계산 효율은 좋아진다(아주 미세하게), 하지만 quoteToken은 지금의 매개변수로 간단하게 알 수 있다. -func (a *AlphaRouter) getSwapRouteFromChain(tokenIn, tokenOut currency.Token, amount math.Fraction, tradeType TradeType, routerConfig AlphaRouterConfig) *BestSwapRoute { +func (a *AlphaRouter) getSwapRouteFromChain(tokenIn, tokenOut currency2.Token, amount math.Fraction, tradeType TradeType, routerConfig AlphaRouterConfig) *BestSwapRoute { // 금액 분포, 즉 입력 금액의 일부를 생성합니다. // 다양한 경로에 대한 입력 금액의 일부에 대한 견적을 받은 다음 // 결합하여 분할 경로를 생성합니다. @@ -113,7 +120,7 @@ func (a *AlphaRouter) getAmountDistribution(amount math.Fraction, distributionPe return quotes } -func (a *AlphaRouter) buildTrade(currencyIn currency.Currency, currencyOut currency.Currency, tradeType TradeType, routes []V3RouteWithValidQuote) Trade { +func (a *AlphaRouter) buildTrade(currencyIn currency2.ICurrency, currencyOut currency2.ICurrency, tradeType TradeType, routes []V3RouteWithValidQuote) Trade { return Trade{} } diff --git a/core/alpha_router_config.go b/swap_router/alpha_router_config.go similarity index 91% rename from core/alpha_router_config.go rename to swap_router/alpha_router_config.go index 642db6b..d1d89bd 100644 --- a/core/alpha_router_config.go +++ b/swap_router/alpha_router_config.go @@ -1,4 +1,4 @@ -package core +package swap_router type AlphaRouterConfig struct { v3ProtocolPoolSelection ProtocolPoolSelection @@ -15,7 +15,9 @@ type AlphaRouterConfig struct { * 55% of input => Route 2 * 40% of input => Route 3 */ - distributionPercent int + distributionPercent int + + // useCachedRoutes bool writeToCachedRoutes bool optimisticCachedRoutes bool diff --git a/core/alpha_router_params.go b/swap_router/alpha_router_params.go similarity index 92% rename from core/alpha_router_params.go rename to swap_router/alpha_router_params.go index d5aa83c..8045802 100644 --- a/core/alpha_router_params.go +++ b/swap_router/alpha_router_params.go @@ -1,6 +1,6 @@ -package core +package swap_router -import "router/core/providers" +import "router/swap_router/providers" type AlphaRouterParams struct { // The chain id for this instance of the Alpha Router. diff --git a/core/best_swap_route.go b/swap_router/best_swap_route.go similarity index 95% rename from core/best_swap_route.go rename to swap_router/best_swap_route.go index 8332180..ba81b78 100644 --- a/core/best_swap_route.go +++ b/swap_router/best_swap_route.go @@ -1,13 +1,14 @@ -package core +package swap_router -import "router/core/math" +import ( + "router/swap_router/core/entities/fractions/math" +) type BestSwapRoute struct { quote math.Fraction routeWithValidQuote []V3RouteWithValidQuote } - // todo: goroutine // 모든 경로에 대한 모든 금액에 대한 모든 견적이 주어지면 최상의 조합을 찾으십시오. func getBestSwapRoute(amount math.Fraction, routesWithValidQuotes []V3RouteWithValidQuote, tradeType TradeType, routerConfig AlphaRouterConfig) *BestSwapRoute { diff --git a/core/chain_id.go b/swap_router/chain_id.go similarity index 87% rename from core/chain_id.go rename to swap_router/chain_id.go index f6e2e70..0fd7f57 100644 --- a/core/chain_id.go +++ b/swap_router/chain_id.go @@ -1,4 +1,4 @@ -package core +package swap_router type ChainId int diff --git a/swap_router/constants.go b/swap_router/constants.go new file mode 100644 index 0000000..3f8df5f --- /dev/null +++ b/swap_router/constants.go @@ -0,0 +1,19 @@ +package swap_router + +type BigintIsh interface { +} + +type TradeType int + +const ( + EXACT_INPUT = iota + EXACT_OUTPUT +) + +var MIN_PRICE_X96 = 4295128740 +var MAX_PRICE_X96 = 1461446703485210103287273052203988822378723970341 + +const MIN_TICK = -887272 +const MAX_TICK = 887272 + +const DEFAULT_SWAP_FEE = 0.15 diff --git a/swap_router/core/constants.go b/swap_router/core/constants.go new file mode 100644 index 0000000..1db4a8d --- /dev/null +++ b/swap_router/core/constants.go @@ -0,0 +1,9 @@ +package core + +type Rounding int + +const ( + ROUND_DOWN Rounding = iota + ROUND_HALF_UP + ROUND_UP +) diff --git a/swap_router/core/entities/currency/currency.go b/swap_router/core/entities/currency/currency.go new file mode 100644 index 0000000..08fb635 --- /dev/null +++ b/swap_router/core/entities/currency/currency.go @@ -0,0 +1,38 @@ +package currency + +// Currency는 Token | NativeCurrency +type ICurrency interface { + Equals(other ICurrency) bool + GetToken() Token + IsToken() bool +} + +type Currency struct { + IsNative bool + IsToken bool + ChainId int + Decimals int + Symbol string + Name string + address string +} + +func NewCurrency(chainId int, decimals int, symbol string, name string) *Currency { + //invariant(Number.isSafeInteger(chainId), 'CHAIN_ID') + //invariant( + // Decimals >= 0 && Decimals < 255 && Number.isInteger(Decimals), + // 'DECIMALS', + //) + + // 이 제약이 걸린 이유는 아직 알지 못한다. + if decimals < 0 || 255 < decimals { + panic("Decimals must be between 0 and 255") + } + + return &Currency{ + ChainId: chainId, + Decimals: decimals, + Symbol: symbol, + Name: name, + } +} diff --git a/swap_router/core/entities/currency/gnot.go b/swap_router/core/entities/currency/gnot.go new file mode 100644 index 0000000..ad7fb76 --- /dev/null +++ b/swap_router/core/entities/currency/gnot.go @@ -0,0 +1,36 @@ +package currency + +type Gnot struct { + NativeCurrency + _gnotCache map[int]Gnot +} + +func NewGnot(chainId int) *Gnot { + newGnot := &Gnot{} + newGnot.Currency.ChainId = chainId + newGnot.Currency.Decimals = 6 + newGnot.Currency.Symbol = "GNOT" + newGnot.Currency.Name = "Gnot" + return newGnot +} + +func (g *Gnot) Wrapped() Token { + wgnot := WGNOT[g.ChainId] + //invariant(!!wgnot, 'WRAPPED'); + return wgnot +} + +func (g *Gnot) onChain(chainId int) Gnot { + if gnot, exists := g._gnotCache[chainId]; exists { + return gnot + } + + newGnot := Gnot{} + newGnot.Currency.ChainId = chainId + g._gnotCache[chainId] = newGnot + return newGnot +} + +func (g *Gnot) equals(other Currency) bool { + return other.IsNative && (other.ChainId == g.ChainId) +} diff --git a/swap_router/core/entities/currency/native_currency.go b/swap_router/core/entities/currency/native_currency.go new file mode 100644 index 0000000..0a908f5 --- /dev/null +++ b/swap_router/core/entities/currency/native_currency.go @@ -0,0 +1,5 @@ +package currency + +type NativeCurrency struct { + Currency +} diff --git a/swap_router/core/entities/currency/token.go b/swap_router/core/entities/currency/token.go new file mode 100644 index 0000000..d998a5d --- /dev/null +++ b/swap_router/core/entities/currency/token.go @@ -0,0 +1,81 @@ +package currency + +import ( + "math/big" + "strings" +) + +type Token struct { + Currency + buyFeeBps *big.Int + sellFeeBps *big.Int +} + +func NewToken(chainId int, address string, decimals int, symbol string, name string, bypassChecksum *bool, buyFeeBps *big.Int, sellFeeBps *big.Int) *Token { + newToken := &Token{ + Currency: Currency{ + ChainId: chainId, + Decimals: decimals, + Symbol: symbol, + Name: name, + }, + } + + bigZero := big.NewInt(0) + if bypassChecksum != nil && *bypassChecksum { + newToken.Currency.address = checkValidAddress(address) + } else { + newToken.Currency.address = validateAndParseAddress(address) + } + + if buyFeeBps != nil { + //invariant(buyFeeBps.gte(bigZero), 'NON-NEGATIVE FOT FEES'); + } + if sellFeeBps != nil { + //invariant(sellFeeBps.gte(bigZero), 'NON-NEGATIVE FOT FEES') + } + newToken.buyFeeBps = buyFeeBps + newToken.sellFeeBps = sellFeeBps + + return newToken +} + +func (t *Token) equals(other Currency) bool { + return other.IsToken && t.ChainId == other.ChainId && strings.ToLower(t.address) == strings.ToLower(other.address) +} + +// tolelom: 토큰 2개 비교해서 이름 순으로 정렬해서 pool 이름에 접근하려는 것으로 생각되는데 +// 함수명이 직관적이지 않다... + 바로 함수명 리턴하는 함수 있어도 좋을 거 같은데 +func (t *Token) sortsBefore(other Token) bool { + //invariant(this.chainId === other.chainId, 'CHAIN_IDS'); + //invariant( + // this.address.toLowerCase() !== other.address.toLowerCase(), + // 'ADDRESSES', + //); + if t.ChainId != other.ChainId { + // other chain err + } + if t.address == other.address { + // same token err + } + return strings.ToLower(t.address) < strings.ToLower(other.address) +} + +// tolelom: 추가한 함수 sortsBefore() 대체용으로 추가 +func (t *Token) SortsByLowerAddress(other Token) (Token, Token) { + if t.ChainId != other.ChainId { + // other chain err + } + if t.address == other.address { + // same token err + } + + if strings.ToLower(t.Currency.address) < strings.ToLower(other.Currency.address) { + return *t, other + } + return other, *t +} + +func (t *Token) GetToken() Token { + return *t +} diff --git a/swap_router/core/entities/currency/wgnot.go b/swap_router/core/entities/currency/wgnot.go new file mode 100644 index 0000000..5348e7d --- /dev/null +++ b/swap_router/core/entities/currency/wgnot.go @@ -0,0 +1,10 @@ +package currency + +var WGNOT = map[int]*Token{ + 1: NewToken(1, "gno.land/r/demo/wugnot", 6, "WGNOT", "Wrapped Gnot", nil, nil, nil), + 2: NewToken(2, "gno.land/r/demo/wugnot", 6, "WGNOT", "Wrapped Gnot", nil, nil, nil), + 3: NewToken(3, "gno.land/r/demo/wugnot", 6, "WGNOT", "Wrapped Gnot", nil, nil, nil), + 4: NewToken(4, "gno.land/r/demo/wugnot", 6, "WGNOT", "Wrapped Gnot", nil, nil, nil), + 5: NewToken(5, "gno.land/r/demo/wugnot", 6, "WGNOT", "Wrapped Gnot", nil, nil, nil), + 99: NewToken(99, "gno.land/r/demo/wugnot", 6, "WGNOT", "Wrapped Gnot", nil, nil, nil), +} diff --git a/swap_router/core/entities/fractions/currency_amount.go b/swap_router/core/entities/fractions/currency_amount.go new file mode 100644 index 0000000..e672af0 --- /dev/null +++ b/swap_router/core/entities/fractions/currency_amount.go @@ -0,0 +1,83 @@ +package fractions + +import ( + "math/big" + "router/swap_router/core" + currency2 "router/swap_router/core/entities/currency" + "router/swap_router/core/entities/fractions/math" +) + +// TODO: 어떻게 구현할 것인가? +//type BigNumberish struct { +//} + +type CurrencyAmount[T currency2.Currency] struct { + math.Fraction + currency T + decimalScale *big.Int +} + +func NewCurrencyAmount[T currency2.Currency](currency T, numerator *big.Int, denominator *big.Int) *CurrencyAmount[T] { + //invariant(JSBI.lessThanOrEqual(this.quotient, MaxUint256), 'AMOUNT'); + currencyAmount := CurrencyAmount[T]{ + Fraction: math.Fraction{ + Numerator: numerator, // warn: pointer 받은 거 그대로 넣는게 맞나 + Denominator: denominator, + }, + currency: currency, + decimalScale: big.NewInt(1), + } + + return ¤cyAmount +} + +func (c *CurrencyAmount[T]) fromRawAmount(currency T, rawAmount *big.Int) *CurrencyAmount[T] { + return NewCurrencyAmount(currency, rawAmount, big.NewInt(1)) +} + +func (c *CurrencyAmount[T]) fromFractionalAmount(currency T, numerator *big.Int, denominator *big.Int) *CurrencyAmount[T] { + return NewCurrencyAmount(currency, numerator, denominator) +} + +func (c *CurrencyAmount[T]) Add(other CurrencyAmount[T]) *CurrencyAmount[T] { + added := c.Fraction.Add(&other.Fraction) + return c.fromFractionalAmount(c.currency, added.Numerator, added.Denominator) +} + +func (c *CurrencyAmount[T]) Sub(other CurrencyAmount[T]) *CurrencyAmount[T] { + subbed := c.Fraction.Sub(&other.Fraction) + return c.fromFractionalAmount(c.currency, subbed.Numerator, subbed.Denominator) +} + +func (c *CurrencyAmount[T]) Multiply(other CurrencyAmount[T]) *CurrencyAmount[T] { + multiplied := c.Fraction.Mul(&other.Fraction) + return c.fromFractionalAmount(c.currency, multiplied.Numerator, multiplied.Denominator) +} + +func (c *CurrencyAmount[T]) Divide(other CurrencyAmount[T]) *CurrencyAmount[T] { + divided := c.Fraction.Div(&other.Fraction) + return c.fromFractionalAmount(c.currency, divided.Numerator, divided.Denominator) +} + +// 보류 +func (c *CurrencyAmount[T]) ToSignificant(significantDigits int, rounding core.Rounding) string { + return c.Fraction.Div(math.NewFraction(c.decimalScale, big.NewInt(1))).ToSignificant(significantDigits, rounding) +} + +// 보류 +func (c *CurrencyAmount[T]) ToFixed(decimalPlaces int, format interface{}, rounding core.Rounding) string { + return "" +} + +func (c *CurrencyAmount[T]) ToExact(format interface{}) string { + return "" +} + +func (c *CurrencyAmount[T]) GetToken() currency2.Token { + if c.currency.IsToken { + c.currency + + } + + return CurrencyAmount.fromFractionalAmount(c.currency.GetToken(), c.Numerator, c.Denominator) +} diff --git a/core/math/doc.go b/swap_router/core/entities/fractions/math/doc.go similarity index 100% rename from core/math/doc.go rename to swap_router/core/entities/fractions/math/doc.go diff --git a/core/math/fraction.go b/swap_router/core/entities/fractions/math/fraction.go similarity index 81% rename from core/math/fraction.go rename to swap_router/core/entities/fractions/math/fraction.go index b217e8e..76b12bf 100644 --- a/core/math/fraction.go +++ b/swap_router/core/entities/fractions/math/fraction.go @@ -3,6 +3,7 @@ package math import ( "errors" "math/big" + "router/swap_router/core" ) // Fraction @@ -17,20 +18,20 @@ type Fraction struct { // NewFraction // int64 변수 2개를 분자, 분모 순으로 입력받아 Fraction 객체를 생성해주는 함수. // 분모로 0이 입력된다면 panic을 발생시킨다. -func NewFraction(numerator int64, denominator int64) *Fraction { - if denominator == 0 { +func NewFraction(numerator *big.Int, denominator *big.Int) *Fraction { + if denominator.Sign() == 0 { panic(errors.New("denominator cannot be zero")) } // 분모는 양수만 - if denominator < 0 { - numerator = -numerator - denominator = -denominator + if denominator.Sign() < 0 { + numerator.Neg(numerator) + denominator.Neg(denominator) } fraction := &Fraction{ - Numerator: big.NewInt(numerator), - Denominator: big.NewInt(denominator), + Numerator: numerator, + Denominator: denominator, } g := GCD(fraction.Numerator, fraction.Denominator) @@ -110,6 +111,28 @@ func (f *Fraction) Div(other *Fraction) *Fraction { } } +// rounding 변수는 일단 사용X +func (f *Fraction) ToSignificant(significantDigits int, rounding core.Rounding) string { + //invariant( + // Number.isInteger(significantDigits), + // `${significantDigits} is not an integer.`, + //); + //invariant(significantDigits > 0, `${significantDigits} is not positive.`); + + // TODO: 여기서 오차 안생기나 확인 + quotient := big.NewRat(f.Numerator.Int64(), f.Denominator.Int64()) + return quotient.FloatString(significantDigits) +} + +func (f *Fraction) ToFixed(significantDigits int, rounding core.Rounding) string { + //invariant( + // Number.isInteger(decimalPlaces), + // `${decimalPlaces} is not an integer.`, + //); + //invariant(decimalPlaces >= 0, `${decimalPlaces} is negative.`); + +} + //func (f *Fraction) LessThan(other *Fraction) bool { // leftValue := new(big.Int).Mul(f.Numerator, other.Denominator) // rightValue := new(big.Int).Mul(other.Numerator, f.Denominator) @@ -160,7 +183,3 @@ func (f *Fraction) Div(other *Fraction) *Fraction { // // return left > right, nil //} - -// 구현 안 한 함수들 -// toSignificant() {} -// toFixed() {} diff --git a/core/math/fraction_test.go b/swap_router/core/entities/fractions/math/fraction_test.go similarity index 81% rename from core/math/fraction_test.go rename to swap_router/core/entities/fractions/math/fraction_test.go index 2fd3d72..c9dc13c 100644 --- a/core/math/fraction_test.go +++ b/swap_router/core/entities/fractions/math/fraction_test.go @@ -1,6 +1,7 @@ package math import ( + "math/big" "testing" ) @@ -30,8 +31,8 @@ func TestNewFraction(t *testing.T) { } } }() - fraction := NewFraction(test.numerator, test.denominator) - expectedFraction := NewFraction(test.expectedNumerator, test.expectedDenominator) + fraction := NewFraction(big.NewInt(test.numerator), big.NewInt(test.denominator)) + expectedFraction := NewFraction(big.NewInt(test.expectedNumerator), big.NewInt(test.expectedDenominator)) if expectedFraction.Numerator.Cmp(fraction.Numerator) != 0 || expectedFraction.Denominator.Cmp(fraction.Denominator) != 0 { t.Fatalf("NewFraction: expected %v, got %v", expectedFraction, fraction) @@ -61,10 +62,10 @@ func TestFraction_Add(t *testing.T) { for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { - fraction1 := NewFraction(tt.numerator1, tt.denominator1) - fraction2 := NewFraction(tt.numerator2, tt.denominator2) + fraction1 := NewFraction(big.NewInt(tt.numerator1), big.NewInt(tt.denominator1)) + fraction2 := NewFraction(big.NewInt(tt.numerator2), big.NewInt(tt.denominator2)) result := fraction1.Add(fraction2) - expected := NewFraction(tt.expectedNumerator, tt.expectedDenominator) + expected := NewFraction(big.NewInt(tt.expectedNumerator), big.NewInt(tt.expectedDenominator)) if result.Numerator.Cmp(expected.Numerator) != 0 || result.Denominator.Cmp(expected.Denominator) != 0 { t.Fatalf("Add: expected %v, got %v", expected, result) @@ -91,10 +92,10 @@ func TestFraction_Sub(t *testing.T) { for _, tt := range tests { tt := tt t.Run("", func(t *testing.T) { - fraction1 := NewFraction(tt.numerator1, tt.denominator1) - fraction2 := NewFraction(tt.numerator2, tt.denominator2) + fraction1 := NewFraction(big.NewInt(tt.numerator1), big.NewInt(tt.denominator1)) + fraction2 := NewFraction(big.NewInt(tt.numerator2), big.NewInt(tt.denominator2)) result := fraction1.Sub(fraction2) - expected := NewFraction(tt.expectedNumerator, tt.expectedDenominator) + expected := NewFraction(big.NewInt(tt.expectedNumerator), big.NewInt(tt.expectedDenominator)) if result.Numerator.Cmp(expected.Numerator) != 0 || result.Denominator.Cmp(expected.Denominator) != 0 { t.Fatalf("Sub: expected %v, got %v", expected, result) @@ -134,11 +135,10 @@ func TestFraction_Mul(t *testing.T) { t.Fatalf("Mul: unexpected panic: %v", r) } }() - fraction1 := NewFraction(tt.numerator1, tt.denominator1) - fraction2 := NewFraction(tt.numerator2, tt.denominator2) - + fraction1 := NewFraction(big.NewInt(tt.numerator1), big.NewInt(tt.denominator1)) + fraction2 := NewFraction(big.NewInt(tt.numerator2), big.NewInt(tt.denominator2)) result := fraction1.Mul(fraction2) - expected := NewFraction(tt.expectedNumerator, tt.expectedDenominator) + expected := NewFraction(big.NewInt(tt.expectedNumerator), big.NewInt(tt.expectedDenominator)) if result.Numerator.Cmp(expected.Numerator) != 0 || result.Denominator.Cmp(expected.Denominator) != 0 { t.Fatalf("Mul: expected %v, got %v", expected, result) @@ -174,10 +174,10 @@ func TestFraction_Div(t *testing.T) { } } }() - fraction1 := NewFraction(tt.numerator1, tt.denominator1) - fraction2 := NewFraction(tt.numerator2, tt.denominator2) + fraction1 := NewFraction(big.NewInt(tt.numerator1), big.NewInt(tt.denominator1)) + fraction2 := NewFraction(big.NewInt(tt.numerator2), big.NewInt(tt.denominator2)) result := fraction1.Div(fraction2) - expected := NewFraction(tt.expectedNumerator, tt.expectedDenominator) + expected := NewFraction(big.NewInt(tt.expectedNumerator), big.NewInt(tt.expectedDenominator)) if result.Numerator.Cmp(expected.Numerator) != 0 || result.Denominator.Cmp(expected.Denominator) != 0 { t.Fatalf("Div: expected %v/%v, got %v/%v", expected.Numerator, expected.Denominator, result.Numerator, result.Denominator) diff --git a/core/math/math.go b/swap_router/core/entities/fractions/math/math.go similarity index 100% rename from core/math/math.go rename to swap_router/core/entities/fractions/math/math.go diff --git a/core/math/math_test.go b/swap_router/core/entities/fractions/math/math_test.go similarity index 100% rename from core/math/math_test.go rename to swap_router/core/entities/fractions/math/math_test.go diff --git a/swap_router/core/entities/fractions/percent.go b/swap_router/core/entities/fractions/percent.go new file mode 100644 index 0000000..b404334 --- /dev/null +++ b/swap_router/core/entities/fractions/percent.go @@ -0,0 +1 @@ +package fractions diff --git a/swap_router/core/fractions/percent.go b/swap_router/core/fractions/percent.go new file mode 100644 index 0000000..21bdeea --- /dev/null +++ b/swap_router/core/fractions/percent.go @@ -0,0 +1,9 @@ +package fractions + +import ( + "router/swap_router/core/entities/fractions/math" +) + +type Percent struct { + math.Fraction +} diff --git a/core/pool.go b/swap_router/pool.go similarity index 74% rename from core/pool.go rename to swap_router/pool.go index 0bfd780..278dbbd 100644 --- a/core/pool.go +++ b/swap_router/pool.go @@ -1,11 +1,14 @@ -package core +package swap_router -import "router/core/currency" +import ( + "router/swap_router/core/entities/currency" + "router/swap_router/v3_sdk" +) type Pool struct { tokenA currency.Token tokenB currency.Token - fee FeeAmount + fee v3_sdk.FeeAmount sqrtRatioX96 float64 liquidity float64 tickCurrent float64 diff --git a/core/portion_provider.go b/swap_router/portion_provider.go similarity index 69% rename from core/portion_provider.go rename to swap_router/portion_provider.go index b78cc23..7012a70 100644 --- a/core/portion_provider.go +++ b/swap_router/portion_provider.go @@ -1,6 +1,8 @@ -package core +package swap_router -import "router/core/math" +import ( + "router/swap_router/core/entities/fractions/math" +) type IPortionProvider interface { GetPortionAmount(tokenOutAmount math.Fraction, tradeType TradeType, swapConfig SwapOptions) (math.Fraction, error) diff --git a/core/protocol_pool_selection.go b/swap_router/protocol_pool_selection.go similarity index 68% rename from core/protocol_pool_selection.go rename to swap_router/protocol_pool_selection.go index 4993b99..32e6648 100644 --- a/core/protocol_pool_selection.go +++ b/swap_router/protocol_pool_selection.go @@ -1,4 +1,4 @@ -package core +package swap_router type ProtocolPoolSelection struct { topN int @@ -9,6 +9,6 @@ type ProtocolPoolSelection struct { topNWithBaseToken int // selectable variable - //topNSecondHopForTokenAddress - //tokensToAvoidOnSecondHops + topNSecondHopForTokenAddress map[string]int + tokensToAvoidOnSecondHops []string } diff --git a/swap_router/providers/on_chain_quote_provider.go b/swap_router/providers/on_chain_quote_provider.go new file mode 100644 index 0000000..569a370 --- /dev/null +++ b/swap_router/providers/on_chain_quote_provider.go @@ -0,0 +1,9 @@ +package providers + +import ( + "router/swap_router/core/entities/fractions" +) + +type IOnChainQuoteProvider interface { + GetQuotesManyExactIn(amountIns []fractions.CurrencyAmount, routes []TRoute, providerConfig ProviderConfig) OnChainQuotes +} diff --git a/swap_router/providers/quoters/quoter.go b/swap_router/providers/quoters/quoter.go new file mode 100644 index 0000000..61e0881 --- /dev/null +++ b/swap_router/providers/quoters/quoter.go @@ -0,0 +1,6 @@ +package quoters + +import "router/swap_router" + +type Quoter[CandidatePools swap_router.V3CandidatePools, Route V3Route] struct { +} diff --git a/swap_router/providers/quoters/v3_quoter.go b/swap_router/providers/quoters/v3_quoter.go new file mode 100644 index 0000000..309fc98 --- /dev/null +++ b/swap_router/providers/quoters/v3_quoter.go @@ -0,0 +1 @@ +package quoters diff --git a/swap_router/providers/token_provider.go b/swap_router/providers/token_provider.go new file mode 100644 index 0000000..56d9403 --- /dev/null +++ b/swap_router/providers/token_provider.go @@ -0,0 +1,7 @@ +package providers + +type ITokenProvider interface { +} + +type TokenProvider struct { +} diff --git a/swap_router/providers/v3_pool_accessor.go b/swap_router/providers/v3_pool_accessor.go new file mode 100644 index 0000000..991f851 --- /dev/null +++ b/swap_router/providers/v3_pool_accessor.go @@ -0,0 +1,12 @@ +package providers + +import ( + "router/swap_router" + "router/swap_router/core/entities/currency" +) + +type IV3PoolAccessor interface { + GetPool(tokenA currency.Token, tokenB currency.Token, feeAmount swap_router.FeeAmount) (*swap_router.Pool, error) // Pool 또는 오류 반환 + GetPoolByAddress(address string) (*swap_router.Pool, error) // Pool 또는 오류 반환 + GetAllPools() []swap_router.Pool // Pool 배열 반환 +} diff --git a/swap_router/providers/v3_pool_provider.go b/swap_router/providers/v3_pool_provider.go new file mode 100644 index 0000000..6a6b250 --- /dev/null +++ b/swap_router/providers/v3_pool_provider.go @@ -0,0 +1,82 @@ +package providers + +import ( + "router/database" + "router/swap_router" + "router/swap_router/core/entities/currency" +) + +// pool_privider.getPools에서 사용되는 구조체 +// getPools에서 인자를 적절하게 넘겨만 받으면 삭제해도 된다. +// 이름만 적절하게 지으면 잘 활용할 수 있을 거 같은데 +type TokenPairs struct { + tokenA currency.Token + tokenB currency.Token + feeAmount swap_router.FeeAmount +} + +type IV3PoolProvider interface { + getPools(tokenPairs []TokenPairs) IV3PoolAccessor + getPoolAddress(tokenA, tokenB currency.Token, feeAmount swap_router.FeeAmount) (string, currency.Token, currency.Token) +} + +type V3PoolProvider struct { + PoolAddressCache map[string]string + chainId swap_router.ChainId + database database.Database +} + +func NewV3PoolProvider(chainId swap_router.ChainId, db database.Database) *V3PoolProvider { + return &V3PoolProvider{ + PoolAddressCache: make(map[string]string), + chainId: chainId, + database: db, + } +} + +// todo: goroutine +func (pp *V3PoolProvider) getPools(tokenPairs []TokenPairs) IV3PoolAccessor { + poolAddressSet := make(map[string]struct{}) + sortedTokenPairs := make([]TokenPairs, 0) + sortedPoolAddresses := make([]string, 0) + + for _, tokenPair := range tokenPairs { + poolAddress, token0, token1 := pp.getPoolAddress(tokenPair.tokenA, tokenPair.tokenB, tokenPair.feeAmount) + + if _, exists := poolAddressSet[poolAddress]; exists { + continue + } + + poolAddressSet[poolAddress] = struct{}{} + sortedTokenPairs = append(sortedTokenPairs, tokenPair) + sortedPoolAddresses = append(sortedPoolAddresses, poolAddress) + } + + //slot0Results, liquidityResults + + poolAddressToPool := make(map[string]struct{}) + invalidPools := make(map[string]struct{}) + + for i, _ := range sortedPoolAddresses { + slot0Result := slot0Results[i] + liquidityResult := liquidityResults[i] + + token0, token1, fee := sortedPoolAddresses[i] + + slot0 := slot0Result + } +} + +func (pp *V3PoolProvider) getPoolAddress(tokenA, tokenB currency.Token, feeAmount swap_router.FeeAmount) (string, currency.Token, currency.Token) { + token0, token1 := tokenA.SortsByLowerAddress(tokenB) + //cacheKey = +} + +func (pp **V3PoolProvider) getPoolsData(poolAddresses string, dataName string) { + pools := pp.database.GetPools() + //results := make() + + for _, address := range poolAddresses { + //pool := pools.f + } +} diff --git a/core/providers/v3_subgraph_pool.go b/swap_router/providers/v3_subgraph_pool.go similarity index 90% rename from core/providers/v3_subgraph_pool.go rename to swap_router/providers/v3_subgraph_pool.go index f85c019..1cfca9c 100644 --- a/core/providers/v3_subgraph_pool.go +++ b/swap_router/providers/v3_subgraph_pool.go @@ -1,6 +1,8 @@ package providers -import "router/core/currency" +import ( + "router/swap_router/core/entities/currency" +) type V3SubgraphPool struct { ID string `json:"id"` diff --git a/core/providers/v3_subgraph_provider.go b/swap_router/providers/v3_subgraph_provider.go similarity index 80% rename from core/providers/v3_subgraph_provider.go rename to swap_router/providers/v3_subgraph_provider.go index d25e7d0..136e301 100644 --- a/core/providers/v3_subgraph_provider.go +++ b/swap_router/providers/v3_subgraph_provider.go @@ -1,9 +1,9 @@ package providers import ( - "router/core" - "router/core/currency" "router/database" + "router/swap_router" + "router/swap_router/core/entities/currency" ) const ( @@ -16,13 +16,13 @@ type IV3SubgraphProvider interface { } type V3SubgraphProvider struct { - chainId core.ChainId + chainId swap_router.ChainId db database.Database trackedUsdThreshold float64 liquidityThreshold float64 } -func NewV3SubgraphProvider(chainId core.ChainId, db database.Database, trackedUSDThreshold, liquidityThreshold float64) *V3SubgraphProvider { +func NewV3SubgraphProvider(chainId swap_router.ChainId, db database.Database, trackedUSDThreshold, liquidityThreshold float64) *V3SubgraphProvider { if trackedUSDThreshold == 0.0 { trackedUSDThreshold = defaultTrackedUSDThreshold } diff --git a/swap_router/quote.go b/swap_router/quote.go new file mode 100644 index 0000000..18f7573 --- /dev/null +++ b/swap_router/quote.go @@ -0,0 +1,10 @@ +package swap_router + +import ( + "router/swap_router/core/entities/fractions/math" +) + +type Quote struct { + percent *math.Fraction + amount *math.Fraction +} diff --git a/core/quoter/base_quoter.go b/swap_router/quoter/base_quoter.go similarity index 52% rename from core/quoter/base_quoter.go rename to swap_router/quoter/base_quoter.go index f6ebb0b..26a88db 100644 --- a/core/quoter/base_quoter.go +++ b/swap_router/quoter/base_quoter.go @@ -1,8 +1,8 @@ package quoter -import "router/core" +import "router/swap_router" type BaseQuoter struct { - chainId core.ChainId + chainId swap_router.ChainId protocol Protocol } diff --git a/swap_router/quoter/v3_quoter.go b/swap_router/quoter/v3_quoter.go new file mode 100644 index 0000000..9bb514d --- /dev/null +++ b/swap_router/quoter/v3_quoter.go @@ -0,0 +1,5 @@ +package quoter + +type V3Quoter struct { + BaseQuoter +} diff --git a/swap_router/router-sdk/entities/protocol.go b/swap_router/router-sdk/entities/protocol.go new file mode 100644 index 0000000..d567fcd --- /dev/null +++ b/swap_router/router-sdk/entities/protocol.go @@ -0,0 +1,9 @@ +package entities + +type Protocol string + +const ( + V2 Protocol = "V2" + V3 Protocol = "V3" + MIXED Protocol = "MIXED" +) diff --git a/swap_router/router-sdk/entities/trade.go b/swap_router/router-sdk/entities/trade.go new file mode 100644 index 0000000..c4b6836 --- /dev/null +++ b/swap_router/router-sdk/entities/trade.go @@ -0,0 +1,9 @@ +package entities + +import ( + "router/swap_router" + "router/swap_router/core/entities/currency" +) + +type Trade[TInput currency.ICurrency, TOutput currency.ICurrency, TTradeType swap_router.TradeType] struct { +} diff --git a/swap_router/router.go b/swap_router/router.go new file mode 100644 index 0000000..833bc0b --- /dev/null +++ b/swap_router/router.go @@ -0,0 +1,129 @@ +package swap_router + +import ( + currency2 "router/swap_router/core/entities/currency" + fractions2 "router/swap_router/core/entities/fractions" + "router/swap_router/core/entities/fractions/math" + "router/swap_router/core/fractions" + entities2 "router/swap_router/router-sdk/entities" + "router/swap_router/v3_sdk/entities" +) + +type V3Route struct { + entities.Route[currency2.Token, currency2.Token] + Protocol entities2.Protocol +} + +type SwapRoute struct { + quote fractions2.CurrencyAmount + trade entities2.Trade[currency2.ICurrency, currency2.ICurrency, TradeType] + route []V3RouteWithValidQuote + portionAmount fractions2.CurrencyAmount +} + +type SwapToRatioRoute struct { + SwapRoute + optimalRatio math.Fraction + postSwapTargetPool Pool +} + +type SwapToRatioStatus int + +const ( + SUCCESS SwapToRatioStatus = 1 + NO_ROUTE_FOUND SwapToRatioStatus = 2 + NO_SWAP_NEEDED SwapToRatioStatus = 3 +) + +type SwapToRatioSuccess struct { + Status SwapToRatioStatus + Result SwapToRatioRoute +} + +func (s *SwapToRatioSuccess) GetStatus() SwapToRatioStatus { + return s.Status +} + +type SwapToRatioFailure struct { + Status SwapToRatioStatus + Error string +} + +func (s *SwapToRatioFailure) GetStatus() SwapToRatioStatus { + return s.Status +} + +type SwapToRatioNoSwapNeeded struct { + Status SwapToRatioStatus +} + +func (s *SwapToRatioNoSwapNeeded) GetStatus() SwapToRatioStatus { + return s.Status +} + +type SwapToRatioResponse interface { + GetStatus() SwapToRatioStatus +} + +type SwapType int + +const ( + UNIVERSAL_ROUTER SwapType = iota + SWAP_ROUTER_O2 +) + +type FlatFeeOptions struct { + Amount BigintIsh // 금액 필드 + Recipient string // 수신자 필드 +} + +type RouterSwapOptions struct { + flatFee FlatFeeOptions + slippageTolerance fractions.Percent + recipient string + fee FeeOptions +} + +type FeeOptions struct { + fee fractions.Percent + recipient string +} + +type SwapOptionsUniversalRouter struct { + RouterSwapOptions + Type SwapType + Simulate *Simulate +} + +type Simulate struct { + FromAddress string +} + +type SwapOptionsSwapRouter02 struct { + Type SwapType // SwapType 필드 + Recipient string // 수신자 주소 + SlippageTolerance fractions.Percent // 슬리피지 허용치 + Deadline int64 // 마감 시간 (Unix 타임스탬프) + Simulate *Simulate // 선택적 필드 + InputTokenPermit *InputTokenPermit // 선택적 필드 +} + +type InputTokenPermit struct { + V int // 0, 1, 27, 28 중 하나 + R string // 문자열 타입 + S string // 문자열 타입 + Amount *string // 선택적 필드 + Deadline *string // 선택적 필드 + Nonce *string // 선택적 필드 + Expiry *string // 선택적 필드 +} + +// 원문: type SwapOptions = SwapOptionsUniversalRouter | SwapOptionsSwapRouter02 +type SwapOptions struct { + UniversalRouter *SwapOptionsUniversalRouter // 선택적 필드 + SwapRouter02 *SwapOptionsSwapRouter02 // 선택적 필드 +} + +type IRouter[RoutingConfig any] interface { + Route(amount fractions2.CurrencyAmount, quoteCurrency currency2.ICurrency, swapType TradeType, swapOptions *SwapOptions, partialRoutingConfig RoutingConfig) *SwapRoute +} diff --git a/core/routes.go b/swap_router/routes.go similarity index 54% rename from core/routes.go rename to swap_router/routes.go index 6d73547..16fb144 100644 --- a/core/routes.go +++ b/swap_router/routes.go @@ -1,4 +1,4 @@ -package core +package swap_router type Routes struct { } diff --git a/swap_router/tokens/gnot.go b/swap_router/tokens/gnot.go new file mode 100644 index 0000000..9eeb68d --- /dev/null +++ b/swap_router/tokens/gnot.go @@ -0,0 +1,19 @@ +package tokens + +import ( + currency2 "router/swap_router/core/entities/currency" +) + +type Gnot struct { + currency2.NativeCurrency +} + +func NewGnot(chainId1 int64) *Gnot { + return &Gnot{ + NativeCurrency: currency2.NativeCurrency{ + Currency: currency2.Currency{ + ChainId: chainId1, + }, + }, + } +} diff --git a/core/trade.go b/swap_router/trade.go similarity index 76% rename from core/trade.go rename to swap_router/trade.go index 805e0b8..d052e77 100644 --- a/core/trade.go +++ b/swap_router/trade.go @@ -1,4 +1,4 @@ -package core +package swap_router type Trade struct { //v3Routes V3Routes diff --git a/core/v3_candidate_pools.go b/swap_router/v3_candidate_pools.go similarity index 87% rename from core/v3_candidate_pools.go rename to swap_router/v3_candidate_pools.go index c5951a7..a97f2b5 100644 --- a/core/v3_candidate_pools.go +++ b/swap_router/v3_candidate_pools.go @@ -1,8 +1,8 @@ -package core +package swap_router import ( - "router/core/currency" - "router/core/providers" + "router/swap_router/core/entities/currency" + "router/swap_router/providers" ) // 추측하기로 사용 가능한 풀들을 땡겨오는 무언가? diff --git a/core/v3_route_with_valid_quote.go b/swap_router/v3_route_with_valid_quote.go similarity index 66% rename from core/v3_route_with_valid_quote.go rename to swap_router/v3_route_with_valid_quote.go index dc208fc..a831b22 100644 --- a/core/v3_route_with_valid_quote.go +++ b/swap_router/v3_route_with_valid_quote.go @@ -1,4 +1,4 @@ -package core +package swap_router type V3RouteWithValidQuote struct { } diff --git a/swap_router/v3_sdk/constants.go b/swap_router/v3_sdk/constants.go new file mode 100644 index 0000000..bed4ea8 --- /dev/null +++ b/swap_router/v3_sdk/constants.go @@ -0,0 +1,21 @@ +package v3_sdk + +const ADDRESS_ZERO = "0x0000000000000000000000000000000000000000" + +// The default factory enabled fee amounts, denominated in hundredths of bips. +type FeeAmount int + +const ( + LOWEST = 100 + LOW = 500 + MEDIUM = 3000 + HIGH = 10000 +) + +// The default factory tick spacings by fee amount. +var TICK_SPACINGS = map[FeeAmount]int{ + LOWEST: 1, + LOW: 10, + MEDIUM: 60, + HIGH: 200, +} diff --git a/swap_router/v3_sdk/entities/route.go b/swap_router/v3_sdk/entities/route.go new file mode 100644 index 0000000..2aaca5f --- /dev/null +++ b/swap_router/v3_sdk/entities/route.go @@ -0,0 +1,8 @@ +package entities + +import ( + "router/swap_router/core/entities/currency" +) + +type Route[TInput currency.ICurrency, TOutput currency.ICurrency] struct { +}