korascan-sdk
v1.3.0
Published
The official SDK for KoraScan - Programmatic Solana Rent Reclamation
Downloads
60
Maintainers
Readme
KoraScan SDK
The official SDK for KoraScan, allowing developers to programmatically discover and reclaim wasted rent from Kora-sponsored accounts on Solana.
New in v1.2.0:
- 🪝 Webhook Parser: Process Helius Enhanced Transactions.
- 🛡️ Double-Tap Verification: Auto-verifies on-chain state before reclaiming.
- ❄️ Cool-Down Periods: Prevent accidental closes of recently active accounts.
- 📞 Event Callbacks: Hook into
onSuccessandonFailedevents.
Installation
npm install korascan-sdk @solana/web3.jsUsage
Discovery (Finding Rent)
import { Connection, PublicKey } from '@solana/web3.js';
import { KoraClient } from 'korascan-sdk';
async function main() {
const connection = new Connection('https://api.mainnet-beta.solana.com');
const client = new KoraClient(connection);
const operator = new PublicKey('YOUR_OPERATOR_ADDRESS');
const discoverer = client.createDiscoverer(operator);
console.log('Scanning...');
const result = await discoverer.scan({ waitForSync: true });
console.log(`Found ${result.accounts.length} total accounts`);
console.log(`Reclaimable: ${result.stats.reclaimableAccounts} accounts (${result.stats.reclaimableLamports / 1e9} SOL)`);
}
main();Reclamation (Collecting Rent)
import { Connection, Keypair } from '@solana/web3.js';
import { KoraClient } from 'korascan-sdk';
import fs from 'fs';
async function main() {
const connection = new Connection('https://api.mainnet-beta.solana.com');
const client = new KoraClient(connection);
// Load your keypair
const keypair = Keypair.fromSecretKey(
new Uint8Array(JSON.parse(fs.readFileSync('./operator-keypair.json', 'utf-8')))
);
const reclaimer = client.createReclaimer(keypair, {
priorityFee: 50000,
dryRun: false
});
// 1. Find accounts using Discoverer
const discoverer = client.createDiscoverer(keypair.publicKey);
const result = await discoverer.scan({ waitForSync: true });
// 2. Filter for reclaimable ones
const toReclaim = await discoverer.analyzer.analyzeAccounts(result.accounts);
const valid = toReclaim.filter(a => a.canReclaim);
// 3. Reclaim
if (valid.length > 0) {
const stats = await reclaimer.reclaim(valid);
console.log(`Reclaimed ${stats.sol} SOL from ${stats.success} accounts!`);
}
}Storage
By default, the SDK uses InMemoryStorage, which loses data when the process exits. To persist checkpoints (recommended for large histories), implement the KoraStorage interface:
import { KoraStorage, ScanCheckpoint, DiscoveredAccount, OperatorStats } from '@korascan/sdk';
class MyDatabase implements KoraStorage {
// Implement methods: getCheckpoint, saveAccounts, etc.
}
const discoverer = client.createDiscoverer(opKey, new MyDatabase());