<!--
Sitemap:
- [Overview](/index): Introducing Parallel
- [Products](/introduction/products): Stablecoins & Savings
- [Use Cases](/introduction/use-cases): Concrete use cases of Parallel
- [Parallel V3](/products/parallel-v3/): Parallel V3 is a stablecoins protocol allowing the creation of decentralized, capital-efficient and over-collateralized stablecoins built using a modular & upg…
- [How It Works](/products/parallel-v3/how-it-works/): Parallel V3 is designed as a modular and scalable system where each functional component exists as an independent module. These modules can be deployed, upgrad…
- [Parallelizer Module](/products/parallel-v3/how-it-works/parallelizer-module): Explaining the Parallelizer Module
- [Savings Module](/products/parallel-v3/how-it-works/savings-module): The Parallel Savings Module is what allows Parallel stablecoin holders to earn a native yield based on the returns generated by the protocol on its assets back…
- [Bridging Module](/products/parallel-v3/how-it-works/bridging-module): The Bridging Module is entirely based on the Parallel V2 [Bridging Module](/products/parallel-v2/how-it-works/bridging-module), which is live on Ethereum, Poly…
- [Flashloan Module](/products/parallel-v3/how-it-works/flashloan-module): Flash loans (also called One Block Borrows) are special transactions that allow the borrowing of an asset, as long as the borrowed amount (and a fee) is return…
- [Stablecoins & Savings](/products/parallel-v3/stablecoins-and-savings/): Introducing Parallel Stablecoins
- [USDp & sUSDp](/products/parallel-v3/stablecoins-and-savings/usdp-and-susdp/)
- [Implementation](/products/parallel-v3/stablecoins-and-savings/usdp-and-susdp/implementation): Detailing current USDp production implementation
- [Fee Distribution](/products/parallel-v3/stablecoins-and-savings/usdp-and-susdp/fee-distribution): Parallel V3 generated fees by the USDp codebase are distributed as follow:
- [Governance](/products/parallel-v3/governance): While the main functionalities of Parallel V3 can work autonomously with no governance involved, Parallel V3 is not a governance-free protocol and is controlle…
- [Licensing](/products/parallel-v3/licensing): Parallel V3 is divided into 3 different repositories, each with different licenses:
- [Parallel V2](/products/parallel-v2/): Parallel V2 is a decentralized protocol that issues stablecoins, the € stablecoin ([PAR](https://docs.parallel.best/parallel-protocol/parallel-v2/par)) and the…
- [Stablecoins](/products/parallel-v2/stablecoins/): Parallel V2 Stablecoins
- [PAR](/products/parallel-v2/stablecoins/par/): **Token Symbol:** PAR
- [How does PAR work?](/products/parallel-v2/stablecoins/par/how-does-par-work)
- [Where can I get PAR ?](/products/parallel-v2/stablecoins/par/where-can-i-get-par)
- [paUSD](/products/parallel-v2/stablecoins/par-1/): paUSD is a USD stablecoin backed by collaterals, and can only be minted with governance-approved collaterals. paUSD are created when users deposit accepted tok…
- [How does paUSD work?](/products/parallel-v2/stablecoins/par-1/how-does-pausd-work)
- [Where can I get paUSD ?](/products/parallel-v2/stablecoins/par-1/where-can-i-get-pausd)
- [How It Works](/products/parallel-v2/how-it-works/)
- [Classic Vaults](/products/parallel-v2/how-it-works/vaults/): The core of the Parallel Protocol are **Vaults**. Users mint **PAR/paUSD** by depositing **collateral** such as Ether (ETH) into the Vault smart contract. The…
- [Depositing](/products/parallel-v2/how-it-works/vaults/depositing): The first step to start interacting with the Mimo protocol is to create a Vault and deposit collateral. Increasing the amount of collateral deposited increases…
- [Borrowing](/products/parallel-v2/how-it-works/vaults/borrowing): Borrowers can repay or borrow more PAR/paUSD at any time, within the limits of the MCR. Borrowing alters the total supply of outstanding PAR/paUSD. When one bo…
- [Fees](/products/parallel-v2/how-it-works/vaults/fees/): The Parallel Protocol is generating revenues by taking fees on minted PAR/paUSD and distribute them to various actors. You can learn more:
- [Fees Generation](/products/parallel-v2/how-it-works/vaults/fees/fees-generation): The Parallel Protocol is generating revenues by taking fees on minted PAR/paUSD. These fees are called "Origination Fee" and "Borrowing Fee".
- [Withdrawing](/products/parallel-v2/how-it-works/vaults/withdrawing): Withdrawing involves redeeming PAR/paUSD for the underlying collateral. When redeemed, the system burns PAR/paUSD tokens to repay a vault’s debt. This debt inc…
- [Repaying](/products/parallel-v2/how-it-works/vaults/repaying): Vault owners are recommended to keep their collateral ratios well above the MCR and LR to avoid liquidations despite collateral price changes. One way to maint…
- [Liquidating](/products/parallel-v2/how-it-works/vaults/liquidating): Liquidation ensures that there is always sufficient collateral to cover all PAR/paUSD tokens. Vaults below a specified health factor are subject to liquidation…
- [Bridging Module](/products/parallel-v2/how-it-works/bridging-module/): Tunnel, the Parallel bridging module is a secure, scalable, and decentralized bridging infrastructure which enable seamless transfer of PAR and paUSD between s…
- [LayerZero Infrastructure](/products/parallel-v2/how-it-works/bridging-module/layerzero-infrastructure)
- [Specifications](/products/parallel-v2/how-it-works/bridging-module/specifications)
- [Implementation](/products/parallel-v2/how-it-works/bridging-module/implementation/): The currently voted implementation of the PAR & paUSD bridging modules can be found here:
- [PAR](/products/parallel-v2/how-it-works/bridging-module/implementation/par)
- [paUSD](/products/parallel-v2/how-it-works/bridging-module/implementation/pausd)
- [Super Vaults (SV)](/products/parallel-v2/how-it-works/super-vaults-sv/): Super Vaults are a versatile tool for managing positions in changing markets. For example, if you're initially very bullish on an asset like wETH, you can use…
- [Leveraging](/products/parallel-v2/how-it-works/super-vaults-sv/leveraging): SuperVaults allow for leveraging assets without any additional capital.
- [Rebalancing](/products/parallel-v2/how-it-works/super-vaults-sv/rebalancing): In addition to leveraging, SuperVaults also allow for rebalancing vaults to use another collateral without requiring any additional capital.
- [EmptyVault](/products/parallel-v2/how-it-works/super-vaults-sv/emptyvault): The `emptyVault` feature can be used to once we are done using a vault for a specific collateral and we wish to repay all debts for the collateral and withdraw…
- [Automated Rebalance](/products/parallel-v2/how-it-works/super-vaults-sv/automated-rebalance)
- [Managed Rebalance](/products/parallel-v2/how-it-works/super-vaults-sv/managed-rebalance): The automated vault system is designed to provide users with confidence in each automated rebalance, ensuring that rebalances are done in a sensible manner and…
- [Licensing](/products/parallel-v2/licensing): Parallel V2 is licensed under MIT license. Basically, you can do whatever you want as long as you include the original copyright and license notice in any copy…
- [Proof of Solvency](/security/proof-of-solvency): Parallel V3 Proof of Solvency
- [Parallel Emergency Guardians](/security/parallel-emergency-guardians): As the protocol is deployed on 16 chains and brings a major innovation in the ecosystem, it is possible that, despite different audits, a minor or major proble…
- [Hypernative](/security/hypernative): As the protocol is deployed on 16 chains and brings a major innovation in the ecosystem, it is possible that, despite different audits, a minor or major proble…
- [Keepers](/security/keepers): Role and responsibilities of Keepers in maintaining Parallel V3 protocol operations
- [Bug Bounty Program](/security/bug-bounty-program): Introduced & approved by the DAO in [PGP-28 l Immunefi Bug Bounty Program](https://gov.parallel.best/t/pgp-28-l-immunefi-bug-bounty-program/478), the Parallel…
- [Insurance Fund](/security/insurance-fund): Detailing the coverage and strategy of the Parallel Insurance Fund
- [Audits](/security/audits): A breakdown of security reviews covering deployed smart contracts of Parallel
- [Parallel Governance Token (PRL)](/governance/parallel-governance-token-prl/): PRL is the governance token of the Parallel Protocol, which is a DAO-governed protocol. Changes are made through proposals and voted by stakers of the PRL toke…
- [Issuance](/governance/parallel-governance-token-prl/issuance): Understanding the PRL issuance process
- [Bridging Module](/governance/parallel-governance-token-prl/bridging-module/): The PRL bridging module is a secure, scalable, and decentralized bridging infrastructure which enable seamless transfer of PRL between supported chains. The mo…
- [Specifications](/governance/parallel-governance-token-prl/bridging-module/specifications): PRL Bridging Module Specifications
- [Implementation](/governance/parallel-governance-token-prl/bridging-module/implementation): PRL Bridging Module Implementation
- [Tokenomics](/governance/parallel-governance-token-prl/tokenomics/): The new Parallel protocol tokenomics is a complete overhaul of the way PRL is involved in the economic and social operations of the protocol, with the aim of a…
- [Epoch Concept](/governance/parallel-governance-token-prl/tokenomics/epoch-concept): The epoch will serve as the central unit of time in the new tokenomics. An epoch consists of a number of 30 days. It will be used to determine the [ParaBoost](…
- [Staking Mechanisms](/governance/parallel-governance-token-prl/tokenomics/staking-mechanisms): PRL holders have the option to stake their tokens in 2 different forms: sPRL1, single PRL staking; and sPRL2, PRL/wETH 80/20 BPT staking. Each option allows ho…
- [ParaBoost](/governance/parallel-governance-token-prl/tokenomics/paraboost): Parallel Boost (ParaBoost) is a concept that distributes fees to PRL stakers who generate the most positive externalities that benefit the protocol.
- [Fee Distribution](/governance/parallel-governance-token-prl/tokenomics/fee-distribution): One of the major innovations implemented with the PRL new tokenomics is the redistribution of a portion of the fees generated by the protocol to [PRL stakers](…
- [Governance](/governance/parallel-governance-token-prl/governance): sPRL1 and sPRL2 holders have voting power in the Parallel governance, calculated via the ParaBoost of the previous epoch. To learn more about Governance Proces…
- [MIMO to PRL Migration](/governance/parallel-governance-token-prl/mimo-to-prl-migration): On April 18th 2025 the DAO approved a migration of the MIMO Token (the previous governance token of the Parallel Protocol) for a new token, PRL.
- [sPRL and Voting Power](/governance/sprl): Understanding how to participate in the DAO.
- [Governance Process](/governance/governance-process): The Parallel Protocol is controlled by sPRL token holders who vote on off-chain proposals (on Parallel [Snapshot](https://vote.parallel.best/#/)) that govern t…
- [Proposal Framework](/governance/proposal-framework/): With the recent Parallel Governance Framework Proposal [update](https://gov.parallel.best/t/mip-29-l-update-the-governance-framework/384), the Parallel protoco…
- [Parallel Integration Request (PIR)](/governance/proposal-framework/parallel-integration-request-pir): Explaining Parallel Integration Request
- [Parallel Governance Proposal (PGP)](/governance/proposal-framework/parallel-governance-proposal-pgp): Explaining Parallel Governance Proposal
- [Parallel Improvement Protocol (PIP)](/governance/proposal-framework/parallel-improvement-protocol-pip): Explaining Parallel Improvement Protocol
- [DAO Multisigs](/governance/dao-multisigs/): DAO multisigs controls several functions of the protocol including the treasury, protocol parameters and the blog. The DAO multisig will require 5/8 signatures…
- [DAO Multisigs Elections](/governance/dao-multisigs/dao-multisigs-elections/): Multisigs DAO signers are elected every 6 months. Find out about previous elections here:
- [Election 1](/governance/dao-multisigs/dao-multisigs-elections/election-1): Discussion: [MIP-1┃DAO Multisig Election 1 ](https://gov.parallel.best/t/mip-1-dao-multisig-election-1/157)\ Vote: [Snapshot](https://vote.parallel.best/#/prop…
- [Election 2](/governance/dao-multisigs/dao-multisigs-elections/election-2): Discussion: [MIP-10┃DAO Multisig Election 2](https://gov.parallel.best/t/mip-10-dao-multisig-election-2/215)\ Vote: [Snapshot](https://vote.parallel.best/#/pro…
- [Election 3](/governance/dao-multisigs/dao-multisigs-elections/election-3): Discussion: [MIP-15┃DAO Multisig Election 3](https://gov.parallel.best/t/mip-15-dao-multisig-election-3/279)\ Vote: [Snapshot](https://vote.parallel.best/#/pro…
- [Election 4](/governance/dao-multisigs/dao-multisigs-elections/election-4): Discussion: [MIP-18┃DAO Multisig Election 4](https://gov.parallel.best/t/mip-18-dao-multisig-election-4/312)\ Vote: [Snapshot](https://vote.parallel.best/#/pro…
- [Election 5](/governance/dao-multisigs/dao-multisigs-elections/election-5): Discussion: [MIP-26 l DAO Multisig Election 5](https://gov.parallel.best/t/mip-26-l-dao-multisig-election-5/361)\ Vote: [Snapshot](https://vote.parallel.best/#…
- [Election 6](/governance/dao-multisigs/dao-multisigs-elections/election-6): Discussion: [PIP-38 l DAO Multisig Election 6](https://gov.parallel.best/t/pip-38-l-dao-multisig-election-6/423)\ Vote: [Snapshot](https://vote.parallel.best/#…
- [Election 7](/governance/dao-multisigs/dao-multisigs-elections/election-7): Discussion: [PIP-49 l DAO Multisig Election 7](https://gov.parallel.best/t/pip-49-l-dao-multisig-election-7/470)\ Vote: [Snapshot](https://vote.parallel.best/#…
- [Election 8](/governance/dao-multisigs/dao-multisigs-elections/election-8): Discussion: [PIP-53 l DAO Multisig Election 8](https://gov.parallel.best/t/pip-53-l-dao-multisig-election-8/498)\ Vote: [Snapshot](https://vote.parallel.best/#…
- [DAO Treasury](/governance/dao-treasury/)
- [DAO Treasury Reports](/governance/dao-treasury/dao-treasury-reports): :::warning 1. The August 2025 DAO Treasury Report doesn't count the value of 249,991 USDp. Thus the real DAO Treasury value is \$1,190,486. 2. The October 2025…
- [Introduction](/developers-hub/developers-guide): Coming Soon ([https://github.com/orgs/parallel-protocol/repositories](https://github.com/orgs/parallel-protocol/repositories))
- [Parallel Governance Token (PRL)](/developers-hub/parallel-governance-token-prl/)
- [Tokenomics](/developers-hub/parallel-governance-token-prl/tokenomics/)
- [Key Operations Flows](/developers-hub/parallel-governance-token-prl/tokenomics/key-operations-flows)
- [Contracts](/developers-hub/parallel-governance-token-prl/tokenomics/contracts)
- [Parallel V3](/developers-hub/parallel-v3/)
- [Parallelizer Module](/developers-hub/parallel-v3/parallelizer-module): :::warning Known Issue:
- [Savings Module](/developers-hub/parallel-v3/savings-module)
- [Flashloan Module](/developers-hub/parallel-v3/flashloan-module)
- [Bridging Module](/developers-hub/parallel-v3/bridging-module)
- [Onchain Tools](/developers-hub/parallel-v3/onchain-tools/)
- [Oracles](/developers-hub/parallel-v3/onchain-tools/oracles/): Explore Parallel price feeds deployed by third party protocols.
- [DIA](/developers-hub/parallel-v3/onchain-tools/oracles/dia/): Following the approval of [PGP-34 l Launch Parallel Stablecoins Price Feeds using DIA](https://gov.parallel.best/t/pgp-34-l-launch-parallel-stablecoins-price-f…
- [Fundamental](/developers-hub/parallel-v3/onchain-tools/oracles/dia/fundamental): More details on Fundamental DIA Oracles
- [Market](/developers-hub/parallel-v3/onchain-tools/oracles/dia/market): More details on Market DIA Oracles
- [RedStone](/developers-hub/parallel-v3/onchain-tools/oracles/redstone/): Following the approval of [PGP-33 l Launch Parallel Stablecoins Price Feeds using Redstone](https://gov.parallel.best/t/pgp-33-l-launch-parallel-stablecoins-pr…
- [Fundamental](/developers-hub/parallel-v3/onchain-tools/oracles/redstone/fundamental): More details on Fundamental RedStone Oracles
- [Offchain Tools](/developers-hub/parallel-v3/offchain-tools/)
- [Subgraphs](/developers-hub/parallel-v3/offchain-tools/subgraphs): Detailing the list of available subgraphs.
- [Dune](/developers-hub/parallel-v3/offchain-tools/dune): Coming soon
- [Build on Parallel](/developers-hub/parallel-v3/build-on-parallel/): The goal of these guides is to help developers, such as third-party protocols, arbitrageurs or keepers; understand and build on-top of Parallel.
- [Parallelizer Module Integration](/developers-hub/parallel-v3/build-on-parallel/parallelizer-module-integration): The Parallelizer module serves as the core minting and burning engine for Parallel stablecoins.
- [Savings Module Integration](/developers-hub/parallel-v3/build-on-parallel/savings-module-integration): The Savings module provides a yield-bearing vault system built on the ERC4626 standard, allowing users to deposit Parallel stablecoins and earn interest throug…
- [Flashloan Module Integration](/developers-hub/parallel-v3/build-on-parallel/flashloan-module-integration): The Flashloan module serves as the core minting and burning engine for Parallel stablecoins.
- [Parallel V2](/developers-hub/parallel-v2/)
- [Classic Vaults](/developers-hub/parallel-v2/classic-vaults/): The Parallel Protocol's classic vaults smart contracts are open source on Github:
- [Architecture](/developers-hub/parallel-v2/classic-vaults/architecture): ​The Parallel Protocol is a collection of decentralized and non-custodial smart contracts built to support the rest of the Decentralised Finance (DeFi) ecosyst…
- [VaultsCore](/developers-hub/parallel-v2/classic-vaults/vaultscore): The **VaultsCore** contract is the main interface for the user to interact with the Parallel protocol’s collateralized debt system, such as depositing, borrowi…
- [Opening a vault](/developers-hub/parallel-v2/classic-vaults/opening-a-vault): *As of July 2021, the Parallel Protocol Vaults supports the following collateral assets: WETH, WBTC, and USDC.*
- [Borrowing and minting PAR/paUSD](/developers-hub/parallel-v2/classic-vaults/borrowing-and-minting-par-pausd): To borrow and mint PAR/paUSD equal to `BORROW_AMOUNT`, call the `VaultsCore.borrow()` function.
- [Bridging Module](/developers-hub/parallel-v2/bridging-module/)
- [Architecture](/developers-hub/parallel-v2/bridging-module/architecture)
- [Sample Use Cases](/developers-hub/parallel-v2/bridging-module/sample-use-cases)
- [Super Vault (SV)](/developers-hub/parallel-v2/super-vault-sv/): The Super Vaults smart contracts are open source on Github:
- [Proxy Design](/developers-hub/parallel-v2/super-vault-sv/proxy-design/)
- [MIMOProxy](/developers-hub/parallel-v2/super-vault-sv/proxy-design/mimoproxy): Super Vault utilizes a proxy pattern to enable users to make proxy calls on behalf of other users and interact with various contracts (e.g., Parallel core prot…
- [MIMOProxyGuard](/developers-hub/parallel-v2/super-vault-sv/proxy-design/mimoproxyguard): As previously mentioned, the management of MIMOProxy's permissions has been delegated to the `MIMOProxyGuard`, which is deployed through the Openzeppelin Clone…
- [MIMOProxyFactory](/developers-hub/parallel-v2/super-vault-sv/proxy-design/mimoproxyfactory): The `MIMOProxyFactory` handles :
- [Action Contracts](/developers-hub/parallel-v2/super-vault-sv/action-contracts/)
- [MIMOEmptyVault](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoemptyvault): The `MIMOEmptyVault` action contracts handle the super vault empty vault logic described in [Empty Vault](/products/parallel-v2/how-it-works/super-vaults-sv/em…
- [MIMOLeverage](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoleverage): The `MIMOLeverage` action contract handle the super vault empty vault logic described in [Leveraging](/products/parallel-v2/how-it-works/super-vaults-sv/levera…
- [MIMORebalance](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimorebalance): The `MIMOLeverage` action contract handle the super vault empty vault logic described in [Rebalancing](/products/parallel-v2/how-it-works/super-vaults-sv/rebal…
- [MIMOAutoRebalance](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoautorebalance): The `MIMOAutoRebalance` action contract handle the super vault empty vault logic described in [Automated Rebalance](/products/parallel-v2/how-it-works/super-va…
- [MIMOManagedRebalance](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimomanagedrebalance): The `MIMOManagedRebalance` action contract handle the super vault empty vault logic described in [Managed Rebalance](/products/parallel-v2/how-it-works/super-v…
- [MIMOProxyActions](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimoproxyactions): The `MIMOProxyActions` contract can be seen as an extension of the `MIMOProxy`. It adds 2 main functionalities :
- [MIMOVaultActions](/developers-hub/parallel-v2/super-vault-sv/action-contracts/mimovaultactions): The `MIMOVaultActions` actions contract is a mirror of the `VaultsCore` owner access restricted functionalities. Its sole purpose is to provide a readable way…
- [Leverage Max Amount Derivation](/developers-hub/parallel-v2/super-vault-sv/leverage-max-amount-derivation): If we have a starting amount of collateral `S`, the Minimum Collateralization Ratio (MCR) of the collateral limits how much additional collateral `L` we can le…
- [Addresses](/developers-hub/contract-addresses/): Deployed Parallel Contracts
- [Parallel V3](/developers-hub/contract-addresses/parallel-v3/): In this section you can find deployed Parallel V3 contract addresses:
- [USDp Contract Addresses](/developers-hub/contract-addresses/parallel-v3/usdp/): Deployed USDp contracts across supported chains.
- [PRL Contract Addresses](/developers-hub/contract-addresses/parallel-v3/prl/): Deployed PRL contracts across supported chains.
- [Parallel V2](/developers-hub/contract-addresses/parallel-v2/): In this section you can find deployed contract addresses for PAR & paUSD:
- [PAR Contract Addresses](/developers-hub/contract-addresses/parallel-v2/par/): Deployed PAR contracts across supported chains.
- [PAUSD-DEPRECATED Contract Addresses](/developers-hub/contract-addresses/parallel-v2/pausd-deprecated/): Deployed PAUSD-DEPRECATED contracts across supported chains.
- [MIMO-DEPRECATED Contract Addresses](/developers-hub/contract-addresses/parallel-v2/mimo-deprecated/): Deployed MIMO-DEPRECATED contracts across supported chains.
- [Build with Parallel](/agents/overview): Accept stablecoin payments from AI agents in any API. Drop-in middleware for Express, Next.js, Fastify, and Hono. Free, open source, zero platform fees.
- [What is x402?](/agents/x402/): x402 is the HTTP-native payment standard for AI agents. Accept stablecoin payments per request with zero platform fees, gas sponsored on L2, and no signup.
- [Accept stablecoins in Express in 5 minutes](/agents/x402/quickstart): Add stablecoin payment support to any Express, Next.js, Fastify, or Hono API with one middleware. Free, gasless on L2, no signup.
- [How the Parallel x402 facilitator works](/agents/x402/concepts): Routing, fees, gas sponsoring, and supported networks for the Parallel x402 facilitator. Accept USDp, USDC, and more with zero platform fees.
- [The verify / settle flow](/agents/x402/verify-vs-settle): How the Parallel x402 middleware verifies a payment off-chain, runs your handler, then settles on-chain — so agents are never charged for failed requests.
- [x402 SDK & facilitator API reference](/agents/x402/api-reference): Configuration, framework adapters, and the facilitator client for the Parallel x402 SDK — paymentMiddleware, withPayment, FacilitatorClient, and createPaymentGate.
- [x402 payment schemas](/agents/x402/schemas): Wire formats for the Parallel x402 payment headers — PaymentRequired, the signed payment payload, and the settlement confirmation.
- [x402 error codes](/agents/x402/error-codes): Reference for the errors thrown by the Parallel x402 SDK and the error codes propagated from the facilitator on a rejected payment.
- [Self-host the facilitator](/agents/x402/self-hosting): Run the open-source Parallel x402 facilitator yourself. MIT licensed — your traffic is never gated by Cooper Labs.
- [Webhooks](/agents/x402/webhooks): Merchant webhooks for the Parallel x402 facilitator are coming in V1.1. Until then, confirm payments by polling or by watching your wallet on-chain.
- [Migrate from Coinbase x402 to Parallel](/agents/recipes/migrate-from-coinbase-x402): Switch your facilitator URL and start accepting USDp, USDC, and other major stablecoins. One line of code, no breaking changes.
- [Frequently asked questions](/agents/faq): Common questions about the Parallel x402 facilitator and SDK — fees, supported stablecoins, accounts, self-hosting, and how it compares to Stripe and Coinbase x402.
- [User Guides](/resources/user-guides): Parallel is a protocol running on 16 blockchains. This means that you need a wallet to use the protocol.
-->

# Parallelizer Module Integration

The Parallelizer module serves as the core minting and burning engine for Parallel stablecoins.

The contract works as a [Diamond Proxy](https://eips.ethereum.org/EIPS/eip-2535) with multiple implementation facets. This [repo](https://github.com/parallel-protocol/parallel-parallelizer/tree/main/contracts/parallelizer) contains the contract implementation with all its facets.

In this guide, we explain how to interact with the Parallelizer Module and fetch basical information from it. For more in depth information on how the Parallelizer and its functions work, you can directly look into the code.

:::info
The Parallelizer Module can be used for any Parallel stablecoins: find its deployment addresses [here](/developers-hub/contract-addresses/parallel-v3).
:::

## Overview

The Parallelizer Module provides a unified interface for minting and burning Parallel stablecoins using various collateral assets. The system operates on oracle-based pricing with configurable fees, offering flexibility for different use cases.

### Key Features

* **Unified Swap Interface**: Both minting and burning operations use the same swap-based functions
* **Oracle-Based Pricing**: Real-time pricing through integrated oracles
* **Flexible Fee Structure**: Dynamic fees that can be adjusted per collateral type
* **Multiple Collateral Support**: Work with various supported assets (e.g., USDe for USDp)
* **Gas-Efficient Operations**: Optimized for cost-effective transactions

### Operation Types

The system distinguishes between mint, burn & redeem operations:

* **Mint**: When `tokenIn` is a collateral asset → Allow the mint of stablecoins
* **Burn**: When `tokenOut` is a collateral asset → Allow the burn of stablecoins for collateral
* **Redeem**: `redeem` → Allow the redemption of stablecoins against a portion of the collateral in the backing

## Mint/Burn

### Getting Price Quotes

Before executing any swap operation, you'll want to get accurate price quotes. The Parallelizer Module provides two quote functions that simulate the exact outcome of a swap at the current block.

#### Input-Based Quotes (`quoteIn`)

Use this when you know exactly how much input you want to provide:

```solidity
function quoteIn(uint256 amountIn, address tokenIn, address tokenOut)
    external view returns (uint256 amountOut);
```

**Parameters:**

* `amountIn`: The exact amount of input tokens you plan to swap
* `tokenIn`: The token you're providing (collateral for mint, stablecoin for burn)
* `tokenOut`: The token you want to receive (stablecoin for mint, collateral for burn)

**Returns:**

* `amountOut`: The exact amount of output tokens you'll receive

#### Output-Based Quotes (`quoteOut`)

Use this when you need a specific amount of output tokens:

```solidity
function quoteOut(uint256 amountOut, address tokenIn, address tokenOut)
    external view returns (uint256 amountIn);
```

**Parameters:**

* `amountOut`: The exact amount of output tokens you need
* `tokenIn`: The token you're providing
* `tokenOut`: The token you want to receive

**Returns:**

* `amountIn`: The exact amount of input tokens required

:::warning

* Quote functions will revert if insufficient liquidity is available (e.g., during burn operations when funds are deployed in strategies)
* All conditions that would cause swap functions to revert will also cause quote functions to revert
* Operations may be paused for specific collateral types - quotes will reflect this status
  :::

### Executing Swaps

Once you have your quotes and slippage parameters ready, you can execute the actual swap. The Parallelizer Module offers four main swap functions to handle different scenarios.

#### Exact Input Swaps (`swapExactInput`)

Perfect when you know exactly how much you want to spend:

```solidity
function swapExactInput(
    uint256 amountIn,
    uint256 amountOutMin,
    address tokenIn,
    address tokenOut,
    address to,
    uint256 deadline
) external returns (uint256 amountOut);
```

**Parameters:**

* `amountIn`: Exact amount of input tokens to swap
* `amountOutMin`: Minimum acceptable output (slippage protection)
* `tokenIn`: Input token address
* `tokenOut`: Output token address
* `to`: Recipient address for output tokens
* `deadline`: Timestamp before which the redemption should have occured (0 = no deadline check)

**Returns:**

* `amountOut`: Actual amount of tokens received

**Prerequisites:**

* For mint operations: Approve the contract to spend your input tokens
* For burn operations: No approval needed (you're burning your own tokens)

#### Exact Output Swaps (`swapExactOutput`)

Use this when you need a specific amount of output tokens:

```solidity
function swapExactOutput(
    uint256 amountOut,
    uint256 amountInMax,
    address tokenIn,
    address tokenOut,
    address to,
    uint256 deadline
) external returns (uint256 amountIn);
```

**Parameters:**

* `amountOut`: Exact amount of output tokens needed
* `amountInMax`: Maximum input tokens you're willing to spend
* `tokenIn`: Input token address
* `tokenOut`: Output token address
* `to`: Recipient address for output tokens
* `deadline`: Timestamp before which the redemption should have occured (0 = no deadline check)

**Returns:**

* `amountIn`: Actual amount of input tokens consumed

**Prerequisites:**

* For mint operations: Approve the contract for at least `amountInMax`
* For burn operations: No approval needed

### Executing Gasless Swaps

For enhanced user experience, the Parallelizer Module supports gasless minting operations using Uniswap Permit2 signatures. This eliminates the need for separate approval transactions, allowing users to mint stablecoins in a single transaction.

#### Key Benefits

* **Single Transaction**: Combine approval and swap in one operation
* **Better UX**: Users don't need to wait for approval confirmations
* **Gas Efficiency**: Reduces overall transaction costs
* **Security**: Leverages battle-tested Permit2 infrastructure

#### Permit-Based Functions

The system provides two permit-enabled functions that mirror the standard swap functions:

**Exact Input Swaps with Permit (`swapExactInputWithPermit`)**

```solidity
function swapExactInputWithPermit(
    uint256 amountIn,
    uint256 amountOutMin,
    address tokenIn,
    address to,
    uint256 deadline,
    bytes calldata permitData
) external returns (uint256 amountOut);
```

**Parameters:**

* `amountIn`: Exact amount of input tokens to swap
* `amountOutMin`: Minimum acceptable output (slippage protection)
* `tokenIn`: Input token address
* `to`: Recipient address for output tokens
* `deadline`: Timestamp before which the redemption should have occured (0 = no deadline check)

**Returns:**

* `amountOut`: Actual amount of tokens received

**Prerequisites:**

* For mint operations: Approve the contract using Permit2 to spend your `AmountIn` tokens

**Exact Output Swaps with Permit (`swapExactOutputWithPermit`)**

```solidity
function swapExactOutputWithPermit(
    uint256 amountOut,
    uint256 amountInMax,
    address tokenIn,
    address to,
    uint256 deadline,
    bytes calldata permitData
) external returns (uint256 amountIn);
```

**Parameters:**

* `amountOut`: Exact amount of output tokens needed
* `amountInMax`: Maximum input tokens you're willing to spend
* `tokenIn`: Input token address
* `to`: Recipient address for output tokens
* `deadline`: Timestamp before which the redemption should have occured (0 = no deadline check)

**Returns:**

* `amountIn`: Actual amount of input tokens consumed

**Prerequisites:**

* For mint operations: Approve the contract using Permit2 for at least `amountInMax`

:::warning

* These functions are **mint-only** operations (no `tokenOut` parameter needed)
* The `permitData` contains the Permit2 signature and authorization details
* All other parameters follow the same patterns as their non-permit counterparts
* Users must have previously allowed the Permit2 contract to spend their tokens
  :::

## Redemptions <a href="#redemptions" id="redemptions" />

The Parallelizer Module enables redeeming stablecoins against a portion of the collateral in the backing. This feature exists per se and does not need to be activated by governance to be used.

### Quote a Redemption <a href="#quote-a-redemption" id="quote-a-redemption" />

Like the swap functions, redemptions come with a quote function that simulates the exact output that a redemption of stablecoins would give at a given block.

```solidity
function quoteRedemptionCurve(
    uint256 amount
) external view returns (address[] memory tokens, uint256[] memory amounts);
```

**Parameters:**

* `amount`: Amount of stablecoins to redeem

**Return Values:**

* `tokens`: List of tokens that would be given
* `amounts`: Amount that would be obtained for each token in the `tokens` array

:::info
This function does not revert if redemptions have been temporarily paused.
:::

In normal conditions, the amount of tokens outputted by this function is the amount of collateral assets supported by the system, following their order in the `collateralList`.

Yet, if one collateral has its liquidity managed through strategies, then it's possible that this asset has sub-collaterals with it. In this situation, these sub-collaterals may be sent during the redemption process and the `minAmountOuts` array length will be bigger than the `collateralList` length. If there are 3 collateral assets and the 2nd collateral asset in the list (at index 1) consists of 3 sub-collaterals, then the ordering of the token list will be as follows: `[collat 1, sub-collat 1 of collat 2, sub-collat 2 of collat 2, sub-collat 3 of collat 2, collat 3]`

### Execute a Redemption <a href="#execute-a-redemption" id="execute-a-redemption" />

The main function to process a redemption with the Parallelizer is the `redeem` function.

```solidity
function redeem(
    uint256 amount,
    address receiver,
    uint256 deadline,
    uint256[] memory minAmountOuts
) external returns (address[] memory tokens, uint256[] memory amounts);
```

**Parameters:**

* `amount`: Amount of stablecoins to redeem
* `receiver`: Address which should be receiving the output tokens
* `deadline`: Timestamp before which the redemption should have occured
* `minAmountOuts`: Minimum amount of each token given back in the redemption to obtain. The function reverts if the redemption brings less than what was specified for a given token. The order of the amounts given in this list must reflect the order of `tokens` returned by the `quoteRedemptionCurve` function.

**Return Values:**

* `tokens`: List of tokens returned (exactly the same as `quoteRedemptionCurve`)
* `amounts`: Amount given for each token in the `tokens` array

To correctly order the elements in the `minAmountOuts` array, it is recommended to call the `quoteRedemptionCurve` function.

If the Parallelizer does not have enough tokens at hand (because these are invested in another contract), but redemption computations estimate that tokens must still be sent, then the `redeem` call will revert when the contract is trying to process the token transfer.

It is possible to instruct the system to forfeit some tokens in the redemption process by using the `redeemWithForfeit` function.

```solidity
function redeemWithForfeit(
    uint256 amount,
    address receiver,
    uint256 deadline,
    uint256[] memory minAmountOuts,
    address[] memory forfeitTokens
) external returns (address[] memory tokens, uint256[] memory amounts);
```

If a token is forfeited because its address is in the `forfeitTokens` array, then the Parallelizer will not try to send the tokens to `receiver` even if it has enough at hand to do so. The length and the ordering of the addresses in the `forfeitTokens` array can be set at will: before sending a token, the `redemptionWithForfeit` function just checks whether this token address can be found in the `forfeitTokens` array.

:::info
No approval is needed before calling redemption functions.
:::

:::warning
Redemptions can be extraordinarily paused by governance. In which case, all the redemption functions would revert (but not the `quoteRedemptionCurve` function).
:::

## Get the Parallelizer Module facet addresses <a href="#get-the-contracts-facet-addresses" id="get-the-contracts-facet-addresses" />

As a Diamond Proxy, the Parallelizer Module is a proxy contract which delegates calls that are made to it to corresponding facets. The contract has a dummy implementation facet which enables anyone to directly call the Parallelizer functions on block explorers, just like you'd do with a `TransparentUpgradeableProxy` contract.

As such when clicking on block explorers to view the implementation contract of the Parallelizer, you'll be directed to this dummy implementation.

To get the facet addresses of a Parallelizer implementation, you can simply call the `facetAddresses` function of the contract which gives the list of all supported facets.

## Get the Parallelizer Module supported collateral assets <a href="#get-the-systems-supported-collateral-assets" id="get-the-systems-supported-collateral-assets" />

The Parallelizer Module supports different collateral assets to mint a stablecoin. Many functions in the contract take as argument a supported collateral and revert if the address given does not correspond to a collateral.

The `getCollateralList` function returns the list of all valid collateral assets.

For all the collateral assets supported here, you may then call any of the view functions to get information about how they are setup in the system:

* `getCollateralMintFees`, `getCollateralBurnFees`: mint and burn fee parameters for a collateral asset
* `isWhitelistedCollateral`, `getCollateralWhitelistData`: whether burns and redemptions are whitelisted for a collateral asset and how the whitelist is setup. To understand why and how whitelists are operated in Parallelizer, check out [this page](/products/parallel-v3/how-it-works/parallelizer-module#collateral-whitelist)
* `getIssuedByCollateral`: to get how many stablecoins were issued from a collateral and overall
* `getOracle`, `getOracleValues`: how oracles are setup for a specific collateral (which feeds are read) and what values would be used for a mint, a burn or redemption operation
* `isPaused`: whether minting with or burning for a collateral asset is paused
* `getManagerData`: whether a collateral is invested externally in other strategies

## Collateral Whitelists <a href="#about-whitelists" id="about-whitelists" />

The Parallelizer Module includes the possibility for governance to whitelist collateral assets, meaning that they can only be sent to addresses during a burn or a redemption to an address which has been whitelisted in some way. If the Parallelizer includes one collateral that requires a whitelist, and someone tries to redeem without forfeiting any tokens to an address which has not been whitelisted, then the redemption will revert.

In fact, if there are n collateral assets, with m of them requiring a whitelist, if all the whitelists are different, for a full redemption to occur successfully, the `to` address would need to be whitelisted for all the m collateral assets. Otherwise, to still be able to redeem something out of your stablecoins, you need to forfeit the tokens for which the `to` address is not whitelisted through the `redeemWithForfeit` function.

On a similar note, burn operations involving collateral assets requiring a whitelist revert if the `to` address is not whitelisted.

The quote functions (`quoteIn`, `quoteOut`, `quoteRedemptionCurve`) do not revert however if there are collateral assets with whitelists involved.
