Proteus AMM Engine

An Ocean-native AMM primitive

What is Proteus

Proteus is an AMM (Automated Market Maker) engine that is capable of approximating any bonding curve, enhancing Shell Protocol's market-making strategies. It is capable of extremely precise liquidity concentration across multiple price ranges, but still uses fungible LP tokens.

There are two implementations of Proteus: Static Proteus and Evolving Proteus.

Static Proteus implementation details

It turns out that in order to create any bonding curve and achieve extremely precise liquidity concentration, all you need is 4 parameters: list of slopes of the radial lines in order to create slices, list of values representing relative scale factors of each slice, a list of a values, and a list of b values representing price points of the particular slice.

Those params are labeled as lists of:

  1. ms - representing a list of slopes of the radial lines

  2. _as - list of price points of the particular slice

  3. bs - list of price points of the particular slice

  4. ks - list of values representing relative scale factors of each slice

Determining ms, _as, bs and ks values

Determining ms, _as, bs and ks values is not an easy task to do. In order to understand them better you may want to spend some time going through the files in scripts/params directory of our public repo. You will find examples of different type of pools in that folder, like well known constant product and stablepool.

Evolving Proteus

Evolving Proteus is an advanced version of the Proteus AMM engine, with which the bonding curve can change every block (or "evolve") during a specified time frame. Evolving Proteus also differs from Static Proteus in that Evolving Proteus only has one slice. Evolving Proteus is good for liquidity bootstrapping, or any use case that requires a Dutch auction. It is also good for creating managed pools.

For a thorough understanding of Proteus, it is advisable to first read the initial version of the Proteus White Paper, followed by the updated (second version) White Paper, and finally, the Update 3 document. The actual implementation of the Ocean can be accessed in our public repository, located within the Proteus.sol file at the provided link.

Last updated