Skip to main content
This guide covers upgrading from v0.6.3 to v0.7.0. The main changes are new Address Lookup Table (LUT) support, tree-shaking support, and callback_url removal.

1. Update Rust Dependencies

cd programs/your-program-name
cargo update --package arcium-client --precise 0.7.0
cargo update --package arcium-macros --precise 0.7.0
cargo update --package arcium-anchor --precise 0.7.0
cd ../../encrypted-ixs
cargo update --package arcis --precise 0.7.0

2. Update TypeScript Dependencies

npm install @arcium-hq/client@0.7.0

3. New: Address Lookup Table Support

v0.7.0 adds Address Lookup Table (LUT) support, enabling more space in callback transactions for user data. Add two new accounts to your computation definition structs.

Rust: Add LUT Accounts

Add these fields to your InitCompDef structs:
#[account(mut, address = derive_mxe_lut_pda!(mxe_account.lut_offset_slot))]
/// CHECK: address_lookup_table, checked by arcium program.
pub address_lookup_table: UncheckedAccount<'info>,
#[account(address = LUT_PROGRAM_ID)]
/// CHECK: lut_program is the Address Lookup Table program.
pub lut_program: UncheckedAccount<'info>,
Import LUT_PROGRAM_ID from arcium_anchor. The lut_offset_slot is stored in the MXE account.

TypeScript: Add LUT Address to Accounts

Use the new getLookupTableAddress function:
import {
  getMXEAccAddress,
  getLookupTableAddress,
  getArciumProgram,
} from "@arcium-hq/client";

const arciumProgram = getArciumProgram(provider as anchor.AnchorProvider);
const mxeAccount = getMXEAccAddress(program.programId);
const mxeAcc = await arciumProgram.account.mxeAccount.fetch(mxeAccount);
const lutAddress = getLookupTableAddress(program.programId, mxeAcc.lutOffsetSlot);

const sig = await program.methods
  .initAddTogetherCompDef()
  .accounts({
    compDefAccount: compDefPDA,
    payer: owner.publicKey,
    mxeAccount,
    addressLookupTable: lutAddress,
  })
  .signers([owner])
  .rpc();
uploadCircuit() is now idempotent - it checks circuit state before uploading and skips if already finalized.

4. Tree-Shaking Support

Both @arcium-hq/client and @arcium-hq/reader now include "sideEffects": false in their package.json, enabling bundlers to tree-shake unused code for smaller bundle sizes. No code changes required - this is automatic when using modern bundlers like Webpack, Rollup, or esbuild.

5. Remove callback_url from queue_computation

The callback_url parameter has been removed from queue_computation. Before (v0.6.3):
queue_computation(
    ctx.accounts,
    computation_offset,
    args,
    None,  // callback_url - REMOVE THIS
    vec![...],
    1,
    0,
)?;
After (v0.7.0):
queue_computation(
    ctx.accounts,
    computation_offset,
    args,
    vec![...],
    1,
    0,
)?;

6. Verify Migration

arcium build
cargo check --all
arcium test

7. Changes Summary

Changev0.6.3v0.7.0
LUT accountsN/ANew: address_lookup_table + lut_program required
derive_mxe_lut_pda!N/Aderive_mxe_lut_pda!(mxe_account.lut_offset_slot)
getLookupTableAddressN/AgetLookupTableAddress(programId, lutOffsetSlot)
queue_computationHas callback_url: Option<String>Parameter removed
Tree-shakingNot supportedsideEffects: false in client and reader
Rust Dependencies0.6.30.7.0
TypeScript Client@arcium-hq/client@0.6.3@arcium-hq/client@0.7.0