Skip to main content

Library Usage

Integrate Solana Privacy Scanner into your applications.

Installation

npm install solana-privacy-scanner-core

Quick Start

import { 
RPCClient,
collectWalletData,
normalizeWalletData,
generateReport,
createDefaultLabelProvider
} from 'solana-privacy-scanner-core';

async function analyzeWallet(address: string) {
const rpc = new RPCClient();
const labelProvider = createDefaultLabelProvider();

const rawData = await collectWalletData(rpc, address, {
maxSignatures: 50,
includeTokenAccounts: true,
});

const context = normalizeWalletData(rawData, labelProvider);
const report = generateReport(context);

return report;
}

Core Functions

Data Collection

// Wallet
const rawData = await collectWalletData(rpc, address, {
maxSignatures?: number,
includeTokenAccounts?: boolean
});

// Transaction
const rawData = await collectTransactionData(rpc, signature);

// Program
const rawData = await collectProgramData(rpc, programId, {
maxTransactions?: number,
limit?: number
});

Normalization

const labelProvider = createDefaultLabelProvider();

// Wallet
const context = normalizeWalletData(rawData, labelProvider);

// Transaction
const context = normalizeTransactionData(rawData, labelProvider);

// Program
const context = normalizeProgramData(rawData, labelProvider);

Report Generation

const report = generateReport(context);

console.log(report.overallRisk); // 'LOW' | 'MEDIUM' | 'HIGH'
console.log(report.signals); // Array of detected risks
console.log(report.knownEntities); // CEXs, bridges, etc.
console.log(report.mitigations); // Recommendations

TypeScript Types

import type {
PrivacyReport,
RiskSignal,
ScanContext,
RawWalletData,
RawTransactionData,
RawProgramData
} from 'solana-privacy-scanner-core';

Examples

Transaction Scan

const rpc = new RPCClient();
const labels = createDefaultLabelProvider();

const raw = await collectTransactionData(rpc, signature);
const context = normalizeTransactionData(raw, labels);
const report = generateReport(context);

if (report.overallRisk === 'HIGH') {
console.warn('High privacy risk detected!');
report.signals.forEach(signal => {
console.log(`- ${signal.name}: ${signal.reason}`);
});
}

Program Scan

const rpc = new RPCClient();
const labels = createDefaultLabelProvider();

const raw = await collectProgramData(rpc, programId, {
maxTransactions: 100
});

const context = normalizeProgramData(raw, labels);
const report = generateReport(context);

Custom RPC (Production)

const rpc = new RPCClient({
rpcUrl: process.env.QUICKNODE_RPC_URL,
maxRetries: 5,
requestsPerSecond: 10
});

Error Handling

All collectors include graceful error handling:

try {
const rawData = await collectWalletData(rpc, address);
// rawData.transactions will be empty array if RPC fails
} catch (error) {
console.error('Collection failed:', error);
}

Next Steps