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.
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.
git clone git@github.com:centrifuge/liquidity-pools.git
cd liquidity-pools
forge update
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
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 |
This codebase is licensed under GNU Lesser General Public License v3.0.