solvoid 1.0.0 → 1.1.1

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 (224) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/dist/client.d.ts +73 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +281 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/crypto/poseidon.d.ts +124 -0
  7. package/dist/crypto/poseidon.d.ts.map +1 -0
  8. package/dist/crypto/poseidon.js +293 -0
  9. package/dist/crypto/poseidon.js.map +1 -0
  10. package/dist/events/bus.d.ts +44 -0
  11. package/dist/events/bus.d.ts.map +1 -0
  12. package/dist/events/bus.js +83 -0
  13. package/dist/events/bus.js.map +1 -0
  14. package/dist/{sdk/index.d.ts → index.d.ts} +2 -3
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/{sdk/index.js → index.js} +21 -11
  17. package/dist/index.js.map +1 -0
  18. package/dist/integrity.d.ts +371 -0
  19. package/dist/integrity.d.ts.map +1 -0
  20. package/dist/integrity.js +260 -0
  21. package/dist/integrity.js.map +1 -0
  22. package/dist/network/shadow-rpc.d.ts +36 -0
  23. package/dist/network/shadow-rpc.d.ts.map +1 -0
  24. package/dist/network/shadow-rpc.js +163 -0
  25. package/dist/network/shadow-rpc.js.map +1 -0
  26. package/dist/{sdk/passport → passport}/manager.d.ts +9 -18
  27. package/dist/passport/manager.d.ts.map +1 -0
  28. package/dist/passport/manager.js +148 -0
  29. package/dist/passport/manager.js.map +1 -0
  30. package/dist/pipeline.d.ts +25 -0
  31. package/dist/pipeline.d.ts.map +1 -0
  32. package/dist/pipeline.js +127 -0
  33. package/dist/pipeline.js.map +1 -0
  34. package/dist/privacy/relayer.d.ts.map +1 -0
  35. package/dist/privacy/relayer.js.map +1 -0
  36. package/dist/privacy/shield.d.ts +27 -0
  37. package/dist/privacy/shield.d.ts.map +1 -0
  38. package/dist/privacy/shield.js +289 -0
  39. package/dist/privacy/shield.js.map +1 -0
  40. package/dist/{sdk/privacy-engine.d.ts → privacy-engine.d.ts} +2 -1
  41. package/dist/privacy-engine.d.ts.map +1 -0
  42. package/dist/{sdk/privacy-engine.js → privacy-engine.js} +24 -15
  43. package/dist/privacy-engine.js.map +1 -0
  44. package/dist/registry/idl-fetcher.d.ts +10 -0
  45. package/dist/registry/idl-fetcher.d.ts.map +1 -0
  46. package/dist/{sdk/registry → registry}/idl-fetcher.js +19 -16
  47. package/dist/registry/idl-fetcher.js.map +1 -0
  48. package/dist/registry/programs.d.ts.map +1 -0
  49. package/dist/registry/programs.js.map +1 -0
  50. package/dist/rescue/analyzer.d.ts +20 -0
  51. package/dist/rescue/analyzer.d.ts.map +1 -0
  52. package/dist/rescue/analyzer.js +137 -0
  53. package/dist/rescue/analyzer.js.map +1 -0
  54. package/dist/rescue/builder.d.ts +23 -0
  55. package/dist/rescue/builder.d.ts.map +1 -0
  56. package/dist/rescue/builder.js +164 -0
  57. package/dist/rescue/builder.js.map +1 -0
  58. package/dist/security/key-rotation.d.ts +153 -0
  59. package/dist/security/key-rotation.d.ts.map +1 -0
  60. package/dist/security/key-rotation.js +354 -0
  61. package/dist/security/key-rotation.js.map +1 -0
  62. package/dist/{sdk/semantics → semantics}/analyzer.d.ts.map +1 -1
  63. package/dist/{sdk/semantics → semantics}/analyzer.js.map +1 -1
  64. package/dist/semantics/decoder.d.ts.map +1 -0
  65. package/dist/semantics/decoder.js.map +1 -0
  66. package/dist/{sdk/semantics → semantics}/graph.d.ts.map +1 -1
  67. package/dist/{sdk/semantics → semantics}/graph.js.map +1 -1
  68. package/dist/semantics/idl-registry.d.ts +8 -0
  69. package/dist/semantics/idl-registry.d.ts.map +1 -0
  70. package/dist/{sdk/semantics → semantics}/idl-registry.js +23 -7
  71. package/dist/semantics/idl-registry.js.map +1 -0
  72. package/dist/semantics/types.d.ts +10 -0
  73. package/dist/semantics/types.d.ts.map +1 -0
  74. package/dist/{sdk → semantics}/types.js.map +1 -1
  75. package/dist/types.d.ts +23 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/utils/address.d.ts +10 -0
  79. package/dist/utils/address.d.ts.map +1 -0
  80. package/dist/utils/address.js +45 -0
  81. package/dist/utils/address.js.map +1 -0
  82. package/dist/utils/config.d.ts.map +1 -0
  83. package/dist/utils/config.js.map +1 -0
  84. package/dist/utils/logger.d.ts.map +1 -0
  85. package/dist/utils/logger.js.map +1 -0
  86. package/package.json +39 -76
  87. package/LICENSE +0 -21
  88. package/README.md +0 -123
  89. package/SECURITY.md +0 -174
  90. package/bin/solvoid-scan +0 -2
  91. package/dist/cli/privacy-scan.d.ts +0 -11
  92. package/dist/cli/privacy-scan.d.ts.map +0 -1
  93. package/dist/cli/privacy-scan.js +0 -112
  94. package/dist/cli/privacy-scan.js.map +0 -1
  95. package/dist/cli/solvoid-scan.d.ts +0 -13
  96. package/dist/cli/solvoid-scan.d.ts.map +0 -1
  97. package/dist/cli/solvoid-scan.js +0 -174
  98. package/dist/cli/solvoid-scan.js.map +0 -1
  99. package/dist/cli/test-forensics.d.ts +0 -2
  100. package/dist/cli/test-forensics.d.ts.map +0 -1
  101. package/dist/cli/test-forensics.js +0 -90
  102. package/dist/cli/test-forensics.js.map +0 -1
  103. package/dist/cli/test-scenarios.d.ts +0 -2
  104. package/dist/cli/test-scenarios.d.ts.map +0 -1
  105. package/dist/cli/test-scenarios.js +0 -96
  106. package/dist/cli/test-scenarios.js.map +0 -1
  107. package/dist/examples/enterprise-demo.js +0 -65
  108. package/dist/sdk/client.d.ts +0 -77
  109. package/dist/sdk/client.d.ts.map +0 -1
  110. package/dist/sdk/client.js +0 -180
  111. package/dist/sdk/client.js.map +0 -1
  112. package/dist/sdk/compliance/identity.d.ts +0 -34
  113. package/dist/sdk/compliance/identity.d.ts.map +0 -1
  114. package/dist/sdk/compliance/identity.js +0 -55
  115. package/dist/sdk/compliance/identity.js.map +0 -1
  116. package/dist/sdk/compliance/threat-model.d.ts +0 -14
  117. package/dist/sdk/compliance/threat-model.d.ts.map +0 -1
  118. package/dist/sdk/compliance/threat-model.js +0 -101
  119. package/dist/sdk/compliance/threat-model.js.map +0 -1
  120. package/dist/sdk/forensics/mev.js +0 -50
  121. package/dist/sdk/forensics/order-flow.d.ts +0 -20
  122. package/dist/sdk/forensics/order-flow.d.ts.map +0 -1
  123. package/dist/sdk/forensics/order-flow.js +0 -104
  124. package/dist/sdk/forensics/order-flow.js.map +0 -1
  125. package/dist/sdk/forensics/simulation.d.ts +0 -14
  126. package/dist/sdk/forensics/simulation.d.ts.map +0 -1
  127. package/dist/sdk/forensics/simulation.js +0 -45
  128. package/dist/sdk/forensics/simulation.js.map +0 -1
  129. package/dist/sdk/index.d.ts.map +0 -1
  130. package/dist/sdk/index.js.map +0 -1
  131. package/dist/sdk/network/shadow-rpc.d.ts +0 -18
  132. package/dist/sdk/network/shadow-rpc.d.ts.map +0 -1
  133. package/dist/sdk/network/shadow-rpc.js +0 -32
  134. package/dist/sdk/network/shadow-rpc.js.map +0 -1
  135. package/dist/sdk/obfuscator.d.ts +0 -36
  136. package/dist/sdk/obfuscator.d.ts.map +0 -1
  137. package/dist/sdk/obfuscator.js +0 -77
  138. package/dist/sdk/obfuscator.js.map +0 -1
  139. package/dist/sdk/passport/manager.d.ts.map +0 -1
  140. package/dist/sdk/passport/manager.js +0 -107
  141. package/dist/sdk/passport/manager.js.map +0 -1
  142. package/dist/sdk/pipeline.d.ts +0 -34
  143. package/dist/sdk/pipeline.d.ts.map +0 -1
  144. package/dist/sdk/pipeline.js +0 -81
  145. package/dist/sdk/pipeline.js.map +0 -1
  146. package/dist/sdk/privacy/confidential-transfer.d.ts +0 -81
  147. package/dist/sdk/privacy/confidential-transfer.d.ts.map +0 -1
  148. package/dist/sdk/privacy/confidential-transfer.js +0 -158
  149. package/dist/sdk/privacy/confidential-transfer.js.map +0 -1
  150. package/dist/sdk/privacy/history.d.ts +0 -11
  151. package/dist/sdk/privacy/history.d.ts.map +0 -1
  152. package/dist/sdk/privacy/history.js +0 -110
  153. package/dist/sdk/privacy/history.js.map +0 -1
  154. package/dist/sdk/privacy/light-protocol.d.ts +0 -42
  155. package/dist/sdk/privacy/light-protocol.d.ts.map +0 -1
  156. package/dist/sdk/privacy/light-protocol.js +0 -83
  157. package/dist/sdk/privacy/light-protocol.js.map +0 -1
  158. package/dist/sdk/privacy/relayer.d.ts.map +0 -1
  159. package/dist/sdk/privacy/relayer.js.map +0 -1
  160. package/dist/sdk/privacy/safe-obfuscator.d.ts +0 -38
  161. package/dist/sdk/privacy/safe-obfuscator.d.ts.map +0 -1
  162. package/dist/sdk/privacy/safe-obfuscator.js +0 -101
  163. package/dist/sdk/privacy/safe-obfuscator.js.map +0 -1
  164. package/dist/sdk/privacy/shield.d.ts +0 -34
  165. package/dist/sdk/privacy/shield.d.ts.map +0 -1
  166. package/dist/sdk/privacy/shield.js +0 -174
  167. package/dist/sdk/privacy/shield.js.map +0 -1
  168. package/dist/sdk/privacy/zk.js +0 -43
  169. package/dist/sdk/privacy-engine.d.ts.map +0 -1
  170. package/dist/sdk/privacy-engine.js.map +0 -1
  171. package/dist/sdk/registry/idl-fetcher.d.ts +0 -17
  172. package/dist/sdk/registry/idl-fetcher.d.ts.map +0 -1
  173. package/dist/sdk/registry/idl-fetcher.js.map +0 -1
  174. package/dist/sdk/registry/programs.d.ts.map +0 -1
  175. package/dist/sdk/registry/programs.js.map +0 -1
  176. package/dist/sdk/rescue/analyzer.d.ts +0 -22
  177. package/dist/sdk/rescue/analyzer.d.ts.map +0 -1
  178. package/dist/sdk/rescue/analyzer.js +0 -46
  179. package/dist/sdk/rescue/analyzer.js.map +0 -1
  180. package/dist/sdk/rescue/builder.d.ts +0 -16
  181. package/dist/sdk/rescue/builder.d.ts.map +0 -1
  182. package/dist/sdk/rescue/builder.js +0 -33
  183. package/dist/sdk/rescue/builder.js.map +0 -1
  184. package/dist/sdk/semantics/decoder.d.ts.map +0 -1
  185. package/dist/sdk/semantics/decoder.js.map +0 -1
  186. package/dist/sdk/semantics/idl-registry.d.ts +0 -7
  187. package/dist/sdk/semantics/idl-registry.d.ts.map +0 -1
  188. package/dist/sdk/semantics/idl-registry.js.map +0 -1
  189. package/dist/sdk/semantics/types.d.ts +0 -44
  190. package/dist/sdk/semantics/types.d.ts.map +0 -1
  191. package/dist/sdk/semantics/types.js.map +0 -1
  192. package/dist/sdk/simulator.d.ts +0 -15
  193. package/dist/sdk/simulator.d.ts.map +0 -1
  194. package/dist/sdk/simulator.js +0 -133
  195. package/dist/sdk/simulator.js.map +0 -1
  196. package/dist/sdk/types.d.ts +0 -53
  197. package/dist/sdk/types.d.ts.map +0 -1
  198. package/dist/sdk/utils/config.d.ts.map +0 -1
  199. package/dist/sdk/utils/config.js.map +0 -1
  200. package/dist/sdk/utils/logger.d.ts.map +0 -1
  201. package/dist/sdk/utils/logger.js.map +0 -1
  202. package/dist/tests/unit/idl-registry.test.d.ts +0 -2
  203. package/dist/tests/unit/idl-registry.test.d.ts.map +0 -1
  204. package/dist/tests/unit/idl-registry.test.js +0 -35
  205. package/dist/tests/unit/idl-registry.test.js.map +0 -1
  206. package/dist/tools/exploit_demonstration.js +0 -99
  207. package/dist/tools/gen-tx.js +0 -29
  208. package/dist/tools/get-recent-tx.js +0 -18
  209. /package/dist/{sdk/privacy → privacy}/relayer.d.ts +0 -0
  210. /package/dist/{sdk/privacy → privacy}/relayer.js +0 -0
  211. /package/dist/{sdk/registry → registry}/programs.d.ts +0 -0
  212. /package/dist/{sdk/registry → registry}/programs.js +0 -0
  213. /package/dist/{sdk/semantics → semantics}/analyzer.d.ts +0 -0
  214. /package/dist/{sdk/semantics → semantics}/analyzer.js +0 -0
  215. /package/dist/{sdk/semantics → semantics}/decoder.d.ts +0 -0
  216. /package/dist/{sdk/semantics → semantics}/decoder.js +0 -0
  217. /package/dist/{sdk/semantics → semantics}/graph.d.ts +0 -0
  218. /package/dist/{sdk/semantics → semantics}/graph.js +0 -0
  219. /package/dist/{sdk/semantics → semantics}/types.js +0 -0
  220. /package/dist/{sdk/types.js → types.js} +0 -0
  221. /package/dist/{sdk/utils → utils}/config.d.ts +0 -0
  222. /package/dist/{sdk/utils → utils}/config.js +0 -0
  223. /package/dist/{sdk/utils → utils}/logger.d.ts +0 -0
  224. /package/dist/{sdk/utils → utils}/logger.js +0 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RescueAnalyzer = void 0;
