---
title: Transactions
description:
  Solana transactions are the atomic unit of network interaction, containing
  signatures and a message with instructions. Transaction structure, blockhash
  expiry, versioned transactions, and durable nonces.
url: /docs/core/transactions
type: conceptual
prerequisites:
  - /docs/core/accounts
  - /docs/core/instructions
related:
  - /docs/core/transactions/transaction-structure
  - /docs/core/transactions/versioned-transactions
  - /docs/core/fees
---

A transaction includes one or more [instructions](/docs/core/instructions), the
signatures of accounts that authorize the changes, and a recent blockhash. The
network processes all instructions in a transaction together. If any instruction
fails, the entire transaction fails and all state changes are reverted.

![A simplified diagram showing two transactions](/assets/docs/core/transactions/transaction-simple.svg)

<Cards>
  <Card
    title="Transaction Structure"
    href="/docs/core/transactions/transaction-structure"
  >
    Signatures, message format (header, account addresses, blockhash, compiled
    instructions), binary encoding, size budget, and a SOL transfer example.
  </Card>
  <Card
    title="Versioned Transactions"
    href="/docs/core/transactions/versioned-transactions"
  >
    Legacy vs V0 format, Address Lookup Tables, ALT resolution, and version
    comparison.
  </Card>
  <Card
    title="Transaction Pipeline"
    href="/docs/core/transactions/transaction-pipeline"
  >
    Full 8-stage processing pipeline (receive through commit), reading
    transaction details from the network, and validation error reference.
  </Card>
  <Card title="Durable Nonces" href="/docs/core/transactions/durable-nonces">
    Offline signing with durable nonces, nonce lifecycle, detection, validation
    flow, and failure behavior.
  </Card>
</Cards>

## Key facts

- **Atomic execution**: All instructions succeed or all revert. Fees are still
  charged on failure.
- **Size limit**: 1,232 bytes maximum, derived from the IPv6 minimum MTU (1,280
  bytes) minus 48 bytes for network headers.
- **Signatures**: Each signer provides one 64-byte Ed25519 signature.
- **Blockhash expiry**: A transaction's recent blockhash is valid for 150 slots.

## Limits

| Limit                        | Value                 | Source                                                                                                                                                                                                                                               |
| ---------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Max transaction size         | 1,232 bytes           | [`PACKET_DATA_SIZE`](https://github.com/anza-xyz/solana-sdk/blob/clock%40v2.2.3/packet/src/lib.rs#L32)                                                                                                                                               |
| Max accounts per transaction | 64                    | [Enforced limit](https://github.com/anza-xyz/agave/blob/v3.1.8/runtime/src/bank.rs#L2942) (128 when [`increase_tx_account_lock_limit`](https://github.com/anza-xyz/agave/blob/v3.1.8/feature-set/src/lib.rs#L1652) is activated, currently inactive) |
| Blockhash expiry             | 150 slots             | [`MAX_PROCESSING_AGE`](https://github.com/anza-xyz/solana-sdk/blob/clock%40v2.2.3/clock/src/lib.rs#L133)                                                                                                                                             |
| Signature size               | 64 bytes (Ed25519)    | --                                                                                                                                                                                                                                                   |
| Base fee per signature       | 5,000 lamports        | [Fees](/docs/core/fees/fee-structure#base-fee)                                                                                                                                                                                                       |
| Max executed instructions    | 64 (top-level + CPIs) | [`MAX_INSTRUCTION_TRACE_LENGTH`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-context/src/lib.rs#L41)                                                                                                                                   |
| Max signatures per packet    | 12                    | [`MAX_SIGNATURES_PER_PACKET`](https://github.com/anza-xyz/agave/blob/v3.1.8/transaction-view/src/signature_frame.rs#L18)                                                                                                                             |
