MXE (MPC eXecution Environment)
Your complete encrypted application composed of three parts:
- A Solana program that receives inputs and queues computations
- Encrypted instructions with encrypted logic written in Arcis
- An MXE account storing onchain metadata like cluster selection and the MXE’s public key
Cluster
A group of Multi-Party Computation (MPC) nodes that execute your encrypted instructions. You choose
which cluster when deploying your MXE. The selection is made at deployment time
but can be changed later via
arcium migrate-cluster.
Each cluster has a numeric cluster_offset identifier (e.g., 456 on devnet)
that you specify during deployment.Encrypted instruction
Your encrypted business logic written in Arcis (Rust framework) that
executes on encrypted data via MPC. Mark functions with the
#[instruction]
macro to designate them as encrypted instructions. Examples: vote counting,
order matching, sealed-bid auctions.Arcium program
The onchain coordinator on Solana that orchestrates MPC computations, routes
work to clusters, and manages callbacks and finalization. You interact with it
via CPI (Cross-Program Invocation) from your Solana program.
Computation definition
An onchain account storing compiled MPC bytecode. Created once per
encrypted instruction, it contains the compiled circuit from your Arcis
code and must be initialized via
init_computation_def() before first use.
When no longer needed, a computation definition has its own close lifecycle.Computation
A single execution instance of an encrypted instruction. You generate a random
computation_offset (u64) per invocation to uniquely identify it. The computation
tracks execution status and stores encrypted results until callback.Arx node
An MPC execution node that participates in cluster computations. Each node
holds secret shares and collaborates via the MPC protocol. Clusters contain
multiple Arx nodes. The dishonest majority model means privacy holds even
if all but one node are compromised.
Offset identifiers
Arcium uses numeric offsets to identify onchain resources. You’ll encounter these throughout the SDK:| Offset | Type | Purpose | How it’s set |
|---|---|---|---|
cluster_offset | u32 | Identifies which cluster your MXE connects to | Chosen at deployment (e.g., 456 on devnet) |
computation_offset | u64 | Uniquely identifies a single computation invocation | Generated randomly per invocation (randomBytes(8)) |
comp_def_offset | u32 | Identifies a computation definition (circuit) within your MXE | Via comp_def_offset("instruction_name"), which computes sha256(name) truncated to LE u32 |
What’s next?
Computation Lifecycle
Understand how computations flow from queue to callback
Write Encrypted Instructions
Learn Arcis and write encrypted business logic