4
+ const spl_token_1 = require("@solana/spl-token");
5
+ const bus_1 = require("../events/bus");
6
+ const integrity_1 = require("../integrity");
7
+ const NATIVE_SOL_MINT = '11111111111111111111111111111111';
8
+ class RescueAnalyzer {
9
+ constructor(connection) {
10
+ this.connection = connection;
11
+ }
12
+ async analyzeWallet(walletAddress, leaks) {
13
+ bus_1.EventBus.info('Analyzing wallet for multi-asset rescue...');
14
+ const leakedAssets = [];
15
+ const seenMints = new Set();
16
+ let totalValueLamports = 0;
17
+ let splTokenCount = 0;
18
+ let nativeSOL = 0;
19
+ const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(walletAddress, { programId: spl_token_1.TOKEN_PROGRAM_ID });
20
+ bus_1.EventBus.info(`Found ${tokenAccounts.value.length} token accounts`);
21
+ for (const leak of leaks) {
22
+ let mint = NATIVE_SOL_MINT;
23
+ if (leak.scope.includes(':')) {
24
+ const parts = leak.scope.split(':');
25
+ if (parts[1] && parts[1].length >= 32) {
26
+ mint = parts[1];
27
+ }
28
+ }
29
+ if (!seenMints.has(mint)) {
30
+ seenMints.add(mint);
31
+ if (mint === NATIVE_SOL_MINT) {
32
+ const balance = await this.connection.getBalance(walletAddress);
33
+ nativeSOL = balance;
34
+ totalValueLamports += balance;
35
+ leakedAssets.push((0, integrity_1.enforce)(integrity_1.LeakedAssetSchema, {
36
+ mint,
37
+ mintName: 'SOL',
38
+ amount: balance,
39
+ decimals: 9,
40
+ reason: leak.description,
41
+ severity: leak.severity,
42
+ isNative: true
43
+ }, {
44
+ origin: integrity_1.DataOrigin.CHAIN,
45
+ trust: integrity_1.DataTrust.TRUSTED,
46
+ createdAt: Date.now(),
47
+ owner: 'RescueAnalyzer'
48
+ }).value);
49
+ bus_1.EventBus.leakDetected('Native SOL', leak.severity, `${balance / 1e9} SOL exposed`);
50
+ }
51
+ else {
52
+ const tokenAccount = tokenAccounts.value.find(ta => ta.account.data.parsed.info.mint === mint);
53
+ if (tokenAccount) {
54
+ const info = tokenAccount.account.data.parsed.info;
55
+ const amount = parseInt(info.tokenAmount.amount);
56
+ const decimals = info.tokenAmount.decimals;
57
+ splTokenCount++;
58
+ leakedAssets.push((0, integrity_1.enforce)(integrity_1.LeakedAssetSchema, {
59
+ mint,
60
+ amount,
61
+ decimals,
62
+ reason: leak.description,
63
+ severity: leak.severity,
64
+ isNative: false,
65
+ ataAddress: tokenAccount.pubkey.toBase58()
66
+ }, {
67
+ origin: integrity_1.DataOrigin.CHAIN,
68
+ trust: integrity_1.DataTrust.TRUSTED,
69
+ createdAt: Date.now(),
70
+ owner: 'RescueAnalyzer'
71
+ }).value);
72
+ bus_1.EventBus.leakDetected('SPL Token', leak.severity, `${amount / Math.pow(10, decimals)} tokens (${mint.slice(0, 8)}...)`);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ if (leakedAssets.length === 0 && leaks.length > 0) {
78
+ const balance = await this.connection.getBalance(walletAddress);
79
+ if (balance > 0) {
80
+ nativeSOL = balance;
81
+ totalValueLamports += balance;
82
+ leakedAssets.push((0, integrity_1.enforce)(integrity_1.LeakedAssetSchema, {
83
+ mint: NATIVE_SOL_MINT,
84
+ mintName: 'SOL',
85
+ amount: balance,
86
+ decimals: 9,
87
+ reason: 'General privacy leak affecting wallet',
88
+ severity: leaks[0]?.severity || 'MEDIUM',
89
+ isNative: true
90
+ }, {
91
+ origin: integrity_1.DataOrigin.CHAIN,
92
+ trust: integrity_1.DataTrust.TRUSTED,
93
+ createdAt: Date.now(),
94
+ owner: 'RescueAnalyzer'
95
+ }).value);
96
+ }
97
+ }
98
+ const riskScore = this.calculateRiskScore(leaks);
99
+ const estimatedFee = this.estimateRescueFee(leakedAssets);
100
+ const analysis = {
101
+ leakedAssets,
102
+ totalValueLamports,
103
+ splTokenCount,
104
+ nativeSOL,
105
+ riskScore,
106
+ estimatedFee
107
+ };
108
+ bus_1.EventBus.info(`Rescue analysis complete: ${leakedAssets.length} assets, risk score ${riskScore}`);
109
+ return (0, integrity_1.enforce)(integrity_1.RescueAnalysisSchema, analysis, {
110
+ origin: integrity_1.DataOrigin.INTERNAL_LOGIC,
111
+ trust: integrity_1.DataTrust.TRUSTED,
112
+ createdAt: Date.now(),
113
+ owner: 'RescueAnalyzer'
114
+ }).value;
115
+ }
116
+ calculateRiskScore(leaks) {
117
+ const severityWeights = {
118
+ 'CRITICAL': 40,
119
+ 'HIGH': 25,
120
+ 'MEDIUM': 15,
121
+ 'LOW': 5
122
+ };
123
+ let score = 0;
124
+ for (const leak of leaks) {
125
+ score += severityWeights[leak.severity] || 10;
126
+ }
127
+ return Math.min(100, score);
128
+ }
129
+ estimateRescueFee(assets) {
130
+ let fee = 5000;
131
+ fee += assets.length * 5000;
132
+ fee += 50000;
133
+ return fee;
134
+ }
135
+ }
136
+ exports.RescueAnalyzer = RescueAnalyzer;
137
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../rescue/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { VersionedTransaction, PublicKey, Connection } from '@solana/web3.js';
2
+ import { PrivacyShield } from '../privacy/shield';
3
+ import { LeakedAsset } from './analyzer';
4
+ export interface RescueOptions {
5
+ readonly useJito?: boolean;
6
+ readonly jitoTipLamports?: number;
7
+ readonly useShadowRPC?: boolean;
8
+ readonly priorityFee?: number;
9
+ }
10
+ export declare class RescueBuilder {
11
+ private readonly shield;
12
+ private readonly connection;
13
+ constructor(connection: Connection, shield: PrivacyShield);
14
+ buildAtomicRescueTx(payer: PublicKey, leakedAssets: readonly LeakedAsset[], options?: RescueOptions): Promise<VersionedTransaction>;
15
+ private buildSOLDepositInstruction;
16
+ private buildTokenDepositInstructions;
17
+ private buildJitoTip;
18
+ submitJitoBundle(transactions: VersionedTransaction[]): Promise<{
19
+ readonly bundleId: string;
20
+ readonly status: string;
21
+ }>;
22
+ }
23
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../rescue/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,oBAAoB,EACpB,SAAS,EACT,UAAU,EAIb,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACjC;AAaD,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa;IAK5C,mBAAmB,CAC5B,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,OAAO,GAAE,aAAkB,GAC5B,OAAO,CAAC,oBAAoB,CAAC;YAmFlB,0BAA0B;YAuB1B,6BAA6B;YAuE7B,YAAY;IAmBb,gBAAgB,CACzB,YAAY,EAAE,oBAAoB,EAAE,GACrC,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CA0CrE"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RescueBuilder = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const spl_token_1 = require("@solana/spl-token");
6
+ const bus_1 = require("../events/bus");
7
+ const integrity_1 = require("../integrity");
8
+ const JITO_TIP_ACCOUNTS = [
9
+ '96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5',
10
+ 'HFqU5x63VTqvQss8hp11i4bVEWH5GBF7dSprRSQmAPP1',
11
+ 'Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY',
12
+ 'ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49',
13
+ 'DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh',
14
+ 'ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt',
15
+ 'DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL',
16
+ '3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT'
17
+ ];
18
+ class RescueBuilder {
19
+ constructor(connection, shield) {
20
+ this.connection = connection;
21
+ this.shield = shield;
22
+ }
23
+ async buildAtomicRescueTx(payer, leakedAssets, options = {}) {
24
+ bus_1.EventBus.info(`Building atomic rescue for ${leakedAssets.length} assets...`);
25
+ const instructions = [];
26
+ const commitments = [];
27
+ if (options.priorityFee || options.useJito) {
28
+ const fee = options.priorityFee || 100000;
29
+ instructions.push(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({
30
+ microLamports: fee
31
+ }));
32
+ bus_1.EventBus.info(`Priority fee set: ${fee} microLamports`);
33
+ }
34
+ if (options.useJito) {
35
+ const tipIx = await this.buildJitoTip(payer, options.jitoTipLamports);
36
+ instructions.push(tipIx);
37
+ bus_1.EventBus.info(`Jito tip added: ${(options.jitoTipLamports || 10000) / web3_js_1.LAMPORTS_PER_SOL} SOL`, { units: integrity_1.Unit.SOL });
38
+ }
39
+ for (const asset of leakedAssets) {
40
+ bus_1.EventBus.info(`Processing rescue for ${asset.isNative ? 'SOL' : asset.mint.slice(0, 8)}...`);
41
+ const commitmentData = await this.shield.generateCommitment(asset.amount);
42
+ commitments.push({
43
+ mint: asset.mint,
44
+ commitment: commitmentData.commitmentHex
45
+ });
46
+ const [vaultPDA] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('vault')], this.shield.getProgramId());
47
+ const [statePDA] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('state')], this.shield.getProgramId());
48
+ if (asset.isNative) {
49
+ const depositIx = await this.buildSOLDepositInstruction(payer, vaultPDA, statePDA, Buffer.from(commitmentData.commitmentHex, 'hex'), asset.amount);
50
+ instructions.push(depositIx);
51
+ }
52
+ else {
53
+ const tokenIxs = await this.buildTokenDepositInstructions(payer, vaultPDA, statePDA, new web3_js_1.PublicKey(asset.mint), asset.ataAddress ? new web3_js_1.PublicKey(asset.ataAddress) : undefined, Buffer.from(commitmentData.commitmentHex, 'hex'), asset.amount);
54
+ instructions.push(...tokenIxs);
55
+ }
56
+ }
57
+ const { blockhash } = await this.connection.getLatestBlockhash('finalized');
58
+ const messageV0 = new web3_js_1.TransactionMessage({
59
+ payerKey: payer,
60
+ recentBlockhash: blockhash,
61
+ instructions,
62
+ }).compileToV0Message();
63
+ const tx = new web3_js_1.VersionedTransaction(messageV0);
64
+ bus_1.EventBus.info(`Rescue transaction built: ${instructions.length} instructions`);
65
+ bus_1.EventBus.emit('COMMITMENT_CREATED', `Multi-asset rescue prepared`, {
66
+ assetCount: leakedAssets.length,
67
+ commitments: commitments.length,
68
+ useJito: options.useJito
69
+ });
70
+ return tx;
71
+ }
72
+ async buildSOLDepositInstruction(payer, vaultPDA, statePDA, commitment, amount) {
73
+ return new web3_js_1.TransactionInstruction({
74
+ keys: [
75
+ { pubkey: statePDA, isSigner: false, isWritable: true },
76
+ { pubkey: payer, isSigner: true, isWritable: true },
77
+ { pubkey: vaultPDA, isSigner: false, isWritable: true },
78
+ { pubkey: web3_js_1.SystemProgram.programId, isSigner: false, isWritable: false }
79
+ ],
80
+ programId: this.shield.getProgramId(),
81
+ data: Buffer.concat([
82
+ Buffer.from([1]),
83
+ commitment,
84
+ Buffer.from(new BigUint64Array([BigInt(amount)]).buffer)
85
+ ])
86
+ });
87
+ }
88
+ async buildTokenDepositInstructions(payer, vaultPDA, statePDA, mint, sourceATA, commitment, amount) {
89
+ const instructions = [];
90
+ const vaultATA = await spl_token_1.Token.getAssociatedTokenAddress(spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, spl_token_1.TOKEN_PROGRAM_ID, mint, vaultPDA, true);
91
+ const vaultATAInfo = await this.connection.getAccountInfo(vaultATA);
92
+ if (!vaultATAInfo) {
93
+ instructions.push(spl_token_1.Token.createAssociatedTokenAccountInstruction(spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, spl_token_1.TOKEN_PROGRAM_ID, mint, vaultATA, vaultPDA, payer));
94
+ }
95
+ if (!sourceATA) {
96
+ sourceATA = await spl_token_1.Token.getAssociatedTokenAddress(spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID, spl_token_1.TOKEN_PROGRAM_ID, mint, payer);
97
+ }
98
+ instructions.push(spl_token_1.Token.createTransferInstruction(spl_token_1.TOKEN_PROGRAM_ID, sourceATA, vaultATA, payer, [], amount));
99
+ instructions.push(new web3_js_1.TransactionInstruction({
100
+ keys: [
101
+ { pubkey: statePDA, isSigner: false, isWritable: true },
102
+ { pubkey: payer, isSigner: true, isWritable: true },
103
+ { pubkey: mint, isSigner: false, isWritable: false },
104
+ { pubkey: spl_token_1.TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }
105
+ ],
106
+ programId: this.shield.getProgramId(),
107
+ data: Buffer.concat([
108
+ Buffer.from([2]),
109
+ commitment,
110
+ mint.toBuffer()
111
+ ])
112
+ }));
113
+ return instructions;
114
+ }
115
+ async buildJitoTip(payer, tipLamports = 10000) {
116
+ const tipAccountIndex = Math.floor(Math.random() * JITO_TIP_ACCOUNTS.length);
117
+ const tipAccountStr = JITO_TIP_ACCOUNTS[tipAccountIndex];
118
+ if (!tipAccountStr)
119
+ throw new Error("Invalid tip account index");
120
+ const tipAccount = new web3_js_1.PublicKey(tipAccountStr);
121
+ bus_1.EventBus.info(`Jito tip account selected: ${tipAccount.toBase58().slice(0, 8)}...`);
122
+ return web3_js_1.SystemProgram.transfer({
123
+ fromPubkey: payer,
124
+ toPubkey: tipAccount,
125
+ lamports: tipLamports
126
+ });
127
+ }
128
+ async submitJitoBundle(transactions) {
129
+ bus_1.EventBus.info(`Submitting ${transactions.length} transactions to Jito...`);
130
+ const JITO_BUNDLE_API = 'https://mainnet.block-engine.jito.wtf/api/v1/bundles';
131
+ try {
132
+ const serializedTxs = transactions.map(tx => Buffer.from(tx.serialize()).toString('base64'));
133
+ const response = await fetch(JITO_BUNDLE_API, {
134
+ method: 'POST',
135
+ headers: {
136
+ 'Content-Type': 'application/json'
137
+ },
138
+ body: JSON.stringify({
139
+ jsonrpc: '2.0',
140
+ id: 1,
141
+ method: 'sendBundle',
142
+ params: [serializedTxs]
143
+ })
144
+ });
145
+ const result = (await response.json());
146
+ if (result.error) {
147
+ throw new Error(result.error.message);
148
+ }
149
+ const bundleId = result.result;
150
+ bus_1.EventBus.relayBroadcast(1, bundleId);
151
+ bus_1.EventBus.info(`Jito bundle submitted: ${bundleId}`);
152
+ return {
153
+ bundleId,
154
+ status: 'SUBMITTED'
155
+ };
156
+ }
157
+ catch (error) {
158
+ bus_1.EventBus.error(`Jito submission failed: ${error.message}`);
159
+ throw error;
160
+ }
161
+ }
162
+ }
163
+ exports.RescueBuilder = RescueBuilder;
164
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../rescue/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import { Keypair } from '@solana/web3.js';
2
+ /**
3
+ * Key rotation configuration
4
+ */
5
+ export interface KeyRotationConfig {
6
+ maxKeyAge: number;
7
+ rotationInterval: number;
8
+ backupEnabled: boolean;
9
+ encryptionEnabled: boolean;
10
+ }
11
+ /**
12
+ * Key metadata for rotation tracking
13
+ */
14
+ export interface KeyMetadata {
15
+ keyId: string;
16
+ publicKey: string;
17
+ createdAt: number;
18
+ lastUsed: number;
19
+ usageCount: number;
20
+ isRetired: boolean;
21
+ retiredAt?: number;
22
+ }
23
+ /**
24
+ * Encrypted key backup
25
+ */
26
+ export interface EncryptedKeyBackup {
27
+ keyId: string;
28
+ encryptedPrivateKey: string;
29
+ publicKey: string;
30
+ createdAt: number;
31
+ encryptionAlgorithm: string;
32
+ }
33
+ /**
34
+ * Key Rotation Manager
35
+ * Provides secure key lifecycle management with automatic rotation
36
+ */
37
+ export declare class KeyRotationManager {
38
+ private currentKey;
39
+ private keyHistory;
40
+ private backups;
41
+ private config;
42
+ private rotationTimer?;
43
+ constructor(config?: Partial<KeyRotationConfig>);
44
+ /**
45
+ * Initialize current key metadata
46
+ */
47
+ private initializeCurrentKey;
48
+ /**
49
+ * Generate unique key identifier
50
+ */
51
+ private generateKeyId;
52
+ /**
53
+ * Start automatic rotation timer
54
+ */
55
+ private startRotationTimer;
56
+ /**
57
+ * Check if key needs rotation and perform if necessary
58
+ */
59
+ private checkAndRotate;
60
+ /**
61
+ * Determine if key should be rotated
62
+ */
63
+ private shouldRotate;
64
+ /**
65
+ * Perform key rotation
66
+ */
67
+ rotateKey(): Keypair;
68
+ /**
69
+ * Get current key metadata
70
+ */
71
+ private getCurrentKeyMetadata;
72
+ /**
73
+ * Get current keypair
74
+ */
75
+ getCurrentKey(): Keypair;
76
+ /**
77
+ * Update key usage statistics
78
+ */
79
+ private updateKeyUsage;
80
+ /**
81
+ * Create encrypted backup of private key
82
+ */
83
+ private createBackup;
84
+ /**
85
+ * Get encryption key (in production, use secure key management)
86
+ */
87
+ private getEncryptionKey;
88
+ /**
89
+ * Find keypair by ID (simplified implementation)
90
+ */
91
+ private findKeypairById;
92
+ /**
93
+ * Restore key from backup
94
+ */
95
+ restoreFromBackup(keyId: string, encryptionKey?: string): Keypair;
96
+ /**
97
+ * Get key metadata by public key
98
+ */
99
+ getKeyMetadata(publicKey: string): KeyMetadata | undefined;
100
+ /**
101
+ * Get all key metadata
102
+ */
103
+ getAllKeyMetadata(): KeyMetadata[];
104
+ /**
105
+ * Get backup information
106
+ */
107
+ getBackupInfo(): EncryptedKeyBackup[];
108
+ /**
109
+ * Force immediate rotation
110
+ */
111
+ forceRotation(): Keypair;
112
+ /**
113
+ * Stop rotation timer
114
+ */
115
+ stopRotation(): void;
116
+ /**
117
+ * Resume rotation timer
118
+ */
119
+ resumeRotation(): void;
120
+ /**
121
+ * Cleanup old keys and backups
122
+ */
123
+ cleanup(maxAge?: number): void;
124
+ /**
125
+ * Export configuration for persistence
126
+ */
127
+ exportConfig(): {
128
+ config: KeyRotationConfig;
129
+ keyHistory: KeyMetadata[];
130
+ backups: EncryptedKeyBackup[];
131
+ };
132
+ /**
133
+ * Import configuration
134
+ */
135
+ importConfig(data: {
136
+ config: KeyRotationConfig;
137
+ keyHistory: KeyMetadata[];
138
+ backups: EncryptedKeyBackup[];
139
+ }): void;
140
+ /**
141
+ * Destroy sensitive data
142
+ */
143
+ destroy(): void;
144
+ }
145
+ /**
146
+ * Get global key manager instance
147
+ */
148
+ export declare function getKeyManager(config?: Partial<KeyRotationConfig>): KeyRotationManager;
149
+ /**
150
+ * Destroy global key manager
151
+ */
152
+ export declare function destroyKeyManager(): void;
153
+ //# sourceMappingURL=key-rotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-rotation.d.ts","sourceRoot":"","sources":["../../security/key-rotation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI1C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,aAAa,CAAC,CAAiB;gBAE3B,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAcnD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACI,SAAS,IAAI,OAAO;IAe3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACI,aAAa,IAAI,OAAO;IAK/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAsCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAmBxE;;OAEG;IACI,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAKjE;;OAEG;IACI,iBAAiB,IAAI,WAAW,EAAE;IAIzC;;OAEG;IACI,aAAa,IAAI,kBAAkB,EAAE;IAI5C;;OAEG;IACI,aAAa,IAAI,OAAO;IAI/B;;OAEG;IACI,YAAY,IAAI,IAAI;IAO3B;;OAEG;IACI,cAAc,IAAI,IAAI;IAM7B;;OAEG;IACI,OAAO,CAAC,MAAM,GAAE,MAAgC,GAAG,IAAI;IAa9D;;OAEG;IACI,YAAY,IAAI;QACnB,MAAM,EAAE,iBAAiB,CAAC;QAC1B,UAAU,EAAE,WAAW,EAAE,CAAC;QAC1B,OAAO,EAAE,kBAAkB,EAAE,CAAC;KACjC;IAQD;;OAEG;IACI,YAAY,CAAC,IAAI,EAAE;QACtB,MAAM,EAAE,iBAAiB,CAAC;QAC1B,UAAU,EAAE,WAAW,EAAE,CAAC;QAC1B,OAAO,EAAE,kBAAkB,EAAE,CAAC;KACjC,GAAG,IAAI;IAkBR;;OAEG;IACI,OAAO,IAAI,IAAI;CAQzB;AAOD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,kBAAkB,CAKrF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}