solvoid 1.1.7 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +110 -90
- package/SECURITY.md +42 -0
- package/bin/solvoid-scan +2 -0
- package/dist/cli/commands/ghost.d.ts +11 -0
- package/dist/cli/commands/ghost.d.ts.map +1 -0
- package/dist/cli/commands/ghost.js +161 -0
- package/dist/cli/commands/ghost.js.map +1 -0
- package/dist/cli/commands/rescue.d.ts +7 -0
- package/dist/cli/commands/rescue.d.ts.map +1 -0
- package/dist/cli/commands/rescue.js +203 -0
- package/dist/cli/commands/rescue.js.map +1 -0
- package/dist/cli/comprehensive-rpc-list.d.ts +31 -0
- package/dist/cli/comprehensive-rpc-list.d.ts.map +1 -0
- package/dist/cli/comprehensive-rpc-list.js +341 -0
- package/dist/cli/comprehensive-rpc-list.js.map +1 -0
- package/dist/cli/demo-scan.d.ts +6 -0
- package/dist/cli/demo-scan.d.ts.map +1 -0
- package/dist/cli/demo-scan.js +178 -0
- package/dist/cli/demo-scan.js.map +1 -0
- package/dist/cli/enhanced-privacy-scan.d.ts +46 -0
- package/dist/cli/enhanced-privacy-scan.d.ts.map +1 -0
- package/dist/cli/enhanced-privacy-scan.js +422 -0
- package/dist/cli/enhanced-privacy-scan.js.map +1 -0
- package/dist/cli/ghost-test.d.ts +7 -0
- package/dist/cli/ghost-test.d.ts.map +1 -0
- package/dist/cli/ghost-test.js +192 -0
- package/dist/cli/ghost-test.js.map +1 -0
- package/dist/cli/simple-scan.d.ts +6 -0
- package/dist/cli/simple-scan.d.ts.map +1 -0
- package/dist/cli/simple-scan.js +250 -0
- package/dist/cli/simple-scan.js.map +1 -0
- package/dist/cli/solvoid-scan.d.ts +7 -0
- package/dist/cli/solvoid-scan.d.ts.map +1 -0
- package/dist/cli/solvoid-scan.js +263 -0
- package/dist/cli/solvoid-scan.js.map +1 -0
- package/dist/cli/ultimate-privacy-scan.d.ts +54 -0
- package/dist/cli/ultimate-privacy-scan.d.ts.map +1 -0
- package/dist/cli/ultimate-privacy-scan.js +543 -0
- package/dist/cli/ultimate-privacy-scan.js.map +1 -0
- package/dist/cli/utils/asset-scanner.d.ts +76 -0
- package/dist/cli/utils/asset-scanner.d.ts.map +1 -0
- package/dist/cli/utils/asset-scanner.js +224 -0
- package/dist/cli/utils/asset-scanner.js.map +1 -0
- package/dist/cli/utils/badge-generator.d.ts +33 -0
- package/dist/cli/utils/badge-generator.d.ts.map +1 -0
- package/dist/cli/utils/badge-generator.js +263 -0
- package/dist/cli/utils/badge-generator.js.map +1 -0
- package/dist/cli/utils/enhanced-monitoring.d.ts +13 -0
- package/dist/cli/utils/enhanced-monitoring.d.ts.map +1 -0
- package/dist/cli/utils/enhanced-monitoring.js +46 -0
- package/dist/cli/utils/enhanced-monitoring.js.map +1 -0
- package/dist/cli/utils/enhanced-pyth-feed.d.ts +20 -0
- package/dist/cli/utils/enhanced-pyth-feed.d.ts.map +1 -0
- package/dist/cli/utils/enhanced-pyth-feed.js +64 -0
- package/dist/cli/utils/enhanced-pyth-feed.js.map +1 -0
- package/dist/cli/utils/enhanced-threat-intel.d.ts +20 -0
- package/dist/cli/utils/enhanced-threat-intel.d.ts.map +1 -0
- package/dist/cli/utils/enhanced-threat-intel.js +57 -0
- package/dist/cli/utils/enhanced-threat-intel.js.map +1 -0
- package/dist/cli/utils/env-validator.d.ts +17 -0
- package/dist/cli/utils/env-validator.d.ts.map +1 -0
- package/dist/cli/utils/env-validator.js +257 -0
- package/dist/cli/utils/env-validator.js.map +1 -0
- package/dist/cli/utils/ghost-art.d.ts +14 -0
- package/dist/cli/utils/ghost-art.d.ts.map +1 -0
- package/dist/cli/utils/ghost-art.js +285 -0
- package/dist/cli/utils/ghost-art.js.map +1 -0
- package/dist/cli/utils/ghost-calculator.d.ts +52 -0
- package/dist/cli/utils/ghost-calculator.d.ts.map +1 -0
- package/dist/cli/utils/ghost-calculator.js +207 -0
- package/dist/cli/utils/ghost-calculator.js.map +1 -0
- package/dist/cli/utils/jito-mev-bundle.d.ts +9 -0
- package/dist/cli/utils/jito-mev-bundle.d.ts.map +1 -0
- package/dist/cli/utils/jito-mev-bundle.js +40 -0
- package/dist/cli/utils/jito-mev-bundle.js.map +1 -0
- package/dist/cli/utils/rescue-engine.d.ts +57 -0
- package/dist/cli/utils/rescue-engine.d.ts.map +1 -0
- package/dist/cli/utils/rescue-engine.js +192 -0
- package/dist/cli/utils/rescue-engine.js.map +1 -0
- package/dist/cli/utils/shadow-bridge.d.ts +20 -0
- package/dist/cli/utils/shadow-bridge.d.ts.map +1 -0
- package/dist/cli/utils/shadow-bridge.js +33 -0
- package/dist/cli/utils/shadow-bridge.js.map +1 -0
- package/dist/cli/utils/threat-detector.d.ts +48 -0
- package/dist/cli/utils/threat-detector.d.ts.map +1 -0
- package/dist/cli/utils/threat-detector.js +304 -0
- package/dist/cli/utils/threat-detector.js.map +1 -0
- package/dist/relayer/key-manager.d.ts +52 -0
- package/dist/relayer/key-manager.d.ts.map +1 -0
- package/dist/relayer/key-manager.js +356 -0
- package/dist/relayer/key-manager.js.map +1 -0
- package/dist/relayer/replay-protection.d.ts +94 -0
- package/dist/relayer/replay-protection.d.ts.map +1 -0
- package/dist/relayer/replay-protection.js +189 -0
- package/dist/relayer/replay-protection.js.map +1 -0
- package/dist/relayer/secure-service.d.ts +46 -0
- package/dist/relayer/secure-service.d.ts.map +1 -0
- package/dist/relayer/secure-service.js +538 -0
- package/dist/relayer/secure-service.js.map +1 -0
- package/dist/relayer/service.d.ts +25 -0
- package/dist/relayer/service.d.ts.map +1 -0
- package/dist/relayer/service.js +380 -0
- package/dist/relayer/service.js.map +1 -0
- package/dist/{client.d.ts → sdk/client.d.ts} +17 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/{client.js → sdk/client.js} +69 -2
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/crypto/poseidon.d.ts.map +1 -0
- package/dist/sdk/crypto/poseidon.js.map +1 -0
- package/dist/sdk/events/bus.d.ts.map +1 -0
- package/dist/sdk/events/bus.js.map +1 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/integrity.d.ts.map +1 -0
- package/dist/sdk/integrity.js.map +1 -0
- package/dist/sdk/network/shadow-rpc.d.ts.map +1 -0
- package/dist/sdk/network/shadow-rpc.js.map +1 -0
- package/dist/sdk/passport/manager.d.ts.map +1 -0
- package/dist/sdk/passport/manager.js.map +1 -0
- package/dist/sdk/pipeline.d.ts.map +1 -0
- package/dist/{pipeline.js → sdk/pipeline.js} +69 -12
- package/dist/sdk/pipeline.js.map +1 -0
- package/dist/sdk/polyfill.d.ts +8 -0
- package/dist/sdk/polyfill.d.ts.map +1 -0
- package/dist/sdk/polyfill.js +21 -0
- package/dist/sdk/polyfill.js.map +1 -0
- package/dist/sdk/privacy/relayer.d.ts.map +1 -0
- package/dist/sdk/privacy/relayer.js.map +1 -0
- package/dist/sdk/privacy/shield.d.ts.map +1 -0
- package/dist/sdk/privacy/shield.js.map +1 -0
- package/dist/sdk/privacy-engine.d.ts.map +1 -0
- package/dist/sdk/privacy-engine.js.map +1 -0
- package/dist/sdk/registry/idl-fetcher.d.ts.map +1 -0
- package/dist/sdk/registry/idl-fetcher.js.map +1 -0
- package/dist/sdk/registry/programs.d.ts.map +1 -0
- package/dist/sdk/registry/programs.js.map +1 -0
- package/dist/sdk/rescue/analyzer.d.ts.map +1 -0
- package/dist/sdk/rescue/analyzer.js.map +1 -0
- package/dist/sdk/rescue/builder.d.ts.map +1 -0
- package/dist/sdk/rescue/builder.js.map +1 -0
- package/dist/sdk/security/key-rotation.d.ts.map +1 -0
- package/dist/sdk/security/key-rotation.js.map +1 -0
- package/dist/{semantics → sdk/semantics}/analyzer.d.ts.map +1 -1
- package/dist/{semantics → sdk/semantics}/analyzer.js.map +1 -1
- package/dist/sdk/semantics/decoder.d.ts.map +1 -0
- package/dist/sdk/semantics/decoder.js.map +1 -0
- package/dist/{semantics → sdk/semantics}/graph.d.ts.map +1 -1
- package/dist/{semantics → sdk/semantics}/graph.js.map +1 -1
- package/dist/sdk/semantics/idl-registry.d.ts.map +1 -0
- package/dist/sdk/semantics/idl-registry.js.map +1 -0
- package/dist/sdk/semantics/types.d.ts.map +1 -0
- package/dist/sdk/semantics/types.js.map +1 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/{semantics → sdk}/types.js.map +1 -1
- package/dist/sdk/utils/address.d.ts.map +1 -0
- package/dist/sdk/utils/address.js.map +1 -0
- package/dist/sdk/utils/config.d.ts.map +1 -0
- package/dist/sdk/utils/config.js.map +1 -0
- package/dist/sdk/utils/logger.d.ts.map +1 -0
- package/dist/sdk/utils/logger.js.map +1 -0
- package/dist/simple-scan.js +249 -0
- package/package.json +103 -36
- package/CHANGELOG.md +0 -33
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/crypto/poseidon.d.ts.map +0 -1
- package/dist/crypto/poseidon.js.map +0 -1
- package/dist/events/bus.d.ts.map +0 -1
- package/dist/events/bus.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integrity.d.ts.map +0 -1
- package/dist/integrity.js.map +0 -1
- package/dist/network/shadow-rpc.d.ts.map +0 -1
- package/dist/network/shadow-rpc.js.map +0 -1
- package/dist/passport/manager.d.ts.map +0 -1
- package/dist/passport/manager.js.map +0 -1
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/pipeline.js.map +0 -1
- package/dist/privacy/relayer.d.ts.map +0 -1
- package/dist/privacy/relayer.js.map +0 -1
- package/dist/privacy/shield.d.ts.map +0 -1
- package/dist/privacy/shield.js.map +0 -1
- package/dist/privacy-engine.d.ts.map +0 -1
- package/dist/privacy-engine.js.map +0 -1
- package/dist/registry/idl-fetcher.d.ts.map +0 -1
- package/dist/registry/idl-fetcher.js.map +0 -1
- package/dist/registry/programs.d.ts.map +0 -1
- package/dist/registry/programs.js.map +0 -1
- package/dist/rescue/analyzer.d.ts.map +0 -1
- package/dist/rescue/analyzer.js.map +0 -1
- package/dist/rescue/builder.d.ts.map +0 -1
- package/dist/rescue/builder.js.map +0 -1
- package/dist/security/key-rotation.d.ts.map +0 -1
- package/dist/security/key-rotation.js.map +0 -1
- package/dist/semantics/decoder.d.ts.map +0 -1
- package/dist/semantics/decoder.js.map +0 -1
- package/dist/semantics/idl-registry.d.ts.map +0 -1
- package/dist/semantics/idl-registry.js.map +0 -1
- package/dist/semantics/types.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/address.d.ts.map +0 -1
- package/dist/utils/address.js.map +0 -1
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- /package/dist/{crypto → sdk/crypto}/poseidon.d.ts +0 -0
- /package/dist/{crypto → sdk/crypto}/poseidon.js +0 -0
- /package/dist/{events → sdk/events}/bus.d.ts +0 -0
- /package/dist/{events → sdk/events}/bus.js +0 -0
- /package/dist/{index.d.ts → sdk/index.d.ts} +0 -0
- /package/dist/{index.js → sdk/index.js} +0 -0
- /package/dist/{integrity.d.ts → sdk/integrity.d.ts} +0 -0
- /package/dist/{integrity.js → sdk/integrity.js} +0 -0
- /package/dist/{network → sdk/network}/shadow-rpc.d.ts +0 -0
- /package/dist/{network → sdk/network}/shadow-rpc.js +0 -0
- /package/dist/{passport → sdk/passport}/manager.d.ts +0 -0
- /package/dist/{passport → sdk/passport}/manager.js +0 -0
- /package/dist/{pipeline.d.ts → sdk/pipeline.d.ts} +0 -0
- /package/dist/{privacy → sdk/privacy}/relayer.d.ts +0 -0
- /package/dist/{privacy → sdk/privacy}/relayer.js +0 -0
- /package/dist/{privacy → sdk/privacy}/shield.d.ts +0 -0
- /package/dist/{privacy → sdk/privacy}/shield.js +0 -0
- /package/dist/{privacy-engine.d.ts → sdk/privacy-engine.d.ts} +0 -0
- /package/dist/{privacy-engine.js → sdk/privacy-engine.js} +0 -0
- /package/dist/{registry → sdk/registry}/idl-fetcher.d.ts +0 -0
- /package/dist/{registry → sdk/registry}/idl-fetcher.js +0 -0
- /package/dist/{registry → sdk/registry}/programs.d.ts +0 -0
- /package/dist/{registry → sdk/registry}/programs.js +0 -0
- /package/dist/{rescue → sdk/rescue}/analyzer.d.ts +0 -0
- /package/dist/{rescue → sdk/rescue}/analyzer.js +0 -0
- /package/dist/{rescue → sdk/rescue}/builder.d.ts +0 -0
- /package/dist/{rescue → sdk/rescue}/builder.js +0 -0
- /package/dist/{security → sdk/security}/key-rotation.d.ts +0 -0
- /package/dist/{security → sdk/security}/key-rotation.js +0 -0
- /package/dist/{semantics → sdk/semantics}/analyzer.d.ts +0 -0
- /package/dist/{semantics → sdk/semantics}/analyzer.js +0 -0
- /package/dist/{semantics → sdk/semantics}/decoder.d.ts +0 -0
- /package/dist/{semantics → sdk/semantics}/decoder.js +0 -0
- /package/dist/{semantics → sdk/semantics}/graph.d.ts +0 -0
- /package/dist/{semantics → sdk/semantics}/graph.js +0 -0
- /package/dist/{semantics → sdk/semantics}/idl-registry.d.ts +0 -0
- /package/dist/{semantics → sdk/semantics}/idl-registry.js +0 -0
- /package/dist/{semantics → sdk/semantics}/types.d.ts +0 -0
- /package/dist/{semantics → sdk/semantics}/types.js +0 -0
- /package/dist/{types.d.ts → sdk/types.d.ts} +0 -0
- /package/dist/{types.js → sdk/types.js} +0 -0
- /package/dist/{utils → sdk/utils}/address.d.ts +0 -0
- /package/dist/{utils → sdk/utils}/address.js +0 -0
- /package/dist/{utils → sdk/utils}/config.d.ts +0 -0
- /package/dist/{utils → sdk/utils}/config.js +0 -0
- /package/dist/{utils → sdk/utils}/logger.d.ts +0 -0
- /package/dist/{utils → sdk/utils}/logger.js +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// cli/utils/threat-detector.ts
|
|
3
|
+
// Threat Detection System
|
|
4
|
+
// Detects active threats: drainers, MEV bots, key leaks, etc.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ThreatDetector = void 0;
|
|
7
|
+
class ThreatDetector {
|
|
8
|
+
constructor(connection) {
|
|
9
|
+
this.connection = connection;
|
|
10
|
+
// Known malicious addresses (would be loaded from database in production)
|
|
11
|
+
this.knownDrainers = new Set([
|
|
12
|
+
// Add known drainer addresses
|
|
13
|
+
'2g7FcZyM8QvPtkVHw7KXs3h9Y9mNv9WKXqBvE4h8pump', // Example
|
|
14
|
+
]);
|
|
15
|
+
this.knownMEVBots = new Set([
|
|
16
|
+
// Add known MEV bot addresses
|
|
17
|
+
// These would be updated regularly
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Scan for active threats
|
|
22
|
+
*/
|
|
23
|
+
async scan(address) {
|
|
24
|
+
const threats = [];
|
|
25
|
+
// Run all detection methods in parallel
|
|
26
|
+
const [drainerThreats, mevThreats, keyLeakThreats, trackingThreats, patternThreats] = await Promise.all([
|
|
27
|
+
this.detectDrainer(address),
|
|
28
|
+
this.detectMEVBot(address),
|
|
29
|
+
this.detectKeyLeak(address),
|
|
30
|
+
this.detectTracking(address),
|
|
31
|
+
this.detectSuspiciousPatterns(address)
|
|
32
|
+
]);
|
|
33
|
+
threats.push(...drainerThreats, ...mevThreats, ...keyLeakThreats, ...trackingThreats, ...patternThreats);
|
|
34
|
+
// Sort by severity
|
|
35
|
+
return threats.sort((a, b) => {
|
|
36
|
+
const severityOrder = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };
|
|
37
|
+
return severityOrder[a.severity] - severityOrder[b.severity];
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Detect active drainer
|
|
42
|
+
*/
|
|
43
|
+
async detectDrainer(address) {
|
|
44
|
+
const threats = [];
|
|
45
|
+
try {
|
|
46
|
+
// Get recent transactions
|
|
47
|
+
const signatures = await this.connection.getSignaturesForAddress(address, { limit: 10 });
|
|
48
|
+
for (const sig of signatures) {
|
|
49
|
+
const tx = await this.connection.getTransaction(sig.signature, {
|
|
50
|
+
maxSupportedTransactionVersion: 0
|
|
51
|
+
});
|
|
52
|
+
if (!tx)
|
|
53
|
+
continue;
|
|
54
|
+
// Check for interactions with known drainers
|
|
55
|
+
const accounts = tx.transaction.message.getAccountKeys().staticAccountKeys;
|
|
56
|
+
for (const account of accounts) {
|
|
57
|
+
const accountStr = account.toBase58();
|
|
58
|
+
if (this.knownDrainers.has(accountStr)) {
|
|
59
|
+
threats.push({
|
|
60
|
+
type: 'DRAINER',
|
|
61
|
+
severity: 'CRITICAL',
|
|
62
|
+
description: `Active drainer detected: ${accountStr.slice(0, 8)}...`,
|
|
63
|
+
confidence: 95,
|
|
64
|
+
evidence: [{
|
|
65
|
+
transaction: sig.signature,
|
|
66
|
+
drainerAddress: accountStr,
|
|
67
|
+
timestamp: sig.blockTime
|
|
68
|
+
}],
|
|
69
|
+
timestamp: Date.now()
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Check for suspicious approval patterns
|
|
74
|
+
if (this.isSuspiciousApproval(tx)) {
|
|
75
|
+
threats.push({
|
|
76
|
+
type: 'DRAINER',
|
|
77
|
+
severity: 'HIGH',
|
|
78
|
+
description: 'Suspicious token approval detected',
|
|
79
|
+
confidence: 75,
|
|
80
|
+
evidence: [{ transaction: sig.signature }],
|
|
81
|
+
timestamp: Date.now()
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('Error detecting drainer:', error);
|
|
88
|
+
}
|
|
89
|
+
return threats;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Detect MEV bot activity
|
|
93
|
+
*/
|
|
94
|
+
async detectMEVBot(address) {
|
|
95
|
+
const threats = [];
|
|
96
|
+
try {
|
|
97
|
+
const signatures = await this.connection.getSignaturesForAddress(address, { limit: 20 });
|
|
98
|
+
// Look for sandwich attack patterns
|
|
99
|
+
const recentTxs = signatures.slice(0, 10);
|
|
100
|
+
let sandwichCount = 0;
|
|
101
|
+
for (let i = 0; i < recentTxs.length - 2; i++) {
|
|
102
|
+
const tx1 = recentTxs[i];
|
|
103
|
+
const tx2 = recentTxs[i + 1];
|
|
104
|
+
const tx3 = recentTxs[i + 2];
|
|
105
|
+
// Check if transactions are in same block (potential sandwich)
|
|
106
|
+
if (tx1.slot === tx2.slot && tx2.slot === tx3.slot) {
|
|
107
|
+
sandwichCount++;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (sandwichCount > 2) {
|
|
111
|
+
threats.push({
|
|
112
|
+
type: 'SANDWICH_ATTACK',
|
|
113
|
+
severity: 'HIGH',
|
|
114
|
+
description: `Detected ${sandwichCount} potential sandwich attacks`,
|
|
115
|
+
confidence: 80,
|
|
116
|
+
evidence: [{ pattern: 'same-block-transactions', count: sandwichCount }],
|
|
117
|
+
timestamp: Date.now()
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// Check for known MEV bot interactions
|
|
121
|
+
for (const sig of signatures.slice(0, 5)) {
|
|
122
|
+
const tx = await this.connection.getTransaction(sig.signature, {
|
|
123
|
+
maxSupportedTransactionVersion: 0
|
|
124
|
+
});
|
|
125
|
+
if (!tx)
|
|
126
|
+
continue;
|
|
127
|
+
const accounts = tx.transaction.message.getAccountKeys().staticAccountKeys;
|
|
128
|
+
for (const account of accounts) {
|
|
129
|
+
if (this.knownMEVBots.has(account.toBase58())) {
|
|
130
|
+
threats.push({
|
|
131
|
+
type: 'MEV_BOT',
|
|
132
|
+
severity: 'HIGH',
|
|
133
|
+
description: 'MEV bot interaction detected',
|
|
134
|
+
confidence: 90,
|
|
135
|
+
evidence: [{ transaction: sig.signature }],
|
|
136
|
+
timestamp: Date.now()
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
console.error('Error detecting MEV bot:', error);
|
|
144
|
+
}
|
|
145
|
+
return threats;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Detect potential key leak
|
|
149
|
+
*/
|
|
150
|
+
async detectKeyLeak(address) {
|
|
151
|
+
const threats = [];
|
|
152
|
+
try {
|
|
153
|
+
// Check for unusual transaction patterns that might indicate key compromise
|
|
154
|
+
const signatures = await this.connection.getSignaturesForAddress(address, { limit: 50 });
|
|
155
|
+
if (signatures.length === 0)
|
|
156
|
+
return threats;
|
|
157
|
+
// Analyze transaction frequency
|
|
158
|
+
const recentSigs = signatures.slice(0, 10);
|
|
159
|
+
const timestamps = recentSigs
|
|
160
|
+
.filter(sig => sig.blockTime)
|
|
161
|
+
.map(sig => sig.blockTime);
|
|
162
|
+
if (timestamps.length >= 3) {
|
|
163
|
+
// Check for sudden burst of activity
|
|
164
|
+
const timeDiffs = timestamps.slice(0, -1).map((t, i) => t - timestamps[i + 1]);
|
|
165
|
+
const avgDiff = timeDiffs.reduce((a, b) => a + b, 0) / timeDiffs.length;
|
|
166
|
+
// If recent transactions are happening very quickly (< 5 seconds apart)
|
|
167
|
+
if (avgDiff < 5) {
|
|
168
|
+
threats.push({
|
|
169
|
+
type: 'KEY_LEAK',
|
|
170
|
+
severity: 'CRITICAL',
|
|
171
|
+
description: 'Unusual burst of rapid transactions detected (potential key compromise)',
|
|
172
|
+
confidence: 70,
|
|
173
|
+
evidence: [{
|
|
174
|
+
pattern: 'rapid-transactions',
|
|
175
|
+
averageTimeDiff: avgDiff,
|
|
176
|
+
recentCount: recentSigs.length
|
|
177
|
+
}],
|
|
178
|
+
timestamp: Date.now()
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Check for transactions to many different addresses (potential draining)
|
|
183
|
+
const uniqueRecipients = new Set();
|
|
184
|
+
for (const sig of recentSigs) {
|
|
185
|
+
const tx = await this.connection.getTransaction(sig.signature, {
|
|
186
|
+
maxSupportedTransactionVersion: 0
|
|
187
|
+
});
|
|
188
|
+
if (tx) {
|
|
189
|
+
const accounts = tx.transaction.message.getAccountKeys().staticAccountKeys;
|
|
190
|
+
accounts.forEach(acc => uniqueRecipients.add(acc.toBase58()));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (uniqueRecipients.size > 8) {
|
|
194
|
+
threats.push({
|
|
195
|
+
type: 'KEY_LEAK',
|
|
196
|
+
severity: 'HIGH',
|
|
197
|
+
description: 'Transactions to many different addresses (potential automated draining)',
|
|
198
|
+
confidence: 65,
|
|
199
|
+
evidence: [{
|
|
200
|
+
pattern: 'multiple-recipients',
|
|
201
|
+
count: uniqueRecipients.size
|
|
202
|
+
}],
|
|
203
|
+
timestamp: Date.now()
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
console.error('Error detecting key leak:', error);
|
|
209
|
+
}
|
|
210
|
+
return threats;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Detect tracking/surveillance
|
|
214
|
+
*/
|
|
215
|
+
async detectTracking(address) {
|
|
216
|
+
const threats = [];
|
|
217
|
+
try {
|
|
218
|
+
// Check for known surveillance/tracking addresses
|
|
219
|
+
const signatures = await this.connection.getSignaturesForAddress(address, { limit: 10 });
|
|
220
|
+
// In production, this would check against a database of known
|
|
221
|
+
// tracking services, chain analysis firms, etc.
|
|
222
|
+
// For now, we can detect patterns like:
|
|
223
|
+
// - Frequent small "dust" transactions (tracking markers)
|
|
224
|
+
// - Interactions with known chain analysis addresses
|
|
225
|
+
let dustCount = 0;
|
|
226
|
+
for (const sig of signatures) {
|
|
227
|
+
const tx = await this.connection.getTransaction(sig.signature, {
|
|
228
|
+
maxSupportedTransactionVersion: 0
|
|
229
|
+
});
|
|
230
|
+
if (!tx)
|
|
231
|
+
continue;
|
|
232
|
+
// Check for dust transactions (< 0.001 SOL)
|
|
233
|
+
if (tx.meta?.postBalances && tx.meta?.preBalances) {
|
|
234
|
+
const balanceChanges = tx.meta.postBalances.map((post, i) => Math.abs(post - tx.meta.preBalances[i]));
|
|
235
|
+
if (balanceChanges.some(change => change < 1000000 && change > 0)) {
|
|
236
|
+
dustCount++;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (dustCount > 3) {
|
|
241
|
+
threats.push({
|
|
242
|
+
type: 'TRACKING',
|
|
243
|
+
severity: 'MEDIUM',
|
|
244
|
+
description: 'Multiple dust transactions detected (potential tracking markers)',
|
|
245
|
+
confidence: 60,
|
|
246
|
+
evidence: [{ pattern: 'dust-transactions', count: dustCount }],
|
|
247
|
+
timestamp: Date.now()
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
console.error('Error detecting tracking:', error);
|
|
253
|
+
}
|
|
254
|
+
return threats;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Detect suspicious transaction patterns
|
|
258
|
+
*/
|
|
259
|
+
async detectSuspiciousPatterns(address) {
|
|
260
|
+
const threats = [];
|
|
261
|
+
try {
|
|
262
|
+
const signatures = await this.connection.getSignaturesForAddress(address, { limit: 20 });
|
|
263
|
+
// Check for failed transactions (might indicate attempted exploits)
|
|
264
|
+
const failedTxs = signatures.filter(sig => sig.err !== null);
|
|
265
|
+
if (failedTxs.length > 5) {
|
|
266
|
+
threats.push({
|
|
267
|
+
type: 'UNKNOWN',
|
|
268
|
+
severity: 'MEDIUM',
|
|
269
|
+
description: `${failedTxs.length} failed transactions detected (potential exploit attempts)`,
|
|
270
|
+
confidence: 50,
|
|
271
|
+
evidence: [{ pattern: 'failed-transactions', count: failedTxs.length }],
|
|
272
|
+
timestamp: Date.now()
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
console.error('Error detecting suspicious patterns:', error);
|
|
278
|
+
}
|
|
279
|
+
return threats;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Check if transaction has suspicious approval
|
|
283
|
+
*/
|
|
284
|
+
isSuspiciousApproval(tx) {
|
|
285
|
+
// Check transaction instructions for suspicious patterns
|
|
286
|
+
// In production, this would analyze the instruction data
|
|
287
|
+
// Common drainer pattern: Approve max amount then transfer
|
|
288
|
+
// This is a simplified check
|
|
289
|
+
return false; // Placeholder
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get threat severity color
|
|
293
|
+
*/
|
|
294
|
+
static getSeverityColor(severity) {
|
|
295
|
+
switch (severity) {
|
|
296
|
+
case 'CRITICAL': return 'red';
|
|
297
|
+
case 'HIGH': return 'red';
|
|
298
|
+
case 'MEDIUM': return 'yellow';
|
|
299
|
+
case 'LOW': return 'gray';
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
exports.ThreatDetector = ThreatDetector;
|
|
304
|
+
//# sourceMappingURL=threat-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-detector.js","sourceRoot":"","sources":["../../../cli/utils/threat-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface KeyPairData {
|
|
2
|
+
publicKey: string;
|
|
3
|
+
privateKey: string;
|
|
4
|
+
createdAt: number;
|
|
5
|
+
lastRotated?: number;
|
|
6
|
+
rotationSignature?: string;
|
|
7
|
+
previousPublicKey?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface KeyRotationData {
|
|
10
|
+
oldPublicKey: string;
|
|
11
|
+
newPublicKey: string;
|
|
12
|
+
rotationSignature: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
transitionPeriod: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class KeyManager {
|
|
17
|
+
private keypair;
|
|
18
|
+
private keyFilePath;
|
|
19
|
+
private storageType;
|
|
20
|
+
private encryptionKey;
|
|
21
|
+
constructor(storageType?: 'file' | 'env' | 'aws' | 'gcp' | 'hsm');
|
|
22
|
+
private loadOrGenerateKeysSync;
|
|
23
|
+
private loadFromFileSync;
|
|
24
|
+
private loadFromEnvSync;
|
|
25
|
+
private generateNewKeysSync;
|
|
26
|
+
private saveKeysSync;
|
|
27
|
+
private saveToFileSync;
|
|
28
|
+
private saveToEnvSync;
|
|
29
|
+
private loadFromFile;
|
|
30
|
+
private loadFromEnv;
|
|
31
|
+
private loadFromAWS;
|
|
32
|
+
private loadFromGCP;
|
|
33
|
+
private loadFromHSM;
|
|
34
|
+
private generateNewKeys;
|
|
35
|
+
private saveKeys;
|
|
36
|
+
private saveToFile;
|
|
37
|
+
private saveToEnv;
|
|
38
|
+
private saveToAWS;
|
|
39
|
+
private saveToGCP;
|
|
40
|
+
private saveToHSM;
|
|
41
|
+
private encryptData;
|
|
42
|
+
private decryptData;
|
|
43
|
+
rotateKeys(): Promise<KeyRotationData>;
|
|
44
|
+
private signMessage;
|
|
45
|
+
verifyRotationSignature(rotationData: KeyRotationData): boolean;
|
|
46
|
+
getCurrentKeys(): KeyPairData;
|
|
47
|
+
getPublicKey(): string;
|
|
48
|
+
getPrivateKey(): string;
|
|
49
|
+
isKeyInTransitionPeriod(): boolean;
|
|
50
|
+
getPreviousPublicKey(): string | null;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=key-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-manager.d.ts","sourceRoot":"","sources":["../../relayer/key-manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,GAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAc;IAOxE,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;YAMP,YAAY;YAUZ,WAAW;YAeX,WAAW;YAiBX,WAAW;YAiBX,WAAW;YAMX,eAAe;YAaf,QAAQ;YAoBR,UAAU;YAMV,SAAS;YAMT,SAAS;YAcT,SAAS;YAwBT,SAAS;IAIvB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,WAAW;IAkBN,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAmCnD,OAAO,CAAC,WAAW;IAOZ,uBAAuB,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO;IAoB/D,cAAc,IAAI,WAAW;IAI7B,YAAY,IAAI,MAAM;IAItB,aAAa,IAAI,MAAM;IAIvB,uBAAuB,IAAI,OAAO;IAUlC,oBAAoB,IAAI,MAAM,GAAG,IAAI;CAG/C"}
|