> ## 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.

# MUX Protocol (mux-protocol)

> Leveraged trading aggregator on Arbitrum. Routes trades across multiple perpetual DEXs with shared liquidity pool.

Leveraged trading aggregator on Arbitrum. Routes trades across multiple perpetual DEXs with shared liquidity pool.

| Fact | Value |
| - | - |
| Category | Perpetuals |
| Family | none |
| Namespace | `MuxProtocol` on arbitrum |
| Chains | arbitrum |

## What it offers

* **addLiquidity**: Place an order adding liquidity to the MUX pool (receive MLP tokens)
* **removeLiquidity**: Place an order removing liquidity (burn MLP tokens)
* **placePositionOrder3**: Place a leveraged position order
* **cancelOrder**: Cancel a pending order

## Notes

* Aggregates perpetual DEXs (GMX, Gains, etc.)
* subAccountId (bytes32) encodes: account address + collateral token ID + asset ID + isLong flag
* tokenId is a uint8 index identifying the collateral asset (0=ETH, 1=BTC, etc.)
* MLP is the liquidity provider token
* Position orders require ETH execution fee sent as msg.value

## Its names in a program

On Arbitrum One, `MuxProtocol` is a namespace: its contracts need no import.

```ts theme={null}
function main() {
  // Arbitrum One's liquidityPool, `0x3e0199792Ce69DC29A0a36146bFa68bd7C8D6633`.
  require(MuxProtocol.LiquidityPool != 0);
}
```

## Deployments

| Chain | Contract | Address | In a program |
| - | - | - | - |
| [Arbitrum One](https://docs.eco.com/sauce-sdk/reference/chains/arbitrum.md) | liquidityPool | `0x3e0199792Ce69DC29A0a36146bFa68bd7C8D6633` | `MuxProtocol.LiquidityPool` |
| [Arbitrum One](https://docs.eco.com/sauce-sdk/reference/chains/arbitrum.md) | orderBook | `0xa19fD5aB6C8DCffa2A295F78a5Bb4aC543AAF5e3` | `MuxProtocol.OrderBook` |

## ABI

### `LiquidityPoolABI`

`import LiquidityPoolABI from "./protocols/mux-protocol/LiquidityPoolABI.json";` Speaks for: liquidityPool.

* `depositCollateral(bytes32 subAccountId, uint256 rawAmount)`
* `getAssetAddress(uint8 assetId) view returns (address)`
* `getSubAccount(bytes32 subAccountId) view returns (uint96 collateral, uint96 size, uint32 lastIncreasedTime, uint96 entryPrice, uint128 entryFunding)`

### `OrderBookABI`

`import OrderBookABI from "./protocols/mux-protocol/OrderBookABI.json";` Speaks for: orderBook.

* `cancelOrder(uint64 orderId)`
* `placeLiquidityOrder(uint8 assetId, uint96 rawAmount, bool isAdding) payable`
* `placePositionOrder3(bytes32 subAccountId, uint96 collateralAmount, uint96 size, uint96 price, uint8 profitTokenId, uint8 flags, uint32 deadline, bytes32 referralCode, (uint96 tpPrice, uint96 slPrice, uint8 tpslProfitTokenId, uint32 tpslDeadline) extra) payable`

## 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.