Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to calculate routes for concentrated pools specifically? #70

Open
anilhelvaci opened this issue Nov 23, 2023 · 6 comments
Open

How to calculate routes for concentrated pools specifically? #70

anilhelvaci opened this issue Nov 23, 2023 · 6 comments

Comments

@anilhelvaci
Copy link

Context

I'm trying to build a program that trades on Osmosis. I want to use dynamic routes, meaning don't want to use hard coded routes for my trades.

Problem/Question

I haven't been able to find a method that calculate these routes for me yet. I'm aware of getRoutesForTrade which needs an array called pairs. Here's where the problem(or at least I think) arises because the array pairs is calculated from the pools using the makePoolPairs method. As you can see here the method makePoolPairs filters the pools into gamm pools only.

return pools
    .filter(
      (pool) =>
        pool.poolAssets.length === 2 &&
        pool.poolAssets.every(({ token }) => !token.denom.startsWith("gamm")) &&  // No concentrated liquidity pool allowed
        new BigNumber(calcPoolLiquidity(assets, pool, prices)).gte(liquidityLimit)
    )

I'm also aware that we can fetch the gamm equivalents of these concentratedPools. As application devs;

  • Are we expected to query all gamm pools, calculate routes using those and convert results to concentrated equivalent, if linked?
@haroondilshad
Copy link

haroondilshad commented Dec 27, 2023

@anilhelvaci did you figure this out? How did you get pools and prices that need to be pass here: const pairs = makePoolPairs(pools, prices);

@anilhelvaci
Copy link
Author

Hey @RonCan ✋

did you figure this out?

No, I haven't. I went with hard coding the route.

How did you get pools and prices that need to be pass here: const pairs = makePoolPairs(pools, prices);

You can get all gamm pools from this api => https://docs.osmosis.zone/api/?v=LCD#/operations/Pools

@pyramation
Copy link
Collaborator

pyramation commented Jan 8, 2024

If you need to do liquidity providing, you can checkout the FE for the main site: https://github.com/osmosis-labs/osmosis-frontend/tree/stage/packages/math/src/pool/concentrated

but it looks like it may be an issue with the actual routes? getRoutesForTrade should take in anything you pass into it

would the solution to be to make another method (or update makePoolPairs) to not filter gamm?

@anilhelvaci
Copy link
Author

would the solution to be to make another method (or update makePoolPairs) to not filter gamm?

I think this would be a sufficient approach 👍 @pyramation

@pyramation
Copy link
Collaborator

great, we're on it!

@Zetazzz
Copy link
Collaborator

Zetazzz commented Jan 22, 2024

As you can see here the method makePoolPairs filters the pools into gamm pools only.

Hi, I took a look into this. As my understanding, "pool.poolAssets.every(({ token }) => !token.denom.startsWith("gamm")) " makes all gamm out of the result, instead of "filtering the pools into gamm pools only."

Please excuse me if there's misunderstanding.

Could you please provide us more info on this issue like what's the input when unexpected output happened, then we can debug based on the input.

Thank you very much!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants