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

# Sell PT (Exact Out)

> Low-level instruction to sell PT and receive an exact amount of SY tokens

# createTradePtExactOutInstruction

Sells PT tokens to receive an exact amount of SY tokens. This instruction uses `createTradePtExactOutInstruction` with `swapDirection: { sellPt: {} }` to sell PT on the CLMM market and receive a precise quantity of SY. The caller specifies the exact SY amount to receive, and an optional maximum PT input constraint can be set for slippage protection.

## Usage

```typescript theme={null}
import { createTradePtExactOutInstruction } from "@exponent-labs/exponent-sdk/client/clmm";
import { PublicKey } from "@solana/web3.js";

const ix = createTradePtExactOutInstruction({
  trader: traderKeypair.publicKey,
  market: new PublicKey("market..."),
  ticks: new PublicKey("ticks..."),
  tokenSyTrader: new PublicKey("tokenSyTrader..."),
  tokenPtTrader: new PublicKey("tokenPtTrader..."),
  tokenSyEscrow: new PublicKey("tokenSyEscrow..."),
  tokenPtEscrow: new PublicKey("tokenPtEscrow..."),
  addressLookupTable: new PublicKey("lookupTable..."),
  tokenProgram: new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
  syProgram: new PublicKey("syProgram..."),
  tokenFeeTreasurySy: new PublicKey("tokenFeeTreasurySy..."),
  tokenFeeTreasuryPt: new PublicKey("tokenFeeTreasuryPt..."),
  eventAuthority: new PublicKey("eventAuthority..."),
  program: new PublicKey("program..."),
  amountOut: 1_000_000n,
  swapDirection: { sellPt: {} },
  amountInConstraint: 1_100_000n,
  priceSpotLimit: 1.05,
});
```

## Accounts

| Name                 | Type        | Signer | Writable | Description                   |
| -------------------- | ----------- | ------ | -------- | ----------------------------- |
| `trader`             | `PublicKey` | Yes    | Yes      | Wallet executing the trade    |
| `market`             | `PublicKey` | No     | Yes      | The CLMM market account       |
| `ticks`              | `PublicKey` | No     | Yes      | The market tick array account |
| `tokenSyTrader`      | `PublicKey` | No     | Yes      | Trader's SY token account     |
| `tokenPtTrader`      | `PublicKey` | No     | Yes      | Trader's PT token account     |
| `tokenSyEscrow`      | `PublicKey` | No     | Yes      | Market SY escrow account      |
| `tokenPtEscrow`      | `PublicKey` | No     | Yes      | Market PT escrow account      |
| `addressLookupTable` | `PublicKey` | No     | No       | Market address lookup table   |
| `tokenProgram`       | `PublicKey` | No     | No       | SPL Token program             |
| `syProgram`          | `PublicKey` | No     | No       | SY program                    |
| `tokenFeeTreasurySy` | `PublicKey` | No     | Yes      | SY fee treasury account       |
| `tokenFeeTreasuryPt` | `PublicKey` | No     | Yes      | PT fee treasury account       |
| `eventAuthority`     | `PublicKey` | No     | No       | Event authority PDA           |
| `program`            | `PublicKey` | No     | No       | CLMM program ID               |

## Args

| Name               | Type             | Description                                              |
| ------------------ | ---------------- | -------------------------------------------------------- |
| amountOut          | `u64`            | The exact amount of SY tokens to receive                 |
| swapDirection      | `SwapDirection`  | Set to `{ sellPt: {} }` to sell PT                       |
| amountInConstraint | `u64` (optional) | The maximum amount of PT to spend as slippage protection |
| priceSpotLimit     | `f64` (optional) | The price limit for the trade                            |

## Returns

`TransactionInstruction` — a transaction instruction ready to be added to a transaction.
