> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Perpetual Protocol (perpetual-protocol)

> Decentralized perpetual futures exchange (Curie v2) on Optimism. Concentrated-liquidity virtual AMM with cross-margin trading.

Decentralized perpetual futures exchange (Curie v2) on Optimism. Concentrated-liquidity virtual AMM with cross-margin trading.

| Fact | Value |
| - | - |
| Category | Perpetuals |
| Family | none |
| Namespace | `PerpetualProtocol` on optimism |
| Chains | optimism |

## What it offers

* **deposit**: Deposit collateral into Vault for trading
* **withdraw**: Withdraw collateral from Vault
* **openPosition**: Open a leveraged perpetual position
* **closePosition**: Close an existing perpetual position

## Notes

* Virtual AMM (vAMM) based pricing - no actual liquidity pools
* Cross-margin trading - all positions share the same collateral
* isBaseToQuote: true = short (sell base for quote), false = long (buy base with quote)
* Deposit collateral to Vault first, then trade via ClearingHouse
* sqrtPriceLimitX96 = 0 means no price limit (market order)

## Its names in a program

On Optimism, `PerpetualProtocol` is a namespace: its contracts need no import.

```ts theme={null}
function main() {
  // Optimism's clearingHouse, `0x82ac2CE43e33683c58BE4cDc40975E73aA50f459`.
  require(PerpetualProtocol.ClearingHouse != 0);
}
```

## Deployments

| Chain | Contract | Address | In a program |
| - | - | - | - |
| [Optimism](https://docs.eco.com/sauce-sdk/reference/chains/optimism.md) | clearingHouse | `0x82ac2CE43e33683c58BE4cDc40975E73aA50f459` | `PerpetualProtocol.ClearingHouse` |
| [Optimism](https://docs.eco.com/sauce-sdk/reference/chains/optimism.md) | vault | `0xAD7b4C162707E0B2b5f6fdDbD3f8538A5fbA0d60` | `PerpetualProtocol.Vault` |

## ABI

### `ClearingHouseABI`

`import ClearingHouseABI from "./protocols/perpetual-protocol/ClearingHouseABI.json";` Speaks for: clearingHouse.

* `openPosition((address baseToken, bool isBaseToQuote, bool isExactInput, uint256 amount, uint256 oppositeAmountBound, uint256 deadline, uint160 sqrtPriceLimitX96, bytes32 referralCode) params) returns (uint256 base, uint256 quote)`
* `closePosition((address baseToken, uint160 sqrtPriceLimitX96, uint256 oppositeAmountBound, uint256 deadline, bytes32 referralCode) params) returns (uint256 base, uint256 quote)`
* `getAccountValue(address trader) view returns (int256)`

### `VaultABI`

`import VaultABI from "./protocols/perpetual-protocol/VaultABI.json";` Speaks for: vault.

* `deposit(address token, uint256 amount)`
* `withdraw(address token, uint256 amount)`
* `getFreeCollateral(address trader) view returns (uint256)`

## Next steps

* [Protocols](https://docs.eco.com/sauce-sdk/reference/protocols.md): the other protocols, by what they do.
* [Protocols and tokens](https://docs.eco.com/sauce/names.md): calling a contract by its namespace, or through its ABI.
* [Glossary](https://docs.eco.com/sauce/glossary.md): the words these pages use, in plain terms.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.