---
title: Unwrap Lamports
description:
  Convert wrapped SOL back into lamports, fully or partially, without closing
  the token account.
url: /docs/tokens/advanced/unwrap-lamports
type: reference
related:
  - /docs/tokens/advanced/withdraw-excess-lamports
  - /docs/tokens/advanced/cpi
---

## What Does Unwrap Lamports Do?

_rs`UnwrapLamports`_ moves SOL out of a native (wrapped SOL) token account into
a destination account as lamports. You can unwrap the full balance or a specific
amount, and the token account stays open.

This is more flexible than closing a wrapped SOL account: a partial unwrap lets
you withdraw some SOL while keeping the account funded for later use.

### Source Reference

| Item                          | Description                         | Source                                                                                                         |
| ----------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| _rs`UnwrapLamports`_          | The instruction (discriminator 45). | [Source](https://github.com/solana-program/token/blob/main/pinocchio/interface/src/instruction.rs)             |
| _rs`process_unwrap_lamports`_ | Processor logic.                    | [Source](https://github.com/solana-program/token/blob/main/pinocchio/program/src/processor/unwrap_lamports.rs) |

## Accounts

| Account       | Description                                                 |
| ------------- | ----------------------------------------------------------- |
| `source`      | Writable. The native (wrapped SOL) token account to unwrap. |
| `destination` | Writable. Receives the unwrapped lamports.                  |
| `authority`   | The account owner or a delegate (or multisig signers).      |

<Callout type="warn">

The source must be a native token account; other token accounts return
_rs`NonNativeNotSupported`_. A delegate can unwrap up to its delegated amount.

</Callout>

## How to Unwrap Lamports

Omit _ts`amount`_ to unwrap the full balance, or set it to unwrap a specific
number of lamports. The example uses a configured
[`@solana/kit`](/docs/clients/official/javascript#solana-kit) client — see
[Transfer Tokens](/docs/tokens/basics/transfer-tokens) for client setup.

```ts title="Unwrap wrapped SOL (Kit)"
import { getUnwrapLamportsInstruction } from "@solana-program/token";

// source: the native (wrapped SOL) token account to unwrap.
// destination: address that receives the unwrapped lamports.
// authority: a TransactionSigner (the account owner or a delegate).

// Unwrap a specific number of lamports.
const unwrapSome = getUnwrapLamportsInstruction({
  source,
  destination,
  authority,
  amount: 500_000_000n
});

// Or omit `amount` to unwrap the entire balance.
const unwrapAll = getUnwrapLamportsInstruction({
  source,
  destination,
  authority
});

// Send whichever instruction you need.
await client.sendTransaction([unwrapSome]);
```

For a multisig authority, pass the co-signers with _ts`multiSigners`_.
