Proteus (AMM engine)

This page is dedicated to providing a developer-focused exploration of the Proteus, Shell Protocol's Automated Market Maker (AMM) engine. For a more extensive and detailed overview, consider visiting the Proteus page on Shell Protocol's wiki.

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.

What is Proteus

Proteus is the Ocean Primitive and an AMM engine that is capable of approximating any bonding curve, enhancing Shell Protocols market-making strategies. It's capable of extremely precise liquidity concentration across multiple price ranges and fungible LP tokens. There are two type of Proteus primitives: 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 upgraded version of the Proteus AMM engine whose bonding curve can change every block (evolve) during the specific time frame, that's where the "Evolving" word in its name comes for. Evolving Proteus also differs from Static Proteus in that Evolving Proteus only has one slice. Evolving Proteus is good for liquidity bootstrapping, or any usecase needing a dutch auction. It is also good for managed pools.

Last updated