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.
- package/README.md +116 -258
- package/SECURITY.md +27 -24
- package/dist/cli/commands/ghost.d.ts +3 -3
- package/dist/cli/commands/ghost.d.ts.map +1 -1
- package/dist/cli/commands/ghost.js +67 -91
- package/dist/cli/commands/ghost.js.map +1 -1
- package/dist/cli/commands/rescue.d.ts +4 -0
- package/dist/cli/commands/rescue.d.ts.map +1 -1
- package/dist/cli/commands/rescue.js +102 -199
- package/dist/cli/commands/rescue.js.map +1 -1
- package/dist/cli/demo-scan.js +48 -130
- package/dist/cli/demo-scan.js.map +1 -1
- package/dist/cli/solvoid-scan.d.ts +4 -3
- package/dist/cli/solvoid-scan.d.ts.map +1 -1
- package/dist/cli/solvoid-scan.js +55 -46
- package/dist/cli/solvoid-scan.js.map +1 -1
- package/dist/cli/utils/asset-scanner.d.ts.map +1 -1
- package/dist/cli/utils/asset-scanner.js +7 -5
- package/dist/cli/utils/asset-scanner.js.map +1 -1
- package/dist/cli/utils/badge-generator.d.ts.map +1 -1
- package/dist/cli/utils/badge-generator.js +11 -9
- package/dist/cli/utils/badge-generator.js.map +1 -1
- 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.map +1 -1
- package/dist/cli/utils/env-validator.js +6 -3
- package/dist/cli/utils/env-validator.js.map +1 -1
- 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 +0 -4
- package/dist/cli/utils/rescue-engine.d.ts.map +1 -1
- package/dist/cli/utils/rescue-engine.js +28 -46
- package/dist/cli/utils/rescue-engine.js.map +1 -1
- 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/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/sdk/client.d.ts +42 -8
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/client.js +115 -242
- package/dist/sdk/client.js.map +1 -1
- package/dist/sdk/crypto/poseidon.d.ts +4 -4
- package/dist/sdk/crypto/poseidon.d.ts.map +1 -1
- package/dist/sdk/crypto/poseidon.js +34 -17
- package/dist/sdk/crypto/poseidon.js.map +1 -1
- package/dist/sdk/integrity.d.ts +3 -3
- package/dist/sdk/integrity.d.ts.map +1 -1
- package/dist/sdk/integrity.js +2 -2
- package/dist/sdk/integrity.js.map +1 -1
- package/dist/sdk/passport/manager.d.ts +15 -3
- package/dist/sdk/passport/manager.d.ts.map +1 -1
- package/dist/sdk/passport/manager.js +30 -17
- package/dist/sdk/passport/manager.js.map +1 -1
- package/dist/sdk/pipeline.d.ts.map +1 -1
- package/dist/sdk/pipeline.js +69 -12
- package/dist/sdk/pipeline.js.map +1 -1
- 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/shield.d.ts +46 -0
- package/dist/sdk/privacy/shield.d.ts.map +1 -1
- package/dist/sdk/privacy/shield.js +117 -35
- package/dist/sdk/privacy/shield.js.map +1 -1
- package/dist/sdk/privacy-engine.d.ts +17 -3
- package/dist/sdk/privacy-engine.d.ts.map +1 -1
- package/dist/sdk/privacy-engine.js +46 -20
- package/dist/sdk/privacy-engine.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReplayProtection = void 0;
|
|
4
|
+
class ReplayProtection {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.nonceCache = new Map(); // publicKey -> current nonce
|
|
7
|
+
this.replayCache = new Map(); // (publicKey:nonce:txHash) -> entry
|
|
8
|
+
this.expirationWindow = 10 * 60 * 1000; // 10 minutes in milliseconds
|
|
9
|
+
this.cleanupInterval = null;
|
|
10
|
+
this.startCleanupTask();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Initialize nonce for a user (called during registration)
|
|
14
|
+
*/
|
|
15
|
+
initializeNonce(publicKey) {
|
|
16
|
+
const nonce = 1;
|
|
17
|
+
this.nonceCache.set(publicKey, nonce);
|
|
18
|
+
console.log(`Initialized nonce ${nonce} for user ${publicKey}`);
|
|
19
|
+
return nonce;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get current nonce for a user
|
|
23
|
+
*/
|
|
24
|
+
getCurrentNonce(publicKey) {
|
|
25
|
+
return this.nonceCache.get(publicKey) || 0;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate and increment nonce for transaction
|
|
29
|
+
*/
|
|
30
|
+
validateAndIncrementNonce(publicKey, expectedNonce) {
|
|
31
|
+
const currentNonce = this.nonceCache.get(publicKey) || 0;
|
|
32
|
+
if (expectedNonce !== currentNonce + 1) {
|
|
33
|
+
console.log(`Invalid nonce for user ${publicKey}: expected ${currentNonce + 1}, got ${expectedNonce}`);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
this.nonceCache.set(publicKey, expectedNonce);
|
|
37
|
+
console.log(`Incremented nonce to ${expectedNonce} for user ${publicKey}`);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if transaction is expired
|
|
42
|
+
*/
|
|
43
|
+
isTransactionExpired(timestamp) {
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
const age = now - timestamp;
|
|
46
|
+
return age > this.expirationWindow;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create cache key for replay protection
|
|
50
|
+
*/
|
|
51
|
+
createCacheKey(publicKey, nonce, txHash) {
|
|
52
|
+
return `${publicKey}:${nonce}:${txHash}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if transaction is in replay cache
|
|
56
|
+
*/
|
|
57
|
+
isTransactionReplayed(publicKey, nonce, txHash) {
|
|
58
|
+
const cacheKey = this.createCacheKey(publicKey, nonce, txHash);
|
|
59
|
+
const entry = this.replayCache.get(cacheKey);
|
|
60
|
+
if (!entry) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// Check if transaction is expired
|
|
64
|
+
if (this.isTransactionExpired(entry.timestamp)) {
|
|
65
|
+
this.replayCache.delete(cacheKey);
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Add transaction to replay cache
|
|
72
|
+
*/
|
|
73
|
+
addTransactionToCache(publicKey, nonce, txHash) {
|
|
74
|
+
const cacheKey = this.createCacheKey(publicKey, nonce, txHash);
|
|
75
|
+
const entry = {
|
|
76
|
+
publicKey,
|
|
77
|
+
nonce,
|
|
78
|
+
txHash,
|
|
79
|
+
timestamp: Date.now()
|
|
80
|
+
};
|
|
81
|
+
this.replayCache.set(cacheKey, entry);
|
|
82
|
+
console.log(`Added transaction to replay cache: ${cacheKey}`);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate complete transaction data
|
|
86
|
+
*/
|
|
87
|
+
validateTransaction(txData) {
|
|
88
|
+
// Check timestamp expiration
|
|
89
|
+
if (this.isTransactionExpired(txData.timestamp)) {
|
|
90
|
+
return {
|
|
91
|
+
isValid: false,
|
|
92
|
+
error: 'Transaction has expired'
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Check nonce sequence
|
|
96
|
+
if (!this.validateAndIncrementNonce(txData.publicKey, txData.nonce)) {
|
|
97
|
+
return {
|
|
98
|
+
isValid: false,
|
|
99
|
+
error: `Invalid nonce sequence. Expected ${this.getCurrentNonce(txData.publicKey) + 1}, got ${txData.nonce}`
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Check replay cache
|
|
103
|
+
if (this.isTransactionReplayed(txData.publicKey, txData.nonce, txData.txHash)) {
|
|
104
|
+
return {
|
|
105
|
+
isValid: false,
|
|
106
|
+
error: 'Transaction has already been processed'
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Add to replay cache
|
|
110
|
+
this.addTransactionToCache(txData.publicKey, txData.nonce, txData.txHash);
|
|
111
|
+
return {
|
|
112
|
+
isValid: true,
|
|
113
|
+
error: ''
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get nonce statistics for a user
|
|
118
|
+
*/
|
|
119
|
+
getNonceStats(publicKey) {
|
|
120
|
+
const currentNonce = this.getCurrentNonce(publicKey);
|
|
121
|
+
let totalTransactions = 0;
|
|
122
|
+
// Count transactions in cache for this user
|
|
123
|
+
for (const [key, entry] of this.replayCache.entries()) {
|
|
124
|
+
if (key.startsWith(`${publicKey}:`)) {
|
|
125
|
+
totalTransactions++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
currentNonce,
|
|
130
|
+
totalTransactions
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Clean up old entries from replay cache
|
|
135
|
+
*/
|
|
136
|
+
cleanupExpiredEntries() {
|
|
137
|
+
const now = Date.now();
|
|
138
|
+
const expiredKeys = [];
|
|
139
|
+
for (const [key, entry] of this.replayCache.entries()) {
|
|
140
|
+
if (this.isTransactionExpired(entry.timestamp)) {
|
|
141
|
+
expiredKeys.push(key);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
for (const key of expiredKeys) {
|
|
145
|
+
this.replayCache.delete(key);
|
|
146
|
+
}
|
|
147
|
+
if (expiredKeys.length > 0) {
|
|
148
|
+
console.log(`Cleaned up ${expiredKeys.length} expired replay cache entries`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Start cleanup task
|
|
153
|
+
*/
|
|
154
|
+
startCleanupTask() {
|
|
155
|
+
// Run cleanup every 5 minutes
|
|
156
|
+
this.cleanupInterval = setInterval(() => {
|
|
157
|
+
this.cleanupExpiredEntries();
|
|
158
|
+
}, 5 * 60 * 1000);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Stop cleanup task
|
|
162
|
+
*/
|
|
163
|
+
stopCleanupTask() {
|
|
164
|
+
if (this.cleanupInterval) {
|
|
165
|
+
clearInterval(this.cleanupInterval);
|
|
166
|
+
this.cleanupInterval = null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get cache statistics
|
|
171
|
+
*/
|
|
172
|
+
getCacheStats() {
|
|
173
|
+
return {
|
|
174
|
+
totalEntries: this.replayCache.size,
|
|
175
|
+
nonceCacheSize: this.nonceCache.size,
|
|
176
|
+
expirationWindow: this.expirationWindow
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Clear all cache data (for testing)
|
|
181
|
+
*/
|
|
182
|
+
clearCache() {
|
|
183
|
+
this.nonceCache.clear();
|
|
184
|
+
this.replayCache.clear();
|
|
185
|
+
console.log('Cleared all replay protection cache data');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.ReplayProtection = ReplayProtection;
|
|
189
|
+
//# sourceMappingURL=replay-protection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-protection.js","sourceRoot":"","sources":["../../relayer/replay-protection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SolVoid Secure Relayer Service
|
|
4
|
+
*
|
|
5
|
+
* This is a production-grade relayer with proper security controls:
|
|
6
|
+
* - Authentication with registered public keys
|
|
7
|
+
* - Rate limiting and DOS protection
|
|
8
|
+
* - Transaction validation and replay protection
|
|
9
|
+
* - Economic incentives with slashing conditions
|
|
10
|
+
* - Comprehensive logging and monitoring
|
|
11
|
+
*/
|
|
12
|
+
declare class SecureRelayerService {
|
|
13
|
+
private app;
|
|
14
|
+
private connection;
|
|
15
|
+
private registeredRelayers;
|
|
16
|
+
private rateLimits;
|
|
17
|
+
private processedTransactions;
|
|
18
|
+
private metrics;
|
|
19
|
+
private keyManager;
|
|
20
|
+
private replayProtection;
|
|
21
|
+
private usedSignatures;
|
|
22
|
+
constructor();
|
|
23
|
+
private generatePrivateKey;
|
|
24
|
+
private setupMiddleware;
|
|
25
|
+
private setupRoutes;
|
|
26
|
+
private healthCheck;
|
|
27
|
+
private getNetworkStatus;
|
|
28
|
+
private registerRelayer;
|
|
29
|
+
private authenticate;
|
|
30
|
+
private relayTransaction;
|
|
31
|
+
private validateTransaction;
|
|
32
|
+
private broadcastTransaction;
|
|
33
|
+
private verifySignature;
|
|
34
|
+
private cleanupSignatures;
|
|
35
|
+
private checkRateLimit;
|
|
36
|
+
private measureLatency;
|
|
37
|
+
private updateMetrics;
|
|
38
|
+
private getRelayerStatus;
|
|
39
|
+
private getMetrics;
|
|
40
|
+
private slashRelayer;
|
|
41
|
+
private errorHandler;
|
|
42
|
+
private startCleanupTasks;
|
|
43
|
+
start(): void;
|
|
44
|
+
}
|
|
45
|
+
export { SecureRelayerService };
|
|
46
|
+
//# sourceMappingURL=secure-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-service.d.ts","sourceRoot":"","sources":["../../relayer/secure-service.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AAiEH,cAAM,oBAAoB;IACtB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAkC;;IAsBxD,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,WAAW;YAwBL,WAAW;YAeX,gBAAgB;YAqBhB,eAAe;IA2C7B,OAAO,CAAC,YAAY;YA0DN,gBAAgB;YA8FhB,mBAAmB;YAiCnB,oBAAoB;IAgClC,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,cAAc;YAoBR,cAAc;IAU5B,OAAO,CAAC,aAAa;YAkBP,gBAAgB;YAoBhB,UAAU;YASV,YAAY;IAwB1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,iBAAiB;IA+BlB,KAAK;CAQf;AAMD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|