---
title: "1. Transaction Manifest Language"
path: "/developers/transactions/01-manifest-language"
version: "1.1.0"
author: "Hydrate"
createdAt: "2026-02-22T17:58:00.378Z"
updatedAt: "2026-03-16T18:21:36.430Z"
---

# 1. Transaction Manifest Language

<Infobox>
| **Transaction Manifest Language** |
| Difficulty | Intermediate |
| Est. Time | 25 minutes |
| Prerequisites | [Scrypto Fundamentals](/developers/scrypto/01-fundamentals) |
| Language | Manifest |
| Official Docs | [Transaction Manifest](https://docs.radixdlt.com/docs/transaction-manifest) |
</Infobox>

## What is a Transaction Manifest?

A [transaction manifest](https://docs.radixdlt.com/docs/transaction-manifest) is a human-readable script that describes exactly what a transaction does — which assets move where, which components are called, and in what order. Unlike EVM bytecode, manifests are transparent: the [Radix Wallet](/contents/tech/core-protocols/radix-wallet) summarizes them in plain language so users never "blind sign."

Manifests use a bash-like syntax where each instruction is a command followed by typed arguments and a semicolon. Instructions execute sequentially — if any fails, the entire transaction rolls back atomically.

## The Worktop

Every transaction has a **worktop** — a temporary holding area for resources in transit. When you withdraw tokens from an account, they land on the worktop. You then take them into named **[buckets](https://docs.radixdlt.com/docs/resources-and-data)** and pass them to methods or deposit them.

```rust
# Withdraw 10 XRD — tokens land on worktop
CALL_METHOD Address("account_rdx...") "withdraw"
  Address("resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxakj8n3")
  Decimal("10")
;

# Take from worktop into a named bucket
TAKE_FROM_WORKTOP
  Address("resource_rdx1tknxxxxxxxxxradxrdxxxxxxxxx009923554798xxxxxxxxxakj8n3")
  Decimal("10")
  Bucket("xrd_bucket")
;
```

## Core Instructions

| Instruction | Purpose |
| --- | --- |
| `CALL_METHOD` | Call a method on a component (e.g., withdraw, deposit, swap) |
| `CALL_FUNCTION` | Call a function on a blueprint (e.g., instantiate) |
| `TAKE_FROM_WORKTOP` | Take a specific amount from worktop into a bucket |
| `TAKE_ALL_FROM_WORKTOP` | Take all of a resource from worktop into a bucket |
| `ASSERT_WORKTOP_CONTAINS` | Assert minimum amount on worktop (slippage protection) |
| `CREATE_PROOF_FROM_BUCKET_OF_AMOUNT` | Create an authorization proof from a bucket |

### Value Types

- `Address("resource_rdx...")` — entity addresses
- `Decimal("10.5")` — numeric amounts
- `Bucket("name")` — named bucket references
- `Proof("name")` — named proof references
- `Expression("ENTIRE_WORKTOP")` — deposit everything remaining

## Common Patterns

### Simple Token Transfer

```rust
CALL_METHOD Address("account_rdx_sender...") "lock_fee" Decimal("5");

CALL_METHOD Address("account_rdx_sender...") "withdraw"
  Address("resource_rdx1tk...xrd...")
  Decimal("100")
;

TAKE_ALL_FROM_WORKTOP Address("resource_rdx1tk...xrd...") Bucket("tokens");

CALL_METHOD Address("account_rdx_recipient...") "try_deposit_or_abort"
  Bucket("tokens") Enum<0u8>()
;
```
### DEX Swap with Slippage Protection

```rust
CALL_METHOD Address("account_rdx...") "withdraw"
  Address("token_a_addr") Decimal("100")
;

TAKE_ALL_FROM_WORKTOP Address("token_a_addr") Bucket("input");

CALL_METHOD Address("dex_component_addr") "swap"
  Bucket("input")
;

# Ensure minimum output — reverts if not met
ASSERT_WORKTOP_CONTAINS Address("token_b_addr") Decimal("95");

CALL_METHOD Address("account_rdx...") "deposit_batch"
  Expression("ENTIRE_WORKTOP")
;
```
Atomic composability

You can chain calls to multiple components in one manifest. If a DEX swap feeds into a lending protocol deposit, both succeed or both fail — no partial state.

## Building Manifests Programmatically

While you can write manifests by hand, most dApps build them in code:

- **TypeScript** — the [Radix dApp Toolkit](/developers/frontend/01-radix-dapp-toolkit) sends manifests via `sendTransaction`
- **Rust** — the [ManifestBuilder](https://docs.radixdlt.com/docs/rust-manifest-builder) provides a fluent API
- **Console** — the [Developer Console](https://stokenet-console.radixdlt.com) has a raw transaction editor

## External Links

- [Complete instruction reference](https://docs.radixdlt.com/docs/manifest-instructions)
- [Manifest value syntax](/developers/legacy-docs/reference/sbor-serialization/manifest-sbor/manifest-value-syntax)
- [Simple token transfer example](https://docs.radixdlt.com/docs/simple-token-transfer)
- [Rust ManifestBuilder](https://docs.radixdlt.com/docs/rust-manifest-builder)