osmosis-labs / osmojs

OsmosJS makes it easy to compose and broadcast Osmosis and Cosmos messages
https://cosmology.zone/products/osmojs
Apache License 2.0
62 stars 32 forks source link

How to calculate routes for concentrated pools specifically? #70

Open anilhelvaci opened 7 months ago

anilhelvaci commented 7 months ago

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;

haroondilshad commented 6 months ago

@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 commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

great, we're on it!

Zetazzz commented 5 months ago

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!