# MakerDAO USDC PSM Overview
The MakerDAO USDC PSM is a set of the following components:
| Name | Address
| ---- | ------
| MCD\_PSM\_USDC_A | `0x89B78CfA322F6C5dE0aBcEecab66Aee45393cC5A`
| MCD\_JOIN\_PSM\_USDC_A | `0x0A59649758aa4d66E25f08Dd01271e891fe52199`
| MCD\_CLIP\_PSM\_USDC_A | `0x66609b4799fd7cE12BA799AD01094aBD13d5014D`
| MCD\_CLIP\_CALC\_PSM\_USDC\_A | `0xbeE028b5Fa9eb0aDAC5eeF7E5B13383172b91A4E`
## MCD\_PSM\_USDC_A
This is an instance of [`DssPsm`](https://github.com/BellwoodStudios/dss-psm/blob/222c96d4047e76680ed6803f07dd61aa2590e42b/src/psm.sol), which can be thought of as a single, giant vault where users can permissionlessly:
1. Sell stablecoins for Dai.
1. Sell Dai for stablecoins.
In its current version, the conversion rate is implicit at $1:1$. Furthermore, the MakerDAO governance is allowed to define fees for any of the operations above. The fees are set as a percentage of the amount being swapped and are independent of each other:
1. `tin`: when selling stablecoin for Dai
1. `tout`: when selling Dai for stablecoin.
As of the time of this writing, the values for both `tout` and `tin` are set to $0$ for USDC.
## MCD\_JOIN\_PSM\_USDC\_A
An instance of [`AuthGemJoin5`](https://github.com/BellwoodStudios/dss-psm/blob/222c96d4047e76680ed6803f07dd61aa2590e42b/src/join-5-auth.sol). ERC-20 tokens come in many flavors:
- Some tokens are upgradeable.
- Some don't fully implement latest ERC-20 interface (i.e.: `transfer` does not return `true` when it succeeds).
- Some have lower `decimals` precision (i.e: `USDC` has only 6 decimals).
- Some don't even have a `decimals` field.
- Some have transfer fees.
To isolate the Maker Protocol Core from the complexity all the above entails, we leverage `GemJoin`s contracts as adapters, which normalize all non-standard features for all tokens used as collateral within the protocol.
Through `GemJoin`s, users can:
1. `join`: lock collateral tokens -- called `gem` -- into the protocol.
2. `exit`: free collateral tokes from the protocol.
`GemJoin`s are very sensitive contracts, because they are the bridge between collateral tokens and the Maker Protocol. If there is a bug in a `GemJoin` implementation, it would make any collateral types using it vulnerable to attacks.
PSMs require a special variant of `GemJoin` in which only the PSM contract itself is authorized to `join`/`exit` the specified `gem`.
Specifically for the USDC PSM, it also has to deal with the mismatch of `decimals` between `USDC` -- $6$ decimals -- and `Dai` -- $18$ decimals.
## MCD\_CLIP\_PSM\_USDC\_A
In the Maker Protocol, a [`Clipper`](https://github.com/makerdao/dss/blob/fa4f6630afb0624d04a003e920b0d71a00331d98/src/clip.sol) is a collateral auction contract. Typically, collateral auctions happen when a vault collateralization ratio is below the desired one, however the Maker Governance can force a liquidation based on the current market price (as reported by the Oracles).
**Liquidations are currently disabled** for all PSMs. If governance wanted to enable them, it would allow selling stablecoins in the PSM in the market at a discounted price. However, such a scenario is a bit impractical given the amount of assets in the PSMs; it would make more sense for the Maker Protocol to have some representative to procure a market maker that could handle large sums of stablecoins at once, than to make public auctions.
## MCD\_CLIP\_CALC\_PSM\_USDC\_A
[MakerDAO Liquidations 2.0](https://forum.makerdao.com/t/mip45-liquidations-2-0-liq-2-0-liquidation-system-redesign/6352) module executes collateral sales through [Dutch Auctions](https://en.wikipedia.org/wiki/Dutch_auction). The price starts at a predefined threshold relative to the latest oracle price available and goes down with time as defined by a specific [curve](https://github.com/makerdao/dss/blob/master/src/abaci.sol).
Regarding the USDC PSM, the auction would follow a stair-step decay function like the yellow one below:

The price would start at a level, remain constant for a predefined timeframe, and then reduced by a certain amount. This would happen repeatedly, only that the reduction grows exponentially at each step, until all collateral has been purchased, or the current price hits a predefined bottom price. If any of this conditions are met, the auction stops.