Skip to content

primitivefinance/rmm-examples

Repository files navigation

🦣 RMM Examples

License

This repository contains examples showing how to interact with the RMM protocol.

Alternatively, you can use this repository as a base if you plan on building on top of the RMM protocol, as it contains all the necessary setup to run the whole protocol locally.

⚠️ These example contracts are written for educational purposes and were NOT AUDITED. Keep this in mind before using them in production.

🚀 Usage

Clone the repository on your computer:

git clone https://github.com/primitivefinance/rmm-examples.git

Then install the required dependencies:

# Using npm
npm install

# Using yarn
yarn

After that, you can try the other commands:

# Using npm and npx

# Compile the contracts
npm run compile

# Run a test
npx hardhat test ./path/to/the/test.ts

# Style the contracts using Prettier
npm run prettier


# Using yarn

# Compile the contracts
yarn compile

# Run a test
yarn hardhat test ./path/to/the/test.ts

# Style the contracts using Prettier
yarn prettier

📚 Example Contracts

💦 LiquidityManager

This simple example shows how a contract can manage liquidity pool tokens on the behalf of users, allowing them to allocate or remove into different pools. It's a very basic version of the PrimitiveManager contract.

The features of this example are quite basic:

  • Users can allocate or remove liquidity into a pool of a predefined risky / stable pair
  • Check the liquidity of each user currently managed by the contract

See the code here.

🎁 LiquidityWrapper

The PrimitiveManager contract tokenizes liquidity pool tokens using the ERC1155 standard. This allows significant gas optimizations at a contract level, but adds a little bit of friction when it comes to integrating with other protocols, more used to deal with ERC20 tokens. Luckily, a straightforward solution to this problem is to use a "wrapper" contract.

The specifications of the LiquidityWrapper contract are extremely simple:

  • A wrapper can only be associated with a unique PrimitiveManager token id (a specific pool)
  • Deposit (wrap) liquidity pool tokens (ERC1155) to receive wrapped tokens (ERC20)
  • Withdraw (unwrap) wrapped liquidity pool tokens (ERC20) to get their unwrapped tokens back (ERC1155)

See the code here.

🧑‍🍳 PrimitiveChef

Based on the MasterChef created by SushiSwap, this contract is a reimplementation of the code with the support of ERC1155 tokens, the token standard used by the PrimitiveManager.

In a few words, the PrimitiveChef goals are to:

  • Create staking pools dedicated to specific ERC1155 tokens
  • Reward users depositing liquidity pool tokens in these staking pools

See the code here.

🏗 Building

As mentioned above, if you plan on building on top of the RMM protocol, this repository can be used as a base for your work, as it already contains:

  • A local context deploying a complete version of the protocol (PrimitiveFactory, PrimitiveEngine, PrimitiveManager and test ERC20 tokens)
  • Custom Mocha hooks specific to the RMM protocol

Feel free to remove the examples or any files you don't want to keep to make yourself at home!

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published