solvoid 1.2.0 → 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.
Files changed (97) hide show
  1. package/README.md +116 -258
  2. package/SECURITY.md +27 -24
  3. package/dist/cli/commands/ghost.d.ts +3 -3
  4. package/dist/cli/commands/ghost.d.ts.map +1 -1
  5. package/dist/cli/commands/ghost.js +67 -91
  6. package/dist/cli/commands/ghost.js.map +1 -1
  7. package/dist/cli/commands/rescue.d.ts +4 -0
  8. package/dist/cli/commands/rescue.d.ts.map +1 -1
  9. package/dist/cli/commands/rescue.js +102 -199
  10. package/dist/cli/commands/rescue.js.map +1 -1
  11. package/dist/cli/demo-scan.js +48 -130
  12. package/dist/cli/demo-scan.js.map +1 -1
  13. package/dist/cli/solvoid-scan.d.ts +4 -3
  14. package/dist/cli/solvoid-scan.d.ts.map +1 -1
  15. package/dist/cli/solvoid-scan.js +55 -46
  16. package/dist/cli/solvoid-scan.js.map +1 -1
  17. package/dist/cli/utils/asset-scanner.d.ts.map +1 -1
  18. package/dist/cli/utils/asset-scanner.js +7 -5
  19. package/dist/cli/utils/asset-scanner.js.map +1 -1
  20. package/dist/cli/utils/badge-generator.d.ts.map +1 -1
  21. package/dist/cli/utils/badge-generator.js +11 -9
  22. package/dist/cli/utils/badge-generator.js.map +1 -1
  23. package/dist/cli/utils/enhanced-monitoring.d.ts +13 -0
  24. package/dist/cli/utils/enhanced-monitoring.d.ts.map +1 -0
  25. package/dist/cli/utils/enhanced-monitoring.js +46 -0
  26. package/dist/cli/utils/enhanced-monitoring.js.map +1 -0
  27. package/dist/cli/utils/enhanced-pyth-feed.d.ts +20 -0
  28. package/dist/cli/utils/enhanced-pyth-feed.d.ts.map +1 -0
  29. package/dist/cli/utils/enhanced-pyth-feed.js +64 -0
  30. package/dist/cli/utils/enhanced-pyth-feed.js.map +1 -0
  31. package/dist/cli/utils/enhanced-threat-intel.d.ts +20 -0
  32. package/dist/cli/utils/enhanced-threat-intel.d.ts.map +1 -0
  33. package/dist/cli/utils/enhanced-threat-intel.js +57 -0
  34. package/dist/cli/utils/enhanced-threat-intel.js.map +1 -0
  35. package/dist/cli/utils/env-validator.d.ts.map +1 -1
  36. package/dist/cli/utils/env-validator.js +6 -3
  37. package/dist/cli/utils/env-validator.js.map +1 -1
  38. package/dist/cli/utils/jito-mev-bundle.d.ts +9 -0
  39. package/dist/cli/utils/jito-mev-bundle.d.ts.map +1 -0
  40. package/dist/cli/utils/jito-mev-bundle.js +40 -0
  41. package/dist/cli/utils/jito-mev-bundle.js.map +1 -0
  42. package/dist/cli/utils/rescue-engine.d.ts +0 -4
  43. package/dist/cli/utils/rescue-engine.d.ts.map +1 -1
  44. package/dist/cli/utils/rescue-engine.js +28 -46
  45. package/dist/cli/utils/rescue-engine.js.map +1 -1
  46. package/dist/cli/utils/shadow-bridge.d.ts +20 -0
  47. package/dist/cli/utils/shadow-bridge.d.ts.map +1 -0
  48. package/dist/cli/utils/shadow-bridge.js +33 -0
  49. package/dist/cli/utils/shadow-bridge.js.map +1 -0
  50. package/dist/relayer/key-manager.d.ts +52 -0
  51. package/dist/relayer/key-manager.d.ts.map +1 -0
  52. package/dist/relayer/key-manager.js +356 -0
  53. package/dist/relayer/key-manager.js.map +1 -0
  54. package/dist/relayer/replay-protection.d.ts +94 -0
  55. package/dist/relayer/replay-protection.d.ts.map +1 -0
  56. package/dist/relayer/replay-protection.js +189 -0
  57. package/dist/relayer/replay-protection.js.map +1 -0
  58. package/dist/relayer/secure-service.d.ts +46 -0
  59. package/dist/relayer/secure-service.d.ts.map +1 -0
  60. package/dist/relayer/secure-service.js +538 -0
  61. package/dist/relayer/secure-service.js.map +1 -0
  62. package/dist/relayer/service.d.ts +25 -0
  63. package/dist/relayer/service.d.ts.map +1 -0
  64. package/dist/relayer/service.js +380 -0
  65. package/dist/relayer/service.js.map +1 -0
  66. package/dist/sdk/client.d.ts +42 -8
  67. package/dist/sdk/client.d.ts.map +1 -1
  68. package/dist/sdk/client.js +115 -242
  69. package/dist/sdk/client.js.map +1 -1
  70. package/dist/sdk/crypto/poseidon.d.ts +4 -4
  71. package/dist/sdk/crypto/poseidon.d.ts.map +1 -1
  72. package/dist/sdk/crypto/poseidon.js +34 -17
  73. package/dist/sdk/crypto/poseidon.js.map +1 -1
  74. package/dist/sdk/integrity.d.ts +3 -3
  75. package/dist/sdk/integrity.d.ts.map +1 -1
  76. package/dist/sdk/integrity.js +2 -2
  77. package/dist/sdk/integrity.js.map +1 -1
  78. package/dist/sdk/passport/manager.d.ts +15 -3
  79. package/dist/sdk/passport/manager.d.ts.map +1 -1
  80. package/dist/sdk/passport/manager.js +30 -17
  81. package/dist/sdk/passport/manager.js.map +1 -1
  82. package/dist/sdk/pipeline.d.ts.map +1 -1
  83. package/dist/sdk/pipeline.js +69 -12
  84. package/dist/sdk/pipeline.js.map +1 -1
  85. package/dist/sdk/polyfill.d.ts +8 -0
  86. package/dist/sdk/polyfill.d.ts.map +1 -0
  87. package/dist/sdk/polyfill.js +21 -0
  88. package/dist/sdk/polyfill.js.map +1 -0
  89. package/dist/sdk/privacy/shield.d.ts +46 -0
  90. package/dist/sdk/privacy/shield.d.ts.map +1 -1
  91. package/dist/sdk/privacy/shield.js +117 -35
  92. package/dist/sdk/privacy/shield.js.map +1 -1
  93. package/dist/sdk/privacy-engine.d.ts +17 -3
  94. package/dist/sdk/privacy-engine.d.ts.map +1 -1
  95. package/dist/sdk/privacy-engine.js +46 -20
  96. package/dist/sdk/privacy-engine.js.map +1 -1
  97. package/package.json +2 -2
