Built on the official stack.
CIPHER implements no cryptography of its own. Every proof, ciphertext and instruction comes from Solana's own libraries, and the confidential operations use the high-level instruction-plan helpers rather than hand-assembled proof sequences.
Packages
@solana/kit
RPC, transaction messages, signers, and the instruction-plan planner and executor that run multi-transaction operations in dependency order.
@solana-program/token-2022
Token-2022 client. Its /confidential entry point provides the key derivation and the instruction-plan helpers for configure, transfer, withdraw and apply-pending.
@solana/zk-sdk
WebAssembly build of the Solana ZK SDK. ElGamal and AES primitives, and the proof data structures. Loaded on demand, never on the marketing pages.
@solana-program/zk-elgamal-proof
Client for the native proof program: proof verification instructions and the context-state accounts they write into.
Key derivation
CIPHER uses the standard wallet-level derivation. The wallet signs the constant message solana-conf-bal/v1 once, and both the ElGamal keypair and the AES key are derived from that single Ed25519 signature.
import { deriveConfidentialKeys } from
'@solana-program/token-2022/confidential';
const { aeKey, elgamalKeypair } =
await deriveConfidentialKeys({ signer });Two consequences worth knowing. The keys are bound to the wallet rather than to a mint, so one unlock covers every asset. And the derivation requires deterministic Ed25519 signatures: a wallet that randomises its signatures, or modifies the message before signing, would derive different keys each time. CIPHER verifies the returned message byte for byte and refuses to continue if it changed, rather than producing keys that could never be reproduced.
Transfer shape
A confidential transfer is not one transaction. The helper returns an instruction plan shaped as a sequence: verify the three proofs into context-state accounts, run the transfer that reads them, then close those accounts to reclaim their rent.
sequential([ parallel([ equality, validity, range ]), // verify proofs confidentialTransfer, // settle parallel([ close, close, close ]), // reclaim rent ])
CIPHER reads the phase boundaries off the compiled plan to drive its progress UI, and never presents the sequence as atomic. If the transfer settles but cleanup does not, the funds moved and only rent is stranded — which the recovery flow finds on chain and offers to reclaim.
Architecture
- PresentationComponents, pages, modals, animation. No cryptography and no chain logic.
- WalletWallet Standard connection, signers, network selection, capability detection.
- TokenToken-2022 account discovery, mint metadata, extension and capability detection.
- Privacy engineKey derivation, balance decryption, configure, shield, apply-pending, transfer, unshield.
- OperationsStage machine, persistence, reconciliation and recovery of interrupted flows.
- RPCEndpoint failover, retries, blockhash caching, confirmation, error normalization.