The Solana SDK is the current live SDK path for Arcane private payments.
It is a standalone TypeScript SDK for the Arcane privacy layer on Solana. It provides reusable protocol client code for private balances, UTXO scanning, proof generation, relayed transaction submission, private spend, and withdrawal to Solana.
Package status
The package name is @arcane-labs/privacy-layer-sdk, but the package is not publicly published yet. Do not use yarn add @arcane-labs/privacy-layer-sdk unless Arcane confirms private registry access or package publication.
Source access is available in the private GitHub repository: Polynom-Labs/privacy-layer-sdk . Arcane must grant repository access before partners can clone it.
For private beta access, install the package artifact Arcane provides:
yarn add < path-or-registry-spec-for-arcane-solana-sd k >
If Arcane provides source access instead of a package artifact, build it locally:
yarn install --frozen-lockfile
yarn build
Program
The bundled IDL targets this deployed Arcane program:
2EyitVDBV38LSeGDKQuZWHMCmebMdGeVFgHC5LYxepLG
Confirm the target program id with Arcane before production deployment.
Runtime configuration
The SDK reads configuration from Node process.env or Vite-style import.meta.env.
Variable Purpose Default ARCANE_INDEXER_URL / INDEXER_API_URL / VITE_INDEXER_URLIndexer API used for Merkle roots, proofs, UTXO history, and compliance checks https://yona.cash/apiARCANE_RELAYER_URL / RELAYER_URL / VITE_RELAYER_URLRelayer API used to submit signed private transactions Indexer URL ARCANE_LIGHT_RPC_URL / LIGHT_RPC_URL / VITE_LIGHT_RPC_URLLight Protocol RPC endpoint Empty ARCANE_CIRCUIT_PATH / CIRCUIT_PATH / VITE_CIRCUIT_PATHGroth16 circuit path or URL used by the prover /transaction2COMPLIANCE_REQUIRE_SENDER / VITE_COMPLIANCE_REQUIRE_SENDERRequires sender wallet message signatures for compliant withdrawals false
Keep this configuration server-side for backend-managed integrations.
Main exports
The main entrypoint exports:
createProvider, createProgram, getProgram
PROGRAM_ID, INDEXER_API_URL, RELAYER_URL, LIGHT_RPC_URL
UtxoKeypair, Utxo
depositWithRelayer, transactTransfer, withdrawWithRelayer
consolidateUtxos, autoConsolidateAll
getMyUtxos, getBalanceFromUtxos, groupUtxosByMint, clearUtxoCache
EncryptionService, MerkleTree, prove, pollSignatureStatus
Package subpath exports are available for transaction modules and selected utilities:
import { transactTransfer } from "@arcane-labs/privacy-layer-sdk/transactions/transact" ;
import { getMyUtxos } from "@arcane-labs/privacy-layer-sdk/utils/getMyUtxos" ;
Create a program client
import { Connection } from "@solana/web3.js" ;
import { createProvider , createProgram } from "@arcane-labs/privacy-layer-sdk" ;
const connection = new Connection ( process . env . SOLANA_RPC_URL ! , "confirmed" );
const provider = createProvider ( connection , wallet );
const program = createProgram ( provider );
Scan private UTXOs
import { getMyUtxos , getBalanceFromUtxos } from "@arcane-labs/privacy-layer-sdk" ;
const utxos = await getMyUtxos ( signedWallet , connection , console . log , lightWasm );
const privateSol = getBalanceFromUtxos ( utxos );
Backend-managed integrations should persist scan state, decoded UTXOs, and encrypted outputs on the server.
Deposit and shield
Use depositWithRelayer after your backend detects public funds at the stealth deposit address.
const result = await depositWithRelayer (
amountInUiUnits ,
signedWallet ,
connection ,
lightRpc ,
program ,
mintAddress ,
signTransaction ,
setStatus ,
lightWasm
);
Record the returned signature and timing metadata in your operation history.
Private spend
Use transactTransfer for movement inside the privacy layer.
const result = await transactTransfer (
amountInUiUnits ,
recipientUtxoPubkey ,
recipientX25519Pubkey ,
signedWallet ,
connection ,
lightRpc ,
program ,
mintAddress ,
signTransaction ,
setStatus ,
lightWasm
);
Withdraw to Solana
Use withdrawWithRelayer to move private balance to a public Solana address.
const result = await withdrawWithRelayer (
recipientAddress ,
amountInLamports ,
signedWallet ,
connection ,
mintAddress ,
setStatus ,
lightWasm ,
referralCode ,
signMessage
);
Related page
Private payments integration guide Implement the backend-managed wallet pattern around these SDK calls.