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
@@ -1,133 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ForensicsSimulator = void 0;
7
- const web3_js_1 = require("@solana/web3.js");
8
- const logger_1 = require("./utils/logger");
9
- const p_retry_1 = __importDefault(require("p-retry"));
10
- class ForensicsSimulator {
11
- constructor(rpcUrl = "https://api.mainnet-beta.solana.com") {
12
- this.connection = new web3_js_1.Connection(rpcUrl, 'confirmed');
13
- }
14
- /**
15
- * Simulates a transaction and converts the result into forensic events.
16
- */
17
- async simulate(tx, baseTxJson) {
18
- logger_1.logger.debug("Executing RPC Simulation...");
19
- const simResult = await (0, p_retry_1.default)(async () => {
20
- return await this.connection.simulateTransaction(tx, {
21
- replaceRecentBlockhash: true,
22
- sigVerify: false,
23
- commitment: 'confirmed',
24
- accounts: {
25
- encoding: "base64",
26
- addresses: baseTxJson.message.accountKeys
27
- }
28
- });
29
- }, {
30
- retries: 3,
31
- minTimeout: 1000,
32
- onFailedAttempt: error => {
33
- logger_1.logger.warn(`RPC attempt ${error.attemptNumber} failed: ${error.message}`);
34
- }
35
- });
36
- if (simResult.value.err) {
37
- logger_1.logger.error("Simulation Failed:", simResult.value.err);
38
- throw new Error("Transaction Simulation Failed.");
39
- }
40
- const updates = [];
41
- if (simResult.value.accounts) {
42
- simResult.value.accounts.forEach((acc, index) => {
43
- if (!acc)
44
- return;
45
- const address = baseTxJson.message.accountKeys[index];
46
- updates.push({
47
- pubkey: address,
48
- owner: acc.owner,
49
- lamports: acc.lamports,
50
- data: acc.data[0],
51
- executable: acc.executable,
52
- rentEpoch: acc.rentEpoch || 0,
53
- writeVersion: 0
54
- });
55
- });
56
- }
57
- return {
58
- signature: "simulated_state",
59
- accountUpdates: updates
60
- };
61
- }
62
- /**
63
- * Reconstructs the full transaction structure by resolving ALTs.
64
- */
65
- async expandTransaction(tx) {
66
- const addressLookupTableAccounts = [];
67
- const message = tx.message;
68
- if (message.version === 0) {
69
- const lookups = message.addressTableLookups;
70
- if (lookups && lookups.length > 0) {
71
- logger_1.logger.debug(`Resolving ${lookups.length} Address Lookup Tables...`);
72
- for (const lookup of lookups) {
73
- const res = await this.connection.getAddressLookupTable(lookup.accountKey);
74
- if (res.value) {
75
- addressLookupTableAccounts.push(res.value);
76
- }
77
- }
78
- }
79
- }
80
- const decompiled = web3_js_1.TransactionMessage.decompile(message, { addressLookupTableAccounts });
81
- const keyMap = new Map();
82
- const addKey = (pubkey, isSigner, isWritable) => {
83
- const k = pubkey.toBase58();
84
- const curr = keyMap.get(k);
85
- if (curr) {
86
- curr.isSigner = curr.isSigner || isSigner;
87
- curr.isWritable = curr.isWritable || isWritable;
88
- }
89
- else {
90
- keyMap.set(k, { isSigner, isWritable });
91
- }
92
- };
93
- addKey(decompiled.payerKey, true, true);
94
- for (const ix of decompiled.instructions) {
95
- addKey(ix.programId, false, false);
96
- for (const meta of ix.keys) {
97
- addKey(meta.pubkey, meta.isSigner, meta.isWritable);
98
- }
99
- }
100
- const entries = Array.from(keyMap.entries());
101
- const payer = decompiled.payerKey.toBase58();
102
- const signersWritable = entries.filter(([, v]) => v.isSigner && v.isWritable).map(([k]) => k)
103
- .sort((a, b) => (a === payer ? -1 : b === payer ? 1 : 0));
104
- const signersReadonly = entries.filter(([, v]) => v.isSigner && !v.isWritable).map(([k]) => k);
105
- const nonSignersWritable = entries.filter(([, v]) => !v.isSigner && v.isWritable).map(([k]) => k);
106
- const nonSignersReadonly = entries.filter(([, v]) => !v.isSigner && !v.isWritable).map(([k]) => k);
107
- const accountKeys = [
108
- ...signersWritable,
109
- ...signersReadonly,
110
- ...nonSignersWritable,
111
- ...nonSignersReadonly
112
- ];
113
- const instructions = decompiled.instructions.map(ix => ({
114
- programIdIndex: accountKeys.indexOf(ix.programId.toBase58()),
115
- accounts: ix.keys.map(k => accountKeys.indexOf(k.pubkey.toBase58())),
116
- data: ix.data.toString('base64')
117
- }));
118
- return {
119
- message: {
120
- accountKeys,
121
- header: {
122
- numRequiredSignatures: signersWritable.length + signersReadonly.length,
123
- numReadonlySignedAccounts: signersReadonly.length,
124
- numReadonlyUnsignedAccounts: nonSignersReadonly.length
125
- },
126
- instructions
127
- },
128
- signatures: tx.signatures.map(s => Buffer.from(s).toString('base64'))
129
- };
130
- }
131
- }
132
- exports.ForensicsSimulator = ForensicsSimulator;
133
- //# sourceMappingURL=simulator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../sdk/simulator.ts"],"names":[],"mappings":"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"}
@@ -1,53 +0,0 @@
1
- export type LeakType = "identity" | "metadata" | "state-leak" | "cpi-linkage";
2
- export type VisibilityScope = "PUBLIC" | "PROGRAM" | "LOCAL";
3
- export interface Leak {
4
- type: LeakType;
5
- scope: string;
6
- visibility: VisibilityScope;
7
- description: string;
8
- remediation?: string;
9
- severity: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW";
10
- programName?: string;
11
- }
12
- export interface GovernanceResult {
13
- status: "SURFACE_SCAN_PASSED" | "REGRESSION";
14
- unacceptedLiabilities: {
15
- leak: Leak;
16
- reason: string;
17
- }[];
18
- remediationHints: string[];
19
- privacyScore: number;
20
- }
21
- export interface TransactionJSON {
22
- message: {
23
- accountKeys: string[];
24
- header: {
25
- numRequiredSignatures: number;
26
- };
27
- instructions: {
28
- programIdIndex: number;
29
- accounts: number[];
30
- data: string;
31
- }[];
32
- };
33
- meta?: {
34
- innerInstructions?: {
35
- index: number;
36
- instructions: {
37
- programIdIndex: number;
38
- accounts: number[];
39
- data: string;
40
- }[];
41
- }[];
42
- logMessages?: string[];
43
- };
44
- signatures: string[];
45
- }
46
- export interface GeyserTransactionEvents {
47
- signature: string;
48
- accountUpdates: {
49
- pubkey: string;
50
- data: string;
51
- }[];
52
- }
53
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../sdk/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GACd,UAAU,GACV,UAAU,GACV,YAAY,GACZ,aAAa,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,eAAe,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,qBAAqB,GAAG,YAAY,CAAC;IAC7C,qBAAqB,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE;QACL,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE;YACJ,qBAAqB,EAAE,MAAM,CAAC;SACjC,CAAC;QACF,YAAY,EAAE;YACV,cAAc,EAAE,MAAM,CAAC;YACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnB,IAAI,EAAE,MAAM,CAAC;SAChB,EAAE,CAAC;KACP,CAAC;IACF,IAAI,CAAC,EAAE;QACH,iBAAiB,CAAC,EAAE;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,YAAY,EAAE;gBACV,cAAc,EAAE,MAAM,CAAC;gBACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC;aAChB,EAAE,CAAC;SACP,EAAE,CAAC;QACJ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../sdk/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAY;;IAWnB,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,OAAO,GAAG,IAAI;IAkB3B,WAAW,IAAI,MAAM,GAAG,SAAS;CAG3C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../sdk/utils/config.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAW1C,MAAa,YAAY;IAGrB;QACI,IAAI,CAAC,MAAM,GAAG;YACV,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,qCAAqC;YACpE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;YACjC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAC7C,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;SAC7C,CAAC;IACN,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAEM,SAAS;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAExC,IAAI,CAAC;YACD,wBAAwB;YACxB,6BAA6B;YAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,OAAO,iBAAO,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,iBAAiB;YACjB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,iBAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACrC,CAAC;CACJ;AArCD,oCAqCC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../sdk/utils/logger.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,eAAO,MAAM,MAAM,gBAcjB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../sdk/utils/logger.ts"],"names":[],"mappings":";;;;;;AACA,sDAA8B;AAEjB,QAAA,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC1B,iBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,iBAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACxB;IACD,UAAU,EAAE;QACR,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC1B,iBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,iBAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAC1B;SACJ,CAAC;KACL;CACJ,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=idl-registry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idl-registry.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/idl-registry.test.ts"],"names":[],"mappings":""}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const globals_1 = require("@jest/globals");
4
- const idl_registry_1 = require("../../sdk/semantics/idl-registry");
5
- (0, globals_1.describe)('IdlRegistry', () => {
6
- let registry;
7
- (0, globals_1.beforeEach)(() => {
8
- registry = new idl_registry_1.IdlRegistry();
9
- });
10
- (0, globals_1.it)('should load pre-seeded system program IDL', async () => {
11
- const idl = await registry.fetchIdl('11111111111111111111111111111111');
12
- (0, globals_1.expect)(idl.name).toBe('system_program');
13
- });
14
- (0, globals_1.it)('should load pre-seeded SPL token IDL', async () => {
15
- const idl = await registry.fetchIdl('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
16
- (0, globals_1.expect)(idl.name).toBe('spl_token');
17
- });
18
- (0, globals_1.it)('should register custom IDLs', () => {
19
- const mockIdl = { name: 'mock' };
20
- registry.registerIdl('Mock111111111111111111111111111111111', mockIdl);
21
- // Using any cast to avoid TS issues in mock test
22
- const saved = registry.cache.get('Mock111111111111111111111111111111111');
23
- (0, globals_1.expect)(saved.name).toBe('mock');
24
- });
25
- (0, globals_1.it)('should return null for unknown programs', async () => {
26
- const idl = await registry.fetchIdl('Unknown11111111111111111111111111111111');
27
- (0, globals_1.expect)(idl).toBeNull();
28
- });
29
- (0, globals_1.it)('fix parameter implicit any error', () => {
30
- // This addresses the "Parameter 'res' implicitly has an 'any' type" error
31
- const mockFn = (res) => res;
32
- (0, globals_1.expect)(mockFn('test')).toBe('test');
33
- });
34
- });
35
- //# sourceMappingURL=idl-registry.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"idl-registry.test.js","sourceRoot":"","sources":["../../../tests/unit/idl-registry.test.ts"],"names":[],"mappings":";;AAAA,2CAAiE;AACjE,mEAA+D;AAE/D,IAAA,kBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAI,QAAqB,CAAC;IAE1B,IAAA,oBAAU,EAAC,GAAG,EAAE;QACZ,QAAQ,GAAG,IAAI,0BAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;QACxE,IAAA,gBAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC;QACnF,IAAA,gBAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjC,QAAQ,CAAC,WAAW,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;QACvE,iDAAiD;QACjD,MAAM,KAAK,GAAS,QAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACxF,IAAA,gBAAM,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC/E,IAAA,gBAAM,EAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,IAAA,YAAE,EAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,0EAA0E;QAC1E,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC;QACjC,IAAA,gBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const privacy_engine_1 = require("../sdk/privacy-engine");
4
- const web3_js_1 = require("@solana/web3.js");
5
- // Setup
6
- const engine = new privacy_engine_1.PrivacyEngine();
7
- const user = web3_js_1.Keypair.generate();
8
- const attacker = web3_js_1.Keypair.generate();
9
- const userPubkey = user.publicKey.toBase58();
10
- console.log("\n💀 PREDATORY OFFENSIVE SECURITY INTELLECT - SYSTEM ANALYSIS 💀\n");
11
- console.log(`Target Identity: ${userPubkey.slice(0, 8)}...`);
12
- // --- EXPLOIT 1: THE KING'S ROBES (System Program Blindness) ---
13
- console.log("\n[1] Executing Exploit: 'The King's Robes' (System Program Blindness)...");
14
- // Construct a raw JSON reflecting a SystemProgram.transfer(User, Attacker)
15
- // In a real tx, AccountKeys = [User (Payer, Signer), Attacker, SystemProgram]
16
- // Instruction: ProgramIdIndex = 2 (System), Accounts = [0, 1]
17
- // We expect the engine to SKIP this because ProgramId is SystemProgram (111...)
18
- const systemProgramId = web3_js_1.SystemProgram.programId.toBase58();
19
- const txTransfer = {
20
- message: {
21
- accountKeys: [userPubkey, attacker.publicKey.toBase58(), systemProgramId],
22
- header: {
23
- numRequiredSignatures: 1,
24
- numReadonlySignedAccounts: 0,
25
- numReadonlyUnsignedAccounts: 0
26
- },
27
- instructions: [{
28
- programIdIndex: 2, // System Program
29
- accounts: [0, 1], // User -> Attacker
30
- data: "AgAAAAAAAAA=" // Dummy transfer instruction data
31
- }]
32
- },
33
- signatures: ["dummy_signature"]
34
- };
35
- const leaks1 = engine.analyzeTransaction(txTransfer);
36
- if (leaks1.length === 0) {
37
- console.log("❌ RESULT: ZERO LEAKS DETECTED.");
38
- console.log(" The engine explicitly ignores 'SystemProgram'.");
39
- console.log(" A direct transfer of funds (The ultimate graph link) is INVISIBLE.");
40
- }
41
- else {
42
- console.log("✅ RESULT: LEAKS DETECTED.", leaks1);
43
- }
44
- // --- EXPLOIT 2: THE BROKEN LENS (ALT Blindness) ---
45
- console.log("\n[2] Executing Exploit: 'The Broken Lens' (Address Lookup Table Blindness)...");
46
- // Scenario: A V0 transaction using ALTs.
47
- // The 'accountKeys' array in message ONLY has static keys.
48
- // The 'loadedAddresses' in meta has the dynamic keys.
49
- // The user is HIDDEN in the ALT (loadedAddresses).
50
- const dexProgramId = "Dex1111111111111111111111111111111111111"; // Hypothetical DEX
51
- const txAlt = {
52
- message: {
53
- accountKeys: [
54
- attacker.publicKey.toBase58(), // Payer (Attacker pays!)
55
- dexProgramId // Static Program
56
- ],
57
- header: {
58
- numRequiredSignatures: 1,
59
- numReadonlySignedAccounts: 0,
60
- numReadonlyUnsignedAccounts: 0
61
- },
62
- instructions: [{
63
- programIdIndex: 1, // Dex Program
64
- accounts: [0, 2], // 0=Attacker, 2=User (from ALT!)
65
- // Note: In V0, index 2 points to loadedAddresses[0] if static length is 2.
66
- data: "dummydata"
67
- }]
68
- },
69
- meta: {
70
- loadedAddresses: {
71
- writable: [userPubkey], // User is here!
72
- readonly: []
73
- }
74
- },
75
- signatures: ["dummy_signature"]
76
- };
77
- try {
78
- const leaks2 = engine.analyzeTransaction(txAlt);
79
- // Check if the user was found
80
- const userFound = leaks2.some(l => l.description.includes(userPubkey.slice(0, 8)));
81
- if (!userFound) {
82
- console.log("❌ RESULT: USER NOT DETECTED.");
83
- console.log(` Internal Engine State Check:`);
84
- // The engine logic: ix.accounts.map(idx => accountKeys[idx])
85
- // accountKeys has length 2. Index is 2.
86
- // accountKeys[2] is UNDEFINED.
87
- // [undefined].includes(user) is FALSE.
88
- console.log(" The engine fails to look in 'loadedAddresses'.");
89
- console.log(" The User is invisible by simply moving them to a Lookup Table.");
90
- }
91
- else {
92
- console.log("✅ RESULT: USER DETECTED.", leaks2);
93
- }
94
- }
95
- catch (e) {
96
- console.log("💥 CRASH: The engine choked on the ALT structure.");
97
- console.log(" Error:", e.message);
98
- }
99
- console.log("\n💀 DEMONSTRATION COMPLETE 💀");
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const web3_js_1 = require("@solana/web3.js");
4
- // Mock Transaction Construction
5
- const user = "5ZwJqpwa5u43t4i88888888888888888888888888888"; // Needs to be 32 bytes valid key? No, VersionedTransaction uses whatever.
6
- // But web3.js needs valid keys to serialize.
7
- // I'll just output the same base64 I'd expect if I could serialize it easily,
8
- // OR I'll just use a valid mock transaction buffer.
9
- // Let's use a dummy valid transaction base64 from a real network or just a valid structure.
10
- // Actually, `privacy-scan` in `--fix` mode calls `VersionedTransaction.deserialize`.
11
- // It needs to be a valid serializable transaction.
12
- // Minimal approach: Use the sample-swap.json and pretend we passed it as base64?
13
- // No, the tool expects raw base64 arg if not file.
14
- // Let's create a script that outputs a valid base64 string for a dummy transaction
15
- const fromKey = web3_js_1.Keypair.generate();
16
- const toKey = web3_js_1.Keypair.generate();
17
- const recentBlockhash = web3_js_1.Keypair.generate().publicKey.toBase58(); // Mock blockhash
18
- const tx = new web3_js_1.Transaction({
19
- feePayer: fromKey.publicKey,
20
- recentBlockhash: recentBlockhash
21
- });
22
- tx.add(web3_js_1.SystemProgram.transfer({
23
- fromPubkey: fromKey.publicKey,
24
- toPubkey: toKey.publicKey,
25
- lamports: 1000
26
- }));
27
- // We need to sign it to serialize? Or `serialize({ requireAllSignatures: false })`
28
- const serialized = tx.serialize({ requireAllSignatures: false });
29
- console.log(serialized.toString('base64'));
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const web3_js_1 = require("@solana/web3.js");
4
- async function main() {
5
- const programId = new web3_js_1.PublicKey(process.argv[2]);
6
- const connection = new web3_js_1.Connection("https://api.mainnet-beta.solana.com");
7
- // Get recent signatures for this address
8
- const signatures = await connection.getSignaturesForAddress(programId, { limit: 1 });
9
- if (signatures.length === 0) {
10
- console.error("No transactions found for this address.");
11
- process.exit(1);
12
- }
13
- console.log(signatures[0].signature);
14
- }
15
- main().catch(e => {
16
- console.error(e);
17
- process.exit(1);
18
- });
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes