Skip to main content
Unlike regular transactions, encrypted computations involve additional steps after your Solana transaction completes:
  1. Your transaction completes - Encrypted data is submitted and queued in the cluster’s mempool
  2. Computation waits in queue - MPC nodes promote computations from the mempool by leader choice, priority fee, and lock-conflict checks
  3. MPC execution - When your computation’s turn comes, MPC nodes execute it offchain
  4. Callback invocation - Results are returned via your callback instruction
This means you can’t await a transaction completion like normal Solana programs. Instead, you need to wait for the entire computation lifecycle to finish. The Arcium client library provides utilities to handle this:

Await computation completion with awaitComputationFinalization

The optional fifth argument, timeoutMs, sets the maximum wait time in milliseconds. It defaults to 120000.
Failed finalization reports a CircuitFailureReason such as OffChainCircuitFetchFailed, OffChainCircuitHashMismatch, CircuitCUMismatch, LocalCircuitFetchFailed, or CircuitSerialization.

Read and assert the callback result

Finalization tells you the callback has run, but not what it produced. Consume the result the way you would in any Solana program: await an emitted event, or read updated account state. Events are the common path because Arcium callbacks typically relay encrypted payloads for the client to decrypt offchain. Event-based decryption requires the callback to emit both the ciphertext and the nonce. See the callback-side emit! pattern in the Arcium program guide. On the client side, register the event listener before queuing the computation so it’s attached by the time the callback fires. Helpers and imports are omitted for brevity: awaitEvent is a test-scaffold wrapper around program.addEventListener, cipher comes from the encryption setup in Encrypting inputs, and expect / expectedSum are shown in a test context.
The two valid orderings are:
  • Event path: subscribe → queue → finalize → await event → decrypt → assert
  • Account path: queue → finalize → read account → assert

What’s next?

Encrypting inputs

Learn how to encrypt data before sending to the MXE.

Deployment

Deploy your MXE program to devnet or mainnet.