Skip to content

Liquidity Pools enable seamless deployment of Centrifuge pools on any EVM-compatible blockchain

License

Notifications You must be signed in to change notification settings

centrifuge/liquidity-pools

Repository files navigation

Liquidity Pools Github Actions Foundry License: AGPL v3

Liquidity Pools enable seamless deployment of Centrifuge pools on any EVM-compatible blockchain. The multi-chain protocol was designed specifically to tokenize RWAs as ERC20 tokens featuring customizable and gas-efficient permissioning. Investors deposit and redeem onchain using the ERC7540 asynchronous tokenized vault standard. Issuers can plug-and-play custom investment features through ERC20 wrapper support and accept multiple stablecoins using ERC7575. The smart contracts are immutable, rigorously audited, and controlled by onchain governance.

How it works

Architecture

Investors can invest in multiple tranches for each RWA pool. Each of these tranches is a separate deployment of an ERC-7540 Vault and a Tranche Token.

  • ERC7540Vault: An ERC-7540 (extension of ERC-4626) compatible contract that enables investors to deposit and withdraw stablecoins to invest in tranches of pools.
  • Tranche Token: An ERC-20 token for the tranche, linked to a RestrictionManager that manages transfer restrictions. Prices for tranche tokens are computed on Centrifuge.

The deployment of these tranches and the management of investments is controlled by the underlying InvestmentManager, PoolManager, Gateway and Adapters.

  • Investment Manager: The core business logic contract that handles pool creation, tranche deployment, managing investments and sending tokens to the Escrow, and more.
  • Pool Manager: The second business logic contract that handles asset bookkeeping, and transferring tranche tokens as well as assets.
  • Gateway: Multi-Message Aggregation (MMA) implementation, receiving messages from managers, sending these messages as full payload to 1 adapter and a proof to n-1 adapters, and verifying incoming payloads and proofs and sending back to managers.
  • Adapters: Adapter implementations for messaging layers.

Developing

Getting started

git clone git@github.com:centrifuge/liquidity-pools.git
cd liquidity-pools
forge update

Testing

To run all tests locally:

forge test

To run the invariant tests using echidna:

echidna . --contract CryticTester --config echidna-property.yaml
echidna . --contract CryticTester --config echidna-assertion.yaml

To run the invariant tests using medusa:

medusa fuzz --config medusa-core.json
medusa fuzz --config medusa-aggregator.json

Audit reports

Auditor Date Engagement Report
xmxanuel July 2023 Security review Internal
Code4rena Sep 2023 Competitive audit Report
SRLabs Sep 2023 Security review Report
Cantina Oct 2023 Security review Report
Alex the Entreprenerd Mar - Apr 2024 Invariant test development Part 1 Part 2
xmxanuel May - June 2024 Security review Internal
Spearbit July 2024 Security review Report

License

This codebase is licensed under GNU Lesser General Public License v3.0.