@@ -0,0 +1,538 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * SolVoid Secure Relayer Service
5
+ *
6
+ * This is a production-grade relayer with proper security controls:
7
+ * - Authentication with registered public keys
8
+ * - Rate limiting and DOS protection
9
+ * - Transaction validation and replay protection
10
+ * - Economic incentives with slashing conditions
11
+ * - Comprehensive logging and monitoring
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ var __importDefault = (this && this.__importDefault) || function (mod) {
47
+ return (mod && mod.__esModule) ? mod : { "default": mod };
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.SecureRelayerService = void 0;
51
+ const express_1 = __importDefault(require("express"));
52
+ const cors_1 = __importDefault(require("cors"));
53
+ const crypto = __importStar(require("crypto"));
54
+ const tweetnacl = __importStar(require("tweetnacl"));
55
+ const web3_js_1 = require("@solana/web3.js");
56
+ const key_manager_1 = require("./key-manager");
57
+ const replay_protection_1 = require("./replay-protection");
58
+ const index_1 = require("../sdk/index");
59
+ // Configuration
60
+ const PORT = parseInt(process.env.PORT || '8080');
61
+ const RPC_ENDPOINT = process.env.RPC_ENDPOINT || 'https://api.mainnet-beta.solana.com';
62
+ const NODE_ID = process.env.NODE_ID || `secure-relayer-${crypto.randomBytes(4).toString('hex')}`;
63
+ const BOUNTY_RATE_SOL = parseFloat(process.env.BOUNTY_RATE || '0.001'); // 0.001 SOL per relay
64
+ const MAX_RELAY_SIZE = parseInt(process.env.MAX_RELAY_SIZE || '1664'); // Solana transaction size limit
65
+ const RATE_LIMIT_WINDOW = 60000; // 1 minute
66
+ const RATE_LIMIT_MAX = 100; // Max requests per minute per key
67
+ class SecureRelayerService {
68
+ constructor() {
69
+ this.registeredRelayers = new Map();
70
+ this.rateLimits = new Map();
71
+ this.processedTransactions = new Set();
72
+ this.usedSignatures = new Map(); // Signature cache for replay protection
73
+ this.app = (0, express_1.default)();
74
+ this.connection = new web3_js_1.Connection(RPC_ENDPOINT, 'confirmed');
75
+ this.keyManager = new key_manager_1.KeyManager(process.env.KEY_STORAGE_TYPE || 'file');
76
+ this.replayProtection = new replay_protection_1.ReplayProtection();
77
+ this.metrics = {
78
+ total: 0,
79
+ successful: 0,
80
+ failed: 0,
81
+ totalBounty: 0,
82
+ averageLatency: 0,
83
+ lastHour: 0,
84
+ lastDay: 0,
85
+ };
86
+ this.setupMiddleware();
87
+ this.setupRoutes();
88
+ this.startCleanupTasks();
89
+ }
90
+ generatePrivateKey() {
91
+ // Use persistent key manager instead of random generation
92
+ return this.keyManager.getPrivateKey();
93
+ }
94
+ setupMiddleware() {
95
+ this.app.use((0, cors_1.default)({
96
+ origin: process.env.ALLOWED_ORIGINS?.split(',') || ['http://localhost:3000'],
97
+ credentials: true,
98
+ }));
99
+ this.app.use(express_1.default.json({
100
+ limit: '1mb',
101
+ verify: (req, res, buf) => {
102
+ try {
103
+ JSON.parse(buf.toString());
104
+ }
105
+ catch (e) {
106
+ res.status(400).json({ error: 'Invalid JSON' });
107
+ return;
108
+ }
109
+ req.rawBody = buf;
110
+ }
111
+ }));
112
+ // Request logging
113
+ this.app.use((req, res, next) => {
114
+ console.log(`${new Date().toISOString()} ${req.method} ${req.path} - ${req.ip}`);
115
+ next();
116
+ });
117
+ }
118
+ setupRoutes() {
119
+ // Health check
120
+ this.app.get('/health', this.healthCheck.bind(this));
121
+ // Register new relayer
122
+ this.app.post('/register', this.registerRelayer.bind(this));
123
+ // Authenticated relay endpoint
124
+ this.app.post('/relay', this.authenticate.bind(this), this.relayTransaction.bind(this));
125
+ // Get relayer status
126
+ this.app.get('/status/:publicKey', this.getRelayerStatus.bind(this));
127
+ // Get network status
128
+ this.app.get('/network', this.getNetworkStatus.bind(this));
129
+ // Admin endpoints
130
+ this.app.get('/admin/metrics', this.authenticate.bind(this), this.getMetrics.bind(this));
131
+ this.app.post('/admin/slash', this.authenticate.bind(this), this.slashRelayer.bind(this));
132
+ // Error handler
133
+ this.app.use(this.errorHandler.bind(this));
134
+ }
135
+ async healthCheck(req, res) {
136
+ const latency = await this.measureLatency();
137
+ res.json({
138
+ status: 'healthy',
139
+ nodeId: NODE_ID,
140
+ timestamp: new Date().toISOString(),
141
+ metrics: this.metrics,
142
+ latency,
143
+ registeredRelayers: this.registeredRelayers.size,
144
+ uptime: process.uptime(),
145
+ });
146
+ }
147
+ // FIXED: Add missing getNetworkStatus method
148
+ async getNetworkStatus(req, res) {
149
+ try {
150
+ const slot = await this.connection.getSlot();
151
+ const blockHeight = await this.connection.getBlockHeight();
152
+ res.json({
153
+ status: 'connected',
154
+ slot,
155
+ blockHeight,
156
+ cluster: this.connection.rpcEndpoint,
157
+ timestamp: new Date().toISOString(),
158
+ });
159
+ }
160
+ catch (error) {
161
+ res.status(500).json({
162
+ status: 'error',
163
+ error: error instanceof Error ? error.message : 'Unknown error',
164
+ timestamp: new Date().toISOString(),
165
+ });
166
+ }
167
+ }
168
+ async registerRelayer(req, res) {
169
+ try {
170
+ const { publicKey, endpoint, signature } = req.body;
171
+ if (!publicKey || !signature) {
172
+ return res.status(400).json({ error: 'Missing publicKey or signature' });
173
+ }
174
+ // Verify signature (simplified - implement proper verification)
175
+ const message = `register:${publicKey}:${Date.now()}`;
176
+ const isValidSignature = this.verifySignature(message, signature, publicKey);
177
+ if (!isValidSignature) {
178
+ return res.status(401).json({ error: 'Invalid signature' });
179
+ }
180
+ const relayer = {
181
+ publicKey,
182
+ endpoint,
183
+ reputation: 100, // Start with perfect reputation
184
+ lastSeen: Date.now(),
185
+ totalRelays: 0,
186
+ successRate: 1.0,
187
+ slashedAmount: 0,
188
+ registeredAt: Date.now(),
189
+ };
190
+ this.registeredRelayers.set(publicKey, relayer);
191
+ console.log(` Registered relayer: ${publicKey.slice(0, 8)}...`);
192
+ res.json({
193
+ success: true,
194
+ nodeId: NODE_ID,
195
+ registeredAt: relayer.registeredAt,
196
+ });
197
+ }
198
+ catch (error) {
199
+ console.error('Registration error:', error);
200
+ res.status(500).json({ error: 'Registration failed' });
201
+ }
202
+ }
203
+ authenticate(req, res, next) {
204
+ const { timestamp } = req.headers;
205
+ if (!timestamp) {
206
+ return res.status(401).json({ error: 'Missing timestamp header' });
207
+ }
208
+ // Extract signature from request header
209
+ const signatureHeader = req.headers['x-signature'];
210
+ if (!signatureHeader) {
211
+ return res.status(401).json({ error: 'Missing signature header' });
212
+ }
213
+ // Extract public key from header
214
+ const publicKeyHeader = req.headers['x-public-key'];
215
+ if (!publicKeyHeader) {
216
+ return res.status(401).json({ error: 'Missing public key header' });
217
+ }
218
+ // Check timestamp (prevent replay attacks) - 5 minute window
219
+ const now = Date.now();
220
+ const requestTime = parseInt(timestamp);
221
+ if (Math.abs(now - requestTime) > 300000) { // 5 minute window
222
+ return res.status(401).json({ error: 'Request expired' });
223
+ }
224
+ // Check for replay attack using signature cache
225
+ const signatureHash = crypto.createHash('sha256').update(signatureHeader).digest('hex');
226
+ if (this.usedSignatures.has(signatureHash)) {
227
+ return res.status(401).json({ error: 'Replay attack detected' });
228
+ }
229
+ // Reconstruct message to sign: method + url + timestamp + body_hash
230
+ const bodyHash = req.body ? crypto.createHash('sha256').update(JSON.stringify(req.body)).digest('hex') : '';
231
+ const message = `${req.method}:${req.path}:${timestamp}:${bodyHash}`;
232
+ // Verify Ed25519 signature
233
+ const isValidSignature = this.verifySignature(message, signatureHeader, publicKeyHeader);
234
+ if (!isValidSignature) {
235
+ return res.status(401).json({ error: 'Invalid signature' });
236
+ }
237
+ // Add signature to replay protection cache (10 minutes)
238
+ this.usedSignatures.set(signatureHash, now);
239
+ // Clean up old signatures (remove those older than 10 minutes)
240
+ this.cleanupSignatures();
241
+ // Rate limiting
242
+ if (!this.checkRateLimit(publicKeyHeader)) {
243
+ return res.status(429).json({ error: 'Rate limit exceeded' });
244
+ }
245
+ req.authenticatedPublicKey = publicKeyHeader;
246
+ next();
247
+ }
248
+ async relayTransaction(req, res) {
249
+ const startTime = Date.now();
250
+ try {
251
+ // Enforce request schema
252
+ const enforcedRequest = (0, index_1.enforce)(index_1.RelayRequestSchema, req.body, {
253
+ origin: index_1.DataOrigin.API_PAYLOAD,
254
+ trust: index_1.DataTrust.UNTRUSTED,
255
+ units: index_1.Unit.SOL,
256
+ createdAt: Date.now(),
257
+ owner: NODE_ID,
258
+ });
259
+ // Extract transaction data for replay protection
260
+ const txData = {
261
+ publicKey: req.authenticatedPublicKey || '',
262
+ nonce: req.body.nonce || 0,
263
+ timestamp: req.body.timestamp || Date.now(),
264
+ txHash: req.body.transactionHash || '',
265
+ signature: req.body.signature || '',
266
+ instructions: req.body.instructions || []
267
+ };
268
+ // Multi-layered replay protection
269
+ const replayValidation = this.replayProtection.validateTransaction(txData);
270
+ if (!replayValidation.isValid) {
271
+ return res.status(400).json({
272
+ error: 'Replay protection failed',
273
+ details: replayValidation.error
274
+ });
275
+ }
276
+ // Check if transaction already processed
277
+ const txHash = crypto.createHash('sha256').update(JSON.stringify(enforcedRequest)).digest('hex');
278
+ if (this.processedTransactions.has(txHash)) {
279
+ return res.status(400).json({ error: 'Transaction already processed' });
280
+ }
281
+ // Deserialize and validate transaction
282
+ const transaction = web3_js_1.VersionedTransaction.deserialize(Buffer.from(req.body.transaction, 'base64'));
283
+ // Get recent blockhash for transaction
284
+ const { blockhash, lastValidBlockHeight } = await this.connection.getLatestBlockhash();
285
+ transaction.message.recentBlockhash = blockhash;
286
+ // Simulate transaction
287
+ const simulation = await this.connection.simulateTransaction(transaction);
288
+ if (simulation.value.err) {
289
+ return res.status(400).json({
290
+ error: 'Transaction simulation failed',
291
+ details: simulation.value.err
292
+ });
293
+ }
294
+ // Broadcast transaction
295
+ const signature = await this.connection.sendRawTransaction(transaction.serialize(), {
296
+ skipPreflight: false,
297
+ preflightCommitment: 'confirmed',
298
+ });
299
+ // Mark as processed
300
+ this.processedTransactions.add(txHash);
301
+ // Update metrics
302
+ const endTime = Date.now();
303
+ this.metrics.total++;
304
+ this.metrics.successful++;
305
+ this.metrics.averageLatency = (this.metrics.averageLatency + (endTime - startTime)) / 2;
306
+ // Return success response
307
+ const response = {
308
+ success: true,
309
+ hopCount: 1,
310
+ relayPath: [NODE_ID],
311
+ };
312
+ res.json(response);
313
+ }
314
+ catch (error) {
315
+ const endTime = Date.now();
316
+ this.metrics.total++;
317
+ this.metrics.failed++;
318
+ this.metrics.averageLatency = (this.metrics.averageLatency + (endTime - startTime)) / 2;
319
+ console.error('Relay error:', error);
320
+ res.status(500).json({
321
+ success: false,
322
+ error: error instanceof Error ? error.message : 'Broadcast failed',
323
+ hopCount: 1,
324
+ relayPath: [NODE_ID],
325
+ });
326
+ }
327
+ }
328
+ async validateTransaction(req) {
329
+ try {
330
+ if (!req.transaction) {
331
+ return { valid: false, error: 'Missing transaction' };
332
+ }
333
+ // Size validation
334
+ if (req.transaction.length > MAX_RELAY_SIZE) {
335
+ return { valid: false, error: 'Transaction too large' };
336
+ }
337
+ // Deserialize and validate transaction
338
+ const txBuffer = Buffer.from(req.transaction, 'base64');
339
+ const tx = web3_js_1.VersionedTransaction.deserialize(txBuffer);
340
+ // Basic transaction validation
341
+ if (tx.signatures.length === 0) {
342
+ return { valid: false, error: 'Transaction not signed' };
343
+ }
344
+ // Fee validation (minimum fee check)
345
+ const message = tx.message;
346
+ if (message.recentBlockhash === '11111111111111111111111111111111') {
347
+ return { valid: false, error: 'Invalid blockhash' };
348
+ }
349
+ return { valid: true };
350
+ }
351
+ catch (error) {
352
+ return { valid: false, error: 'Invalid transaction format' };
353
+ }
354
+ }
355
+ async broadcastTransaction(transaction) {
356
+ try {
357
+ const txBuffer = Buffer.from(transaction, 'base64');
358
+ const tx = web3_js_1.VersionedTransaction.deserialize(txBuffer);
359
+ // Add jitter for privacy
360
+ const jitterMs = Math.floor(Math.random() * 200) + 50;
361
+ await new Promise(resolve => setTimeout(resolve, jitterMs));
362
+ const txid = await this.connection.sendRawTransaction(txBuffer, {
363
+ skipPreflight: false, // Enable preflight for validation
364
+ maxRetries: 3,
365
+ preflightCommitment: 'confirmed',
366
+ });
367
+ return {
368
+ success: true,
369
+ txid,
370
+ hopCount: 1,
371
+ relayPath: [NODE_ID],
372
+ };
373
+ }
374
+ catch (error) {
375
+ return {
376
+ success: false,
377
+ error: error instanceof Error ? error.message : 'Broadcast failed',
378
+ hopCount: 1,
379
+ relayPath: [NODE_ID],
380
+ };
381
+ }
382
+ }
383
+ verifySignature(message, signature, publicKey) {
384
+ // Ed25519 signature verification with timing attack resistance
385
+ try {
386
+ // Convert hex/base64 signature to Buffer
387
+ const signatureBuffer = Buffer.from(signature, 'hex');
388
+ // Convert public key string to Buffer
389
+ const publicKeyBuffer = Buffer.from(publicKey, 'hex');
390
+ // Convert message to Buffer
391
+ const messageBuffer = Buffer.from(message, 'utf8');
392
+ // Verify Ed25519 signature
393
+ return tweetnacl.sign.detached.verify(messageBuffer, signatureBuffer, publicKeyBuffer);
394
+ }
395
+ catch (error) {
396
+ console.error('Signature verification failed:', error);
397
+ return false;
398
+ }
399
+ }
400
+ cleanupSignatures() {
401
+ const now = Date.now();
402
+ const cutoffTime = now - (10 * 60 * 1000); // 10 minutes ago
403
+ for (const [hash, timestamp] of this.usedSignatures.entries()) {
404
+ if (timestamp < cutoffTime) {
405
+ this.usedSignatures.delete(hash);
406
+ }
407
+ }
408
+ }
409
+ checkRateLimit(publicKey) {
410
+ const now = Date.now();
411
+ const entry = this.rateLimits.get(publicKey);
412
+ if (!entry || now > entry.resetTime) {
413
+ this.rateLimits.set(publicKey, {
414
+ count: 1,
415
+ resetTime: now + RATE_LIMIT_WINDOW,
416
+ });
417
+ return true;
418
+ }
419
+ if (entry.count >= RATE_LIMIT_MAX) {
420
+ return false;
421
+ }
422
+ entry.count++;
423
+ return true;
424
+ }
425
+ async measureLatency() {
426
+ const start = Date.now();
427
+ try {
428
+ await this.connection.getLatestBlockhash();
429
+ return Date.now() - start;
430
+ }
431
+ catch {
432
+ return -1;
433
+ }
434
+ }
435
+ updateMetrics(success, latency) {
436
+ this.metrics.total++;
437
+ if (success) {
438
+ this.metrics.successful++;
439
+ this.metrics.totalBounty += BOUNTY_RATE_SOL;
440
+ }
441
+ else {
442
+ this.metrics.failed++;
443
+ }
444
+ // Update average latency
445
+ this.metrics.averageLatency = (this.metrics.averageLatency * 0.9) + (latency * 0.1);
446
+ // Update time-based metrics
447
+ const now = Date.now();
448
+ this.metrics.lastHour++;
449
+ this.metrics.lastDay++;
450
+ }
451
+ async getRelayerStatus(req, res) {
452
+ const { publicKey } = req.params;
453
+ const relayerKey = Array.isArray(publicKey) ? publicKey[0] : publicKey;
454
+ const relayer = this.registeredRelayers.get(relayerKey);
455
+ if (!relayer) {
456
+ return res.status(404).json({ error: 'Relayer not found' });
457
+ }
458
+ res.json({
459
+ publicKey: relayer.publicKey,
460
+ reputation: relayer.reputation,
461
+ totalRelays: relayer.totalRelays,
462
+ successRate: relayer.successRate,
463
+ slashedAmount: relayer.slashedAmount,
464
+ lastSeen: relayer.lastSeen,
465
+ registeredAt: relayer.registeredAt,
466
+ });
467
+ }
468
+ async getMetrics(req, res) {
469
+ res.json({
470
+ ...this.metrics,
471
+ registeredRelayers: this.registeredRelayers.size,
472
+ activeConnections: this.rateLimits.size,
473
+ processedTransactions: this.processedTransactions.size,
474
+ });
475
+ }
476
+ async slashRelayer(req, res) {
477
+ const { publicKey, amount, reason } = req.body;
478
+ if (!publicKey || !amount || !reason) {
479
+ return res.status(400).json({ error: 'Missing required fields' });
480
+ }
481
+ const relayer = this.registeredRelayers.get(publicKey);
482
+ if (!relayer) {
483
+ return res.status(404).json({ error: 'Relayer not found' });
484
+ }
485
+ relayer.reputation = Math.max(0, relayer.reputation - amount);
486
+ relayer.slashedAmount += amount;
487
+ console.log(` Slashed relayer ${publicKey.slice(0, 8)}...: ${amount} - ${reason}`);
488
+ res.json({
489
+ success: true,
490
+ newReputation: relayer.reputation,
491
+ totalSlashed: relayer.slashedAmount,
492
+ });
493
+ }
494
+ errorHandler(err, req, res, next) {
495
+ console.error('Unhandled error:', err);
496
+ res.status(500).json({ error: 'Internal server error' });
497
+ }
498
+ startCleanupTasks() {
499
+ // Clean up old rate limit entries
500
+ setInterval(() => {
501
+ const now = Date.now();
502
+ for (const [key, entry] of this.rateLimits.entries()) {
503
+ if (now > entry.resetTime) {
504
+ this.rateLimits.delete(key);
505
+ }
506
+ }
507
+ }, 60000); // Every minute
508
+ // Clean up old processed transactions
509
+ setInterval(() => {
510
+ if (this.processedTransactions.size > 10000) {
511
+ // Keep only recent transactions
512
+ const entries = Array.from(this.processedTransactions);
513
+ this.processedTransactions.clear();
514
+ entries.slice(-5000).forEach(tx => this.processedTransactions.add(tx));
515
+ }
516
+ }, 300000); // Every 5 minutes
517
+ // Reset time-based metrics
518
+ setInterval(() => {
519
+ this.metrics.lastHour = 0;
520
+ }, 3600000); // Every hour
521
+ setInterval(() => {
522
+ this.metrics.lastDay = 0;
523
+ }, 86400000); // Every day
524
+ }
525
+ start() {
526
+ this.app.listen(PORT, () => {
527
+ console.log(` SolVoid Secure Relayer Ready on ${PORT}`);
528
+ console.log(` Node ID: ${NODE_ID}`);
529
+ console.log(` Bounty Rate: ${BOUNTY_RATE_SOL} SOL per relay`);
530
+ console.log(` Rate Limit: ${RATE_LIMIT_MAX} requests per minute`);
531
+ });
532
+ }
533
+ }
534
+ exports.SecureRelayerService = SecureRelayerService;
535
+ // Start the secure relayer service
536
+ const relayer = new SecureRelayerService();
537
+ relayer.start();
538
+ //# sourceMappingURL=secure-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-service.js","sourceRoot":"","sources":["../../relayer/secure-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/node
2
+ /**
3
+ * SolVoid Shadow Relayer Service: Multi-hop transaction orchestration node.
4
+ * Implements onion-routing for transaction obfuscation and gasless submission.
5
+ */
6
+ interface RelayerNode {
7
+ readonly id: string;
8
+ readonly endpoint: string;
9
+ readonly publicKey: string;
10
+ lastSeen: number;
11
+ successRate: number;
12
+ readonly region: string;
13
+ }
14
+ /** Registry for decentralized peer topology. */
15
+ declare const peerRegistry: Map<string, RelayerNode>;
16
+ /** Service telemetry and performance metrics. */
17
+ declare const metrics: {
18
+ relayed: number;
19
+ failed: number;
20
+ totalBountySOL: number;
21
+ uptime: number;
22
+ };
23
+ declare const app: import("express-serve-static-core").Express;
24
+ export { app, peerRegistry, metrics };
25
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../relayer/service.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAsCH,UAAU,WAAW;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED,gDAAgD;AAChD,QAAA,MAAM,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAa,CAAC;AAEzD,iDAAiD;AACjD,QAAA,MAAM,OAAO;;;;;CAKZ,CAAC;AAEF,QAAA,MAAM,GAAG,6CAAY,CAAC;AAwYtB,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC"}