Getting Started

Obelysk is a privacy-first DeFi protocol and verifiable AI platform on Starknet. It combines ElGamal encryption with GKR zero-knowledge proofs to enable fully private trading, transfers, and staking — all verified 100% on-chain with no trusted setup.

14
Mainnet Contracts
5
Privacy Pools
5
Token Pairs
0.3%
Protocol Fee

What You Can Build

Obelysk has two complementary tracks that work together through the VM31Bridge:

🛡️
Track 1 — Privacy DeFi
Deposit tokens into shielded pools, swap privately via Ekubo, trade in dark pool auctions, send stealth payments, and stake SAGE. All amounts encrypted with ElGamal.
🧠
Track 2 — ZKML Verification
Prove neural network inference on-chain using GKR interactive proofs. The verifier walks the computation graph layer by layer, checking sumcheck polynomials.
🔐
Encrypted Balances
Token amounts are never visible on-chain. Track 1 uses ElGamal ciphertexts, Track 2 uses fixed-denomination UTXO commitments with Poseidon2-M31.
GPU-Accelerated Proving
CUDA kernels for sumcheck, FFT, and Merkle operations. 50-112x speedup over CPU. Qwen3-14B proven at 3.04s/layer on H100.

Install the SDK

npm install @bitsage/sdk
Quick Start

You don't need an account for read-only queries. Pass an account only when you need to sign transactions (deposits, swaps, staking).

Initialize the Client

import { ObelyskClient } from '@bitsage/sdk/obelysk';
import { Account, RpcProvider } from 'starknet';

const provider = new RpcProvider({
  nodeUrl: 'https://starknet-mainnet.g.alchemy.com/starknet/version/rpc/v0_7/YOUR_KEY',
});

const account = new Account(provider, '0xYOUR_ADDRESS', '0xYOUR_PRIVATE_KEY');

const obelysk = new ObelyskClient({
  network: 'mainnet',
  rpcUrl: provider.nodeUrl,
  account,
});

Your First Private Transaction

1
Deposit into a Privacy Pool
Send tokens into a shielded pool. You receive a note — a cryptographic receipt containing your secret and nullifier. Save it securely.
2
Tokens are now shielded
Your deposit is added to a Merkle commitment tree. The link between your address and the deposit is broken.
3
Withdraw later
Present your note to generate a zero-knowledge proof (Merkle inclusion + range proof). The protocol verifies without knowing which deposit is yours.
// Deposit 0.1 ETH into the privacy pool
const note = await obelysk.privacyPool.deposit({
  token: 'eth',
  amount: '0.1',
});

// CRITICAL: Save this note! It's the only way to withdraw.
console.log('Secret:', note.secret);
console.log('Nullifier:', note.nullifier);
console.log('Leaf index:', note.leafIndex);
Save Your Note

The note contains the secret and nullifier needed to withdraw. If you lose it, your funds are permanently locked in the pool. There is no recovery mechanism.

Read Protocol State (No Account Needed)

// Dark Pool auction state
const epoch = await obelysk.darkPool.getEpochInfo();
console.log(`Epoch ${epoch.epochNumber}: ${epoch.phase}`);

// Privacy pool stats
const stats = await obelysk.privacyPool.getPoolStats('eth');
console.log('ETH deposits:', stats.totalDeposits);

// Staking info
const staked = await obelysk.staking.getTotalStaked();
console.log('Total SAGE staked:', staked);

Cryptographic Foundations

Every proof in Obelysk is real cryptographic math — no stubs, no placeholders, no trusted setup.

PrimitiveUse CaseSecurity
ElGamalBalance encryptionAdditively homomorphic on STARK curve
Schnorr ProofsOwnership verification6 proofs per confidential transfer
Pedersen CommitmentsValue hidingComputationally binding, perfectly hiding
Poseidon2-M31UTXO commitments124-bit collision resistance
GKR + SumcheckNeural network proving42-255x trace reduction
Merkle TreesDeposit inclusionLeanIMT, depth-20

Next Steps