GONE.WTF

Gone.wtf API

Privacy-preserving Solana transactions using zero-knowledge proofs

v1.0.0
REST API
Open Source

Quick Start

Get started in 60 seconds

1. Include the SDK

index.html
1<script src="https://gone.wtf/sdk/gone-mixer.js"></script>

2. Create a deposit

deposit.js
1const mixer = new GoneMixer('https://gone.wtf'); 2 3// Deposit 1.5 SOL privately 4const result = await mixer.deposit(wallet, 1.5); 5 6// Save the note - CRITICAL! 7console.log('Note:', result.note); 8mixer.saveNote(result.note, 'My private deposit');

3. Check balance

check-balance.js
1const balance = await mixer.getBalance( 2 note, 3 recipientAddress 4); 5 6console.log('Available:', balance.balance, 'SOL');

API Endpoints

SDK Reference

GoneMixer class methods

Constructor

constructor.js
1const mixer = new GoneMixer('https://gone.wtf'); 2// or use default 3const mixer = new GoneMixer();

mixer.deposit(wallet, amount)

Create a private deposit and return the secret note.

deposit-method.js
1const result = await mixer.deposit(wallet, 1.5); 2 3if (result.success) { 4 console.log('✅ Deposit successful!'); 5 console.log('Note:', result.note); 6 console.log('Signature:', result.signature); 7 8 // Save note securely 9 mixer.saveNote(result.note, 'My deposit'); 10} else { 11 console.error('❌ Failed:', result.error); 12}

mixer.getBalance(note, recipientAddress)

Check available balance for a secret note.

get-balance.js
1const result = await mixer.getBalance( 2 'gone-0.2.0-abc123...xyz789-txhash', 3 'RecipientAddressHere...' 4); 5 6if (result.success) { 7 console.log('Balance:', result.balance, 'SOL'); 8}

mixer.isValidNote(note)

Validate a note format.

validate-note.js
1if (mixer.isValidNote(note)) { 2 console.log('✅ Valid note format'); 3 const balance = await mixer.getBalance(note, recipient); 4} else { 5 console.error('❌ Invalid note format'); 6}

mixer.saveNote(note, label)

Save a note to localStorage.

save-note.js
1mixer.saveNote(note, 'My deposit - 1.5 SOL'); 2 3// Get all saved notes 4const notes = mixer.getSavedNotes(); 5console.log('Saved notes:', notes);

Zero-Knowledge

Privacy-preserving transactions using Light Protocol's ZK proofs. Break on-chain links completely.

Non-Custodial

Notes generated client-side. We never store your keys. Only you control your funds.

Simple API

Just 2 endpoints. Plug-and-play SDK. Start integrating privacy in minutes.

Complete Example

React integration example

PrivateTransfer.tsx
1import { useWallet } from '@solana/wallet-adapter-react'; 2import { useState } from 'react'; 3import { GoneMixer } from '@gone/mixer-sdk'; 4 5function PrivateTransfer() { 6 const wallet = useWallet(); 7 const [note, setNote] = useState(''); 8 const mixer = new GoneMixer('https://gone.wtf'); 9 10 const handleDeposit = async () => { 11 const result = await mixer.deposit(wallet, 1.5); 12 13 if (result.success) { 14 setNote(result.note); 15 mixer.saveNote(result.note, 'Private deposit'); 16 alert(`Deposited! Note: ${result.note}`); 17 } 18 }; 19 20 const checkBalance = async () => { 21 const result = await mixer.getBalance(note, recipientAddress); 22 if (result.success) { 23 console.log('Balance:', result.balance); 24 } 25 }; 26 27 return ( 28 <div> 29 <button onClick={handleDeposit}> 30 Deposit 1.5 SOL Privately 31 </button> 32 <button onClick={checkBalance}> 33 Check Balance 34 </button> 35 </div> 36 ); 37}

Fee Structure

Deposit Fee:Free
Withdrawal Fee:0.35%
With Claynosaurz NFT:0.20%
Network Fee:~0.00001 SOL

Rate Limits

Deposit API:10 req/min
Balance Query:20 req/min
Withdrawal Process:10 req/min
Burst Limit:3x
Per IP:Yes

Security & Privacy

What We Do

  • ✓ Zero-knowledge proofs for privacy
  • ✓ Client-side note generation
  • ✓ Non-custodial architecture
  • ✓ Break on-chain transaction links
  • ✓ Relayer pays network fees

Security Warnings

  • ⚠ Never share your secret note
  • ⚠ We never store notes on servers
  • ⚠ Lost notes = lost funds forever
  • ⚠ Always verify recipient addresses
  • ⚠ Test with small amounts first

Common Errors & Solutions

Troubleshooting guide for API integration

400
Invalid amount

Cause: Amount is ≤ 0, not a number, or missing

invalid-amount.js
1// ❌ Wrong 2{ amount: 0 } 3{ amount: -1.5 } 4{ amount: "1.5" } 5 6// ✅ Correct 7{ amount: 1.5 }
400
Invalid public key

Cause: Malformed or invalid Solana address

invalid-public-key.js
1// ❌ Wrong 2{ payerPublicKey: "" } 3{ payerPublicKey: "invalid" } 4 5// ✅ Correct 6{ payerPublicKey: wallet.publicKey.toString() } 7{ payerPublicKey: "9xQeWv...GqyUA5" }
400
Invalid note format

Cause: Note doesn't start with "gone-0.2.0-" or has incorrect structure

invalid-note-format.js
1// ❌ Wrong 2{ note: "my-note-123" } 3{ note: "gone-0.1.0-..." } 4 5// ✅ Correct 6{ note: "gone-0.2.0-abc123...xyz789-txhash" }
200
No balance available

Cause: Note has 0 SOL balance (deposit not confirmed or already withdrawn)

Solution: Wait for deposit transaction confirmation (~30 seconds) or verify the note hasn't been used already

Client
Wallet not connected

Cause: Wallet adapter is not connected or initialized

wallet-connection.js
1// Check wallet connection before calling API 2if (!wallet.connected || !wallet.publicKey) { 3 console.error('Please connect wallet first'); 4 return; 5} 6 7const result = await mixer.deposit(wallet, 1.5);

Ready to integrate?

Start building privacy-preserving applications today