MXE (MPC eXecution Environment)
Your complete confidential application composed of three parts:
- A Solana program that receives inputs and queues computations
- Confidential instructions with encrypted logic written in Arcis
- An MXE account storing on-chain metadata like cluster selection and the MXE’s public key
Cluster
A group of MPC nodes that execute your confidential 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.Confidential 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 confidential instructions. Examples: vote counting,
order matching, sealed-bid auctions.Arcium Program
The on-chain 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 on-chain account storing compiled MPC bytecode. Created once per
confidential instruction, it contains the compiled circuit from your Arcis
code and must be initialized via
init_comp_def() before first use.Computation
A single execution instance of a confidential 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 on-chain 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") — computes sha256(name) truncated to LE u32 |
What’s next?
Computation Lifecycle
Understand how computations flow from queue to callback
Write Confidential Instructions
Learn Arcis and write encrypted business logic