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.
- package/CHANGELOG.md +105 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +281 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto/poseidon.d.ts +124 -0
- package/dist/crypto/poseidon.d.ts.map +1 -0
- package/dist/crypto/poseidon.js +293 -0
- package/dist/crypto/poseidon.js.map +1 -0
- package/dist/events/bus.d.ts +44 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +83 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/{sdk/index.d.ts → index.d.ts} +2 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{sdk/index.js → index.js} +21 -11
- package/dist/index.js.map +1 -0
- package/dist/integrity.d.ts +371 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +260 -0
- package/dist/integrity.js.map +1 -0
- package/dist/network/shadow-rpc.d.ts +36 -0
- package/dist/network/shadow-rpc.d.ts.map +1 -0
- package/dist/network/shadow-rpc.js +163 -0
- package/dist/network/shadow-rpc.js.map +1 -0
- package/dist/{sdk/passport → passport}/manager.d.ts +9 -18
- package/dist/passport/manager.d.ts.map +1 -0
- package/dist/passport/manager.js +148 -0
- package/dist/passport/manager.js.map +1 -0
- package/dist/pipeline.d.ts +25 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +127 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/privacy/relayer.d.ts.map +1 -0
- package/dist/privacy/relayer.js.map +1 -0
- package/dist/privacy/shield.d.ts +27 -0
- package/dist/privacy/shield.d.ts.map +1 -0
- package/dist/privacy/shield.js +289 -0
- package/dist/privacy/shield.js.map +1 -0
- package/dist/{sdk/privacy-engine.d.ts → privacy-engine.d.ts} +2 -1
- package/dist/privacy-engine.d.ts.map +1 -0
- package/dist/{sdk/privacy-engine.js → privacy-engine.js} +24 -15
- package/dist/privacy-engine.js.map +1 -0
- package/dist/registry/idl-fetcher.d.ts +10 -0
- package/dist/registry/idl-fetcher.d.ts.map +1 -0
- package/dist/{sdk/registry → registry}/idl-fetcher.js +19 -16
- package/dist/registry/idl-fetcher.js.map +1 -0
- package/dist/registry/programs.d.ts.map +1 -0
- package/dist/registry/programs.js.map +1 -0
- package/dist/rescue/analyzer.d.ts +20 -0
- package/dist/rescue/analyzer.d.ts.map +1 -0
- package/dist/rescue/analyzer.js +137 -0
- package/dist/rescue/analyzer.js.map +1 -0
- package/dist/rescue/builder.d.ts +23 -0
- package/dist/rescue/builder.d.ts.map +1 -0
- package/dist/rescue/builder.js +164 -0
- package/dist/rescue/builder.js.map +1 -0
- package/dist/security/key-rotation.d.ts +153 -0
- package/dist/security/key-rotation.d.ts.map +1 -0
- package/dist/security/key-rotation.js +354 -0
- package/dist/security/key-rotation.js.map +1 -0
- package/dist/{sdk/semantics → semantics}/analyzer.d.ts.map +1 -1
- package/dist/{sdk/semantics → semantics}/analyzer.js.map +1 -1
- package/dist/semantics/decoder.d.ts.map +1 -0
- package/dist/semantics/decoder.js.map +1 -0
- package/dist/{sdk/semantics → semantics}/graph.d.ts.map +1 -1
- package/dist/{sdk/semantics → semantics}/graph.js.map +1 -1
- package/dist/semantics/idl-registry.d.ts +8 -0
- package/dist/semantics/idl-registry.d.ts.map +1 -0
- package/dist/{sdk/semantics → semantics}/idl-registry.js +23 -7
- package/dist/semantics/idl-registry.js.map +1 -0
- package/dist/semantics/types.d.ts +10 -0
- package/dist/semantics/types.d.ts.map +1 -0
- package/dist/{sdk → semantics}/types.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/address.d.ts +10 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +45 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +39 -76
- package/LICENSE +0 -21
- package/README.md +0 -123
- package/SECURITY.md +0 -174
- package/bin/solvoid-scan +0 -2
- package/dist/cli/privacy-scan.d.ts +0 -11
- package/dist/cli/privacy-scan.d.ts.map +0 -1
- package/dist/cli/privacy-scan.js +0 -112
- package/dist/cli/privacy-scan.js.map +0 -1
- package/dist/cli/solvoid-scan.d.ts +0 -13
- package/dist/cli/solvoid-scan.d.ts.map +0 -1
- package/dist/cli/solvoid-scan.js +0 -174
- package/dist/cli/solvoid-scan.js.map +0 -1
- package/dist/cli/test-forensics.d.ts +0 -2
- package/dist/cli/test-forensics.d.ts.map +0 -1
- package/dist/cli/test-forensics.js +0 -90
- package/dist/cli/test-forensics.js.map +0 -1
- package/dist/cli/test-scenarios.d.ts +0 -2
- package/dist/cli/test-scenarios.d.ts.map +0 -1
- package/dist/cli/test-scenarios.js +0 -96
- package/dist/cli/test-scenarios.js.map +0 -1
- package/dist/examples/enterprise-demo.js +0 -65
- package/dist/sdk/client.d.ts +0 -77
- package/dist/sdk/client.d.ts.map +0 -1
- package/dist/sdk/client.js +0 -180
- package/dist/sdk/client.js.map +0 -1
- package/dist/sdk/compliance/identity.d.ts +0 -34
- package/dist/sdk/compliance/identity.d.ts.map +0 -1
- package/dist/sdk/compliance/identity.js +0 -55
- package/dist/sdk/compliance/identity.js.map +0 -1
- package/dist/sdk/compliance/threat-model.d.ts +0 -14
- package/dist/sdk/compliance/threat-model.d.ts.map +0 -1
- package/dist/sdk/compliance/threat-model.js +0 -101
- package/dist/sdk/compliance/threat-model.js.map +0 -1
- package/dist/sdk/forensics/mev.js +0 -50
- package/dist/sdk/forensics/order-flow.d.ts +0 -20
- package/dist/sdk/forensics/order-flow.d.ts.map +0 -1
- package/dist/sdk/forensics/order-flow.js +0 -104
- package/dist/sdk/forensics/order-flow.js.map +0 -1
- package/dist/sdk/forensics/simulation.d.ts +0 -14
- package/dist/sdk/forensics/simulation.d.ts.map +0 -1
- package/dist/sdk/forensics/simulation.js +0 -45
- package/dist/sdk/forensics/simulation.js.map +0 -1
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/network/shadow-rpc.d.ts +0 -18
- package/dist/sdk/network/shadow-rpc.d.ts.map +0 -1
- package/dist/sdk/network/shadow-rpc.js +0 -32
- package/dist/sdk/network/shadow-rpc.js.map +0 -1
- package/dist/sdk/obfuscator.d.ts +0 -36
- package/dist/sdk/obfuscator.d.ts.map +0 -1
- package/dist/sdk/obfuscator.js +0 -77
- package/dist/sdk/obfuscator.js.map +0 -1
- package/dist/sdk/passport/manager.d.ts.map +0 -1
- package/dist/sdk/passport/manager.js +0 -107
- package/dist/sdk/passport/manager.js.map +0 -1
- package/dist/sdk/pipeline.d.ts +0 -34
- package/dist/sdk/pipeline.d.ts.map +0 -1
- package/dist/sdk/pipeline.js +0 -81
- package/dist/sdk/pipeline.js.map +0 -1
- package/dist/sdk/privacy/confidential-transfer.d.ts +0 -81
- package/dist/sdk/privacy/confidential-transfer.d.ts.map +0 -1
- package/dist/sdk/privacy/confidential-transfer.js +0 -158
- package/dist/sdk/privacy/confidential-transfer.js.map +0 -1
- package/dist/sdk/privacy/history.d.ts +0 -11
- package/dist/sdk/privacy/history.d.ts.map +0 -1
- package/dist/sdk/privacy/history.js +0 -110
- package/dist/sdk/privacy/history.js.map +0 -1
- package/dist/sdk/privacy/light-protocol.d.ts +0 -42
- package/dist/sdk/privacy/light-protocol.d.ts.map +0 -1
- package/dist/sdk/privacy/light-protocol.js +0 -83
- package/dist/sdk/privacy/light-protocol.js.map +0 -1
- package/dist/sdk/privacy/relayer.d.ts.map +0 -1
- package/dist/sdk/privacy/relayer.js.map +0 -1
- package/dist/sdk/privacy/safe-obfuscator.d.ts +0 -38
- package/dist/sdk/privacy/safe-obfuscator.d.ts.map +0 -1
- package/dist/sdk/privacy/safe-obfuscator.js +0 -101
- package/dist/sdk/privacy/safe-obfuscator.js.map +0 -1
- package/dist/sdk/privacy/shield.d.ts +0 -34
- package/dist/sdk/privacy/shield.d.ts.map +0 -1
- package/dist/sdk/privacy/shield.js +0 -174
- package/dist/sdk/privacy/shield.js.map +0 -1
- package/dist/sdk/privacy/zk.js +0 -43
- package/dist/sdk/privacy-engine.d.ts.map +0 -1
- package/dist/sdk/privacy-engine.js.map +0 -1
- package/dist/sdk/registry/idl-fetcher.d.ts +0 -17
- package/dist/sdk/registry/idl-fetcher.d.ts.map +0 -1
- package/dist/sdk/registry/idl-fetcher.js.map +0 -1
- package/dist/sdk/registry/programs.d.ts.map +0 -1
- package/dist/sdk/registry/programs.js.map +0 -1
- package/dist/sdk/rescue/analyzer.d.ts +0 -22
- package/dist/sdk/rescue/analyzer.d.ts.map +0 -1
- package/dist/sdk/rescue/analyzer.js +0 -46
- package/dist/sdk/rescue/analyzer.js.map +0 -1
- package/dist/sdk/rescue/builder.d.ts +0 -16
- package/dist/sdk/rescue/builder.d.ts.map +0 -1
- package/dist/sdk/rescue/builder.js +0 -33
- package/dist/sdk/rescue/builder.js.map +0 -1
- package/dist/sdk/semantics/decoder.d.ts.map +0 -1
- package/dist/sdk/semantics/decoder.js.map +0 -1
- package/dist/sdk/semantics/idl-registry.d.ts +0 -7
- package/dist/sdk/semantics/idl-registry.d.ts.map +0 -1
- package/dist/sdk/semantics/idl-registry.js.map +0 -1
- package/dist/sdk/semantics/types.d.ts +0 -44
- package/dist/sdk/semantics/types.d.ts.map +0 -1
- package/dist/sdk/semantics/types.js.map +0 -1
- package/dist/sdk/simulator.d.ts +0 -15
- package/dist/sdk/simulator.d.ts.map +0 -1
- package/dist/sdk/simulator.js +0 -133
- package/dist/sdk/simulator.js.map +0 -1
- package/dist/sdk/types.d.ts +0 -53
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/utils/config.d.ts.map +0 -1
- package/dist/sdk/utils/config.js.map +0 -1
- package/dist/sdk/utils/logger.d.ts.map +0 -1
- package/dist/sdk/utils/logger.js.map +0 -1
- package/dist/tests/unit/idl-registry.test.d.ts +0 -2
- package/dist/tests/unit/idl-registry.test.d.ts.map +0 -1
- package/dist/tests/unit/idl-registry.test.js +0 -35
- package/dist/tests/unit/idl-registry.test.js.map +0 -1
- package/dist/tools/exploit_demonstration.js +0 -99
- package/dist/tools/gen-tx.js +0 -29
- package/dist/tools/get-recent-tx.js +0 -18
- /package/dist/{sdk/privacy → privacy}/relayer.d.ts +0 -0
- /package/dist/{sdk/privacy → privacy}/relayer.js +0 -0
- /package/dist/{sdk/registry → registry}/programs.d.ts +0 -0
- /package/dist/{sdk/registry → registry}/programs.js +0 -0
- /package/dist/{sdk/semantics → semantics}/analyzer.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/analyzer.js +0 -0
- /package/dist/{sdk/semantics → semantics}/decoder.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/decoder.js +0 -0
- /package/dist/{sdk/semantics → semantics}/graph.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/graph.js +0 -0
- /package/dist/{sdk/semantics → semantics}/types.js +0 -0
- /package/dist/{sdk/types.js → types.js} +0 -0
- /package/dist/{sdk/utils → utils}/config.d.ts +0 -0
- /package/dist/{sdk/utils → utils}/config.js +0 -0
- /package/dist/{sdk/utils → utils}/logger.d.ts +0 -0
- /package/dist/{sdk/utils → utils}/logger.js +0 -0
package/dist/cli/solvoid-scan.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* SolVoid CLI
|
|
5
|
-
* Utility for shielding assets and auditing privacy leaks on Solana.
|
|
6
|
-
*/
|
|
7
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
-
if (k2 === undefined) k2 = k;
|
|
9
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(o, k2, desc);
|
|
14
|
-
}) : (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
o[k2] = m[k];
|
|
17
|
-
}));
|
|
18
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
-
}) : function(o, v) {
|
|
21
|
-
o["default"] = v;
|
|
22
|
-
});
|
|
23
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
-
var ownKeys = function(o) {
|
|
25
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
-
var ar = [];
|
|
27
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
-
return ar;
|
|
29
|
-
};
|
|
30
|
-
return ownKeys(o);
|
|
31
|
-
};
|
|
32
|
-
return function (mod) {
|
|
33
|
-
if (mod && mod.__esModule) return mod;
|
|
34
|
-
var result = {};
|
|
35
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
-
__setModuleDefault(result, mod);
|
|
37
|
-
return result;
|
|
38
|
-
};
|
|
39
|
-
})();
|
|
40
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.validateInput = validateInput;
|
|
42
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
43
|
-
const client_1 = require("../sdk/client");
|
|
44
|
-
const dotenv = __importStar(require("dotenv"));
|
|
45
|
-
dotenv.config();
|
|
46
|
-
async function main() {
|
|
47
|
-
const args = process.argv.slice(2);
|
|
48
|
-
const command = args[0];
|
|
49
|
-
if (!command || args.includes('--help')) {
|
|
50
|
-
console.log(`
|
|
51
|
-
SolVoid: The Digital Fortress for Solana
|
|
52
|
-
|
|
53
|
-
Commands:
|
|
54
|
-
protect <address> Scan address for leaks and view Privacy Passport
|
|
55
|
-
rescue <address> Atomic shielding of all leaked assets
|
|
56
|
-
shield <amount> Execute a private deposit (Surgical Shielding)
|
|
57
|
-
withdraw <secret> <nullifier> <recipient> Unlinkable ZK withdrawal
|
|
58
|
-
|
|
59
|
-
Flags:
|
|
60
|
-
--rpc <url> Solana RPC URL
|
|
61
|
-
--relayer <url> Relayer/Shadow RPC URL (or SHADOW_RELAYER_URL env)
|
|
62
|
-
--program <id> Override SolVoid Program ID
|
|
63
|
-
--surgical Optimize shielding for leaked assets only
|
|
64
|
-
--shadow-rpc Broadcast via encrypted relay hops
|
|
65
|
-
--mock Enable simulated/mock mode for testing
|
|
66
|
-
`);
|
|
67
|
-
process.exit(0);
|
|
68
|
-
}
|
|
69
|
-
const rpcUrl = args.includes('--rpc') ? args[args.indexOf('--rpc') + 1] : (process.env.RPC_URL || 'https://api.mainnet-beta.solana.com');
|
|
70
|
-
const programId = args.includes('--program') ? args[args.indexOf('--program') + 1] : (process.env.PROGRAM_ID || 'Fg6PaFpoGXkYsidMpSsu3SWJYEHp7rQU9YSTFNDQ4F5i');
|
|
71
|
-
const relayerUrl = args.includes('--relayer') ? args[args.indexOf('--relayer') + 1] : (process.env.SHADOW_RELAYER_URL || 'http://localhost:3000');
|
|
72
|
-
const mock = args.includes('--mock');
|
|
73
|
-
const wallet = web3_js_1.Keypair.generate();
|
|
74
|
-
const client = new client_1.SolVoidClient({ rpcUrl, programId, relayerUrl, mock }, wallet);
|
|
75
|
-
try {
|
|
76
|
-
switch (command) {
|
|
77
|
-
case 'protect': {
|
|
78
|
-
const address = new web3_js_1.PublicKey(args[1]);
|
|
79
|
-
console.log(`\nScanning ${address.toBase58()}...`);
|
|
80
|
-
const passport = await client.getPassport(address.toBase58());
|
|
81
|
-
const results = await client.protect(address);
|
|
82
|
-
console.log(`\n--- PRIVACY PASSPORT ---`);
|
|
83
|
-
const scoreColor = passport.overallScore < 50 ? '\x1b[31m' : passport.overallScore < 80 ? '\x1b[33m' : '\x1b[32m';
|
|
84
|
-
console.log(`Overall Score: ${scoreColor}${passport.overallScore}/100\x1b[0m`);
|
|
85
|
-
console.log(`Badges: ${passport.badges.map(b => b.icon + ' ' + b.name).join(', ') || 'None'}`);
|
|
86
|
-
results.forEach((res) => {
|
|
87
|
-
console.log(`\n---------------------------------------------------------`);
|
|
88
|
-
console.log(`Signature: ${res.signature}`);
|
|
89
|
-
if (res.leaks.length > 0) {
|
|
90
|
-
res.leaks.forEach((leak) => {
|
|
91
|
-
const sevColor = leak.severity === 'CRITICAL' ? '\x1b[31m' : '\x1b[33m';
|
|
92
|
-
console.log(` - [${sevColor}${leak.severity}\x1b[0m] ${leak.description}`);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
case 'rescue': {
|
|
99
|
-
const address = new web3_js_1.PublicKey(args[1]);
|
|
100
|
-
console.log(`\nExecuting rescue for: ${address.toBase58()}`);
|
|
101
|
-
const result = await client.rescue(address);
|
|
102
|
-
if (result.status === 'success') {
|
|
103
|
-
console.log(`\nRescue successful.`);
|
|
104
|
-
console.log(`Leaked assets shielded and mixed via relay.`);
|
|
105
|
-
console.log(`TX Signature: ${result.txid}`);
|
|
106
|
-
console.log(`Score improved: ${result.oldScore} -> ${result.newScore}`);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
console.log(`\n${result.message}`);
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
case 'shield': {
|
|
114
|
-
const amount = parseFloat(args[1]) * 1e9;
|
|
115
|
-
console.log(`Shielding ${args[1]} SOL...`);
|
|
116
|
-
const { txid, commitmentData } = await client.shield(amount);
|
|
117
|
-
console.log('TX Signature:', txid);
|
|
118
|
-
console.log('--- SAVE THESE SECRETS ---');
|
|
119
|
-
console.log('Secret:', commitmentData.secret.toString('hex'));
|
|
120
|
-
console.log('Nullifier:', commitmentData.nullifier.toString('hex'));
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
case 'withdraw': {
|
|
124
|
-
const secret = args[1];
|
|
125
|
-
const nullifier = args[2];
|
|
126
|
-
const recipient = new web3_js_1.PublicKey(args[3]);
|
|
127
|
-
let commitmentBuffers = [];
|
|
128
|
-
if (!mock) {
|
|
129
|
-
console.log(`Fetching commitments from: ${relayerUrl}...`);
|
|
130
|
-
const response = await fetch(`${relayerUrl}/commitments`);
|
|
131
|
-
const { commitments } = (await response.json());
|
|
132
|
-
commitmentBuffers = commitments.map((c) => Buffer.from(c, 'hex'));
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
console.log(`[MOCK] Skipping commitment fetch...`);
|
|
136
|
-
}
|
|
137
|
-
console.log(`Generating ZK proof and submitting withdrawal...`);
|
|
138
|
-
const result = await client.withdraw(secret, nullifier, recipient, commitmentBuffers, './withdraw.wasm', './withdraw.zkey', wallet);
|
|
139
|
-
console.log('Result:', result);
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
default:
|
|
143
|
-
console.error(`Unknown command: ${command}`);
|
|
144
|
-
process.exit(1);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
catch (e) {
|
|
148
|
-
console.error('Error:', e.message);
|
|
149
|
-
process.exit(1);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Basic input validation for signatures vs file paths.
|
|
154
|
-
*/
|
|
155
|
-
function validateInput(input) {
|
|
156
|
-
if (!input || input.trim().length === 0) {
|
|
157
|
-
throw new Error('Input cannot be empty');
|
|
158
|
-
}
|
|
159
|
-
if (input.endsWith('.json')) {
|
|
160
|
-
if (require('fs').existsSync(input)) {
|
|
161
|
-
return { type: 'file', path: input };
|
|
162
|
-
}
|
|
163
|
-
throw new Error('File not found');
|
|
164
|
-
}
|
|
165
|
-
// Base58 check for Solana signatures
|
|
166
|
-
if (/^[1-9A-HJ-NP-Za-km-z]{32,88}$/.test(input)) {
|
|
167
|
-
return { type: 'signature' };
|
|
168
|
-
}
|
|
169
|
-
throw new Error('Invalid format');
|
|
170
|
-
}
|
|
171
|
-
if (require.main === module) {
|
|
172
|
-
main();
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=solvoid-scan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"solvoid-scan.js","sourceRoot":"","sources":["../../cli/solvoid-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-forensics.d.ts","sourceRoot":"","sources":["../../cli/test-forensics.ts"],"names":[],"mappings":""}
|
|
@@ -1,90 +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 Mock Identity - using valid keys
|
|
6
|
-
// Victim = MemoV1
|
|
7
|
-
const VICTIM_PUBKEY = new web3_js_1.PublicKey("Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo");
|
|
8
|
-
const VICTIM_B58 = VICTIM_PUBKEY.toBase58();
|
|
9
|
-
// Attacker = MemoV2
|
|
10
|
-
const ATTACKER = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
|
|
11
|
-
// Program = Token Program
|
|
12
|
-
const PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
|
|
13
|
-
// PDA = Goki (Arbitrary valid key)
|
|
14
|
-
const PDA_ACCOUNT = "GokivDYuQXPZCWRkwMhdH2h91KpDQXBEmpgBgs55bnpH";
|
|
15
|
-
// Transaction that defines the "User" context
|
|
16
|
-
const tx = {
|
|
17
|
-
signatures: ["sig_forensic"],
|
|
18
|
-
message: {
|
|
19
|
-
accountKeys: [ATTACKER, VICTIM_B58, PROGRAM_ID, PDA_ACCOUNT],
|
|
20
|
-
header: {
|
|
21
|
-
numRequiredSignatures: 2, // Attacker is likely FeePayer here contextually but let's say Victim signed too
|
|
22
|
-
numReadonlySignedAccounts: 0,
|
|
23
|
-
numReadonlyUnsignedAccounts: 1
|
|
24
|
-
},
|
|
25
|
-
instructions: [
|
|
26
|
-
{ programIdIndex: 2, accounts: [1, 3], data: "AQ==" } // Interact with Program, passing Victim(1) and PDA(3)
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
// Construct Malicious State Data
|
|
31
|
-
// [8 bytes discriminator] + [32 bytes innocent] + [32 bytes VICTIM KEY] + [End]
|
|
32
|
-
const innocentBytes = Buffer.alloc(32).fill(0xAA);
|
|
33
|
-
const victimBytes = VICTIM_PUBKEY.toBuffer();
|
|
34
|
-
const maliciousState = Buffer.concat([
|
|
35
|
-
Buffer.from("12345678", "hex"), // Discriminator
|
|
36
|
-
innocentBytes,
|
|
37
|
-
victimBytes, // <--- THE LEAK
|
|
38
|
-
Buffer.from("DEADBEEF", "hex")
|
|
39
|
-
]);
|
|
40
|
-
const events = {
|
|
41
|
-
signature: "sig_forensic",
|
|
42
|
-
accountUpdates: [
|
|
43
|
-
{
|
|
44
|
-
pubkey: PDA_ACCOUNT,
|
|
45
|
-
owner: PROGRAM_ID,
|
|
46
|
-
lamports: 1000000,
|
|
47
|
-
data: maliciousState.toString('base64'),
|
|
48
|
-
executable: false,
|
|
49
|
-
rentEpoch: 0,
|
|
50
|
-
writeVersion: 1
|
|
51
|
-
},
|
|
52
|
-
// Also include a "Safe" update (User updating their own account)
|
|
53
|
-
{
|
|
54
|
-
pubkey: VICTIM_B58, // Updating self
|
|
55
|
-
owner: "11111111111111111111111111111111", // System Owned usually
|
|
56
|
-
lamports: 900000,
|
|
57
|
-
data: victimBytes.toString('base64'), // Contains own key obviously
|
|
58
|
-
executable: false,
|
|
59
|
-
rentEpoch: 0,
|
|
60
|
-
writeVersion: 2
|
|
61
|
-
}
|
|
62
|
-
]
|
|
63
|
-
};
|
|
64
|
-
function runForensicTest() {
|
|
65
|
-
console.log("--- Running Forensic Analysis (Phase 4) ---");
|
|
66
|
-
const engine = new privacy_engine_1.PrivacyEngine();
|
|
67
|
-
// 1. Analyze
|
|
68
|
-
const leaks = engine.analyzeGeyserEvents(tx, events);
|
|
69
|
-
// 2. Report
|
|
70
|
-
if (leaks.length > 0) {
|
|
71
|
-
console.log(`✅ FOUND ${leaks.length} LEAKS (Expected 1 Critical State Leak):`);
|
|
72
|
-
leaks.forEach((l) => {
|
|
73
|
-
console.log(` [${l.type.toUpperCase()}] Severity: ${l.severity || "Medium"}`);
|
|
74
|
-
console.log(` Scope: ${l.scope}`);
|
|
75
|
-
console.log(` Desc: ${l.description}`);
|
|
76
|
-
if (l.type === 'state-leak' && l.scope.includes(PDA_ACCOUNT)) {
|
|
77
|
-
console.log(" -> VERIFIED: Successfully detected binary leak in PDA.");
|
|
78
|
-
}
|
|
79
|
-
if (l.scope.includes(VICTIM_B58)) {
|
|
80
|
-
console.log(" -> CHECK: Did we flag the user's own account? (Should NOT happen).");
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
console.log("❌ FAILED: No leaks detected in forensic scan.");
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
runForensicTest();
|
|
90
|
-
//# sourceMappingURL=test-forensics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-forensics.js","sourceRoot":"","sources":["../../cli/test-forensics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-scenarios.d.ts","sourceRoot":"","sources":["../../cli/test-scenarios.ts"],"names":[],"mappings":""}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const privacy_engine_1 = require("../sdk/privacy-engine");
|
|
4
|
-
const MEMO_V1 = "Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo";
|
|
5
|
-
const MEMO_V2 = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
|
|
6
|
-
const SQUADS_ID = "SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu";
|
|
7
|
-
const SYSTEM_PROGRAM = "11111111111111111111111111111111";
|
|
8
|
-
const PROXY_PROGRAM = "Proxy11111111111111111111111111111111111111";
|
|
9
|
-
const VICTIM = "VictimUserAddress11111111111111111111111111";
|
|
10
|
-
const ATTACKER = "AttackerAddress111111111111111111111111111";
|
|
11
|
-
function logTest(name, tx) {
|
|
12
|
-
console.log(`\n--- Running Test: ${name} ---`);
|
|
13
|
-
const engine = new privacy_engine_1.PrivacyEngine();
|
|
14
|
-
const leaks = engine.analyzeTransaction(tx);
|
|
15
|
-
if (leaks.length > 0) {
|
|
16
|
-
console.log(`✅ DETECTED ${leaks.length} LEAKS:`);
|
|
17
|
-
leaks.forEach((l) => console.log(` [${l.type}] ${l.scope} \n Description: ${l.description}`));
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
console.log("❌ FAILED: No leaks detected!");
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
// Test 1: Nested Memo via CPI
|
|
24
|
-
const test1 = {
|
|
25
|
-
signatures: ["sig1"],
|
|
26
|
-
message: {
|
|
27
|
-
accountKeys: [ATTACKER, VICTIM, SYSTEM_PROGRAM, PROXY_PROGRAM, MEMO_V2],
|
|
28
|
-
header: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 3 },
|
|
29
|
-
instructions: [
|
|
30
|
-
{ programIdIndex: 2, accounts: [0, 1], data: "" }, // System Transfer
|
|
31
|
-
{ programIdIndex: 3, accounts: [1], data: "AQ==" } // Proxy Call
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
|
-
meta: {
|
|
35
|
-
innerInstructions: [
|
|
36
|
-
{
|
|
37
|
-
index: 1, // Inside Proxy Call
|
|
38
|
-
instructions: [
|
|
39
|
-
{ programIdIndex: 4, accounts: [], data: Buffer.from("Secret Data").toString('base64') } // Call Memo v2
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
// Test 2: Memo v1 Evasion
|
|
46
|
-
const test2 = {
|
|
47
|
-
signatures: ["sig2"],
|
|
48
|
-
message: {
|
|
49
|
-
accountKeys: [ATTACKER, MEMO_V1],
|
|
50
|
-
header: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 1 },
|
|
51
|
-
instructions: [
|
|
52
|
-
{ programIdIndex: 1, accounts: [], data: Buffer.from("Secret V1 Data").toString('base64') }
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
// Test 3: Double-Nested CPI
|
|
57
|
-
const test3 = {
|
|
58
|
-
signatures: ["sig3"],
|
|
59
|
-
message: {
|
|
60
|
-
accountKeys: [ATTACKER, PROXY_PROGRAM, "IntermediateProg...", MEMO_V2],
|
|
61
|
-
header: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 3 },
|
|
62
|
-
instructions: [
|
|
63
|
-
{ programIdIndex: 1, accounts: [], data: "" } // Call Proxy
|
|
64
|
-
]
|
|
65
|
-
},
|
|
66
|
-
meta: {
|
|
67
|
-
innerInstructions: [
|
|
68
|
-
{
|
|
69
|
-
index: 0, // Inside Proxy
|
|
70
|
-
instructions: [
|
|
71
|
-
{ programIdIndex: 2, accounts: [], data: "" }, // Proxy Calls Intermediate
|
|
72
|
-
{ programIdIndex: 3, accounts: [], data: Buffer.from("Deep Secret").toString('base64') } // Intermediate Calls Memo
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
// Test 4: Account Abstraction (Data Leak)
|
|
79
|
-
// Fee Payer = Squads (Index 0)
|
|
80
|
-
// Real User = Victim (Index 1) -> Signer
|
|
81
|
-
const test4 = {
|
|
82
|
-
signatures: ["sig4"],
|
|
83
|
-
message: {
|
|
84
|
-
accountKeys: [SQUADS_ID, VICTIM, MEMO_V2],
|
|
85
|
-
header: { numRequiredSignatures: 2, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 1 },
|
|
86
|
-
instructions: [
|
|
87
|
-
// Instruction: Memo program with data that includes VICTIM address
|
|
88
|
-
{ programIdIndex: 2, accounts: [], data: Buffer.from(`User Metadata: ${VICTIM}`).toString('base64') }
|
|
89
|
-
]
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
logTest("1. Nested Memo via CPI", test1);
|
|
93
|
-
logTest("2. Memo v1 Evasion", test2);
|
|
94
|
-
logTest("3. Double-Nested CPI", test3);
|
|
95
|
-
logTest("4. Account Abstraction (Data Leak)", test4);
|
|
96
|
-
//# sourceMappingURL=test-scenarios.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-scenarios.js","sourceRoot":"","sources":["../../cli/test-scenarios.ts"],"names":[],"mappings":";;AAAA,0DAAsD;AAGtD,MAAM,OAAO,GAAG,6CAA6C,CAAC;AAC9D,MAAM,OAAO,GAAG,6CAA6C,CAAC;AAC9D,MAAM,SAAS,GAAG,6CAA6C,CAAC;AAChE,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAC1D,MAAM,aAAa,GAAG,6CAA6C,CAAC;AAEpE,MAAM,MAAM,GAAG,6CAA6C,CAAC;AAC7D,MAAM,QAAQ,GAAG,4CAA4C,CAAC;AAE9D,SAAS,OAAO,CAAC,IAAY,EAAE,EAAmB;IAC9C,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,8BAAa,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAE5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,sBAAsB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5G,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAChD,CAAC;AACL,CAAC;AAED,8BAA8B;AAC9B,MAAM,KAAK,GAAoB;IAC3B,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE;QACL,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,CAAC;QACvE,MAAM,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,EAAE;QAClG,YAAY,EAAE;YACV,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,kBAAkB;YACrE,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,aAAa;SACnE;KACJ;IACD,IAAI,EAAE;QACF,iBAAiB,EAAE;YACf;gBACI,KAAK,EAAE,CAAC,EAAE,oBAAoB;gBAC9B,YAAY,EAAE;oBACV,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe;iBAC3G;aACJ;SACJ;KACJ;CACJ,CAAC;AAEF,0BAA0B;AAC1B,MAAM,KAAK,GAAoB;IAC3B,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE;QACL,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QAChC,MAAM,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,EAAE;QAClG,YAAY,EAAE;YACV,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;SAC9F;KACJ;CACJ,CAAC;AAEF,4BAA4B;AAC5B,MAAM,KAAK,GAAoB;IAC3B,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE;QACL,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,CAAC;QACtE,MAAM,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,EAAE;QAClG,YAAY,EAAE;YACV,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,aAAa;SAC9D;KACJ;IACD,IAAI,EAAE;QACF,iBAAiB,EAAE;YACf;gBACI,KAAK,EAAE,CAAC,EAAE,eAAe;gBACzB,YAAY,EAAE;oBACV,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,2BAA2B;oBAC1E,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,0BAA0B;iBACtH;aACJ;SACJ;KACJ;CACJ,CAAC;AAEF,0CAA0C;AAC1C,+BAA+B;AAC/B,yCAAyC;AACzC,MAAM,KAAK,GAAoB;IAC3B,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE;QACL,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;QACzC,MAAM,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,2BAA2B,EAAE,CAAC,EAAE;QAClG,YAAY,EAAE;YACV,mEAAmE;YACnE,EAAE,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;SACxG;KACJ;CACJ,CAAC;AAEF,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;AACzC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AACrC,OAAO,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;AACvC,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const client_1 = require("../sdk/client"); // Adjust path
|
|
4
|
-
// Mock Config
|
|
5
|
-
const client = new client_1.PrivacyZeroClient({
|
|
6
|
-
rpcUrl: "https://api.mainnet-beta.solana.com", // Dummy
|
|
7
|
-
modules: {
|
|
8
|
-
semantic: true, // We want to test this
|
|
9
|
-
mev: true
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
// Mock Transaction: A User (FeePayer) calling "Super Swap"
|
|
13
|
-
// User Wallet: 5ZwJ... (Mock) -> Index 0
|
|
14
|
-
const USER_WALLET = "5ZwJqpwa5u4...UserWallet";
|
|
15
|
-
const DEFI_PROGRAM = "DeFi111111111111111111111111111111111111111"; // Matches Mock Registry
|
|
16
|
-
// Instruction Data for "swap"
|
|
17
|
-
// Discriminator: [100, 100, 100, 100, 100, 100, 100, 100]
|
|
18
|
-
// Arg1 (amount_in u64): 5000 (LE) -> 88 13 00 00 00 00 00 00
|
|
19
|
-
// Arg2 (min_out u64): 0 -> 00 00 00 00 00 00 00 00
|
|
20
|
-
// Total: Disc + 16 bytes.
|
|
21
|
-
const disc = Buffer.alloc(8, 100);
|
|
22
|
-
const arg1 = Buffer.alloc(8);
|
|
23
|
-
arg1.writeBigUInt64LE(5000n);
|
|
24
|
-
const arg2 = Buffer.alloc(8);
|
|
25
|
-
const data = Buffer.concat([disc, arg1, arg2]);
|
|
26
|
-
const transaction = {
|
|
27
|
-
message: {
|
|
28
|
-
header: {
|
|
29
|
-
numRequiredSignatures: 1,
|
|
30
|
-
numReadonlySignedAccounts: 0,
|
|
31
|
-
numReadonlyUnsignedAccounts: 3
|
|
32
|
-
},
|
|
33
|
-
accountKeys: [
|
|
34
|
-
USER_WALLET, // 0: Signer/Payer
|
|
35
|
-
"PoolSourceAdd", // 1: Writable
|
|
36
|
-
"PoolDestAdd", // 2: Writable
|
|
37
|
-
"UserDestAdd", // 3: Writable
|
|
38
|
-
DEFI_PROGRAM // 4: Program
|
|
39
|
-
],
|
|
40
|
-
instructions: [
|
|
41
|
-
{
|
|
42
|
-
programIdIndex: 4, // DeFi Program
|
|
43
|
-
accounts: [0, 0, 1, 2, 3], // 0 is authority. 0 is also user_source.
|
|
44
|
-
data: data.toString('base64')
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
signatures: ["sig1"]
|
|
49
|
-
};
|
|
50
|
-
async function runTest() {
|
|
51
|
-
console.log("Starting Enterprise Scan...");
|
|
52
|
-
const report = await client.scan(transaction);
|
|
53
|
-
console.log("--- GOVERNANCE REPORT ---");
|
|
54
|
-
console.log("Status:", report.status);
|
|
55
|
-
console.log("Score:", report.privacyScore);
|
|
56
|
-
console.log("\n--- UNACCEPTED LIABILITIES ---");
|
|
57
|
-
report.unacceptedLiabilities.forEach(l => {
|
|
58
|
-
console.log(`[${l.leak.severity}] ${l.leak.type}: ${l.leak.description}`);
|
|
59
|
-
console.log(`Recommendation: ${l.leak.remediation}`);
|
|
60
|
-
if (l.leak.context)
|
|
61
|
-
console.log("Context:", l.leak.context);
|
|
62
|
-
console.log("-");
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
runTest();
|
package/dist/sdk/client.d.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { PublicKey } from '@solana/web3.js';
|
|
2
|
-
export interface SolVoidConfig {
|
|
3
|
-
rpcUrl: string;
|
|
4
|
-
programId: string;
|
|
5
|
-
relayerUrl?: string;
|
|
6
|
-
mock?: boolean;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* SolVoidClient
|
|
10
|
-
* High-level orchestration for scanning, shielding, and ZK-withdrawals.
|
|
11
|
-
*/
|
|
12
|
-
export declare class SolVoidClient {
|
|
13
|
-
private pipeline;
|
|
14
|
-
private passport;
|
|
15
|
-
private shadow;
|
|
16
|
-
private connection;
|
|
17
|
-
private protocolShield;
|
|
18
|
-
private config;
|
|
19
|
-
constructor(config: SolVoidConfig, wallet: any);
|
|
20
|
-
/**
|
|
21
|
-
* Scans an address for privacy leaks and prepares remediation shielding.
|
|
22
|
-
*/
|
|
23
|
-
protect(address: PublicKey): Promise<any>;
|
|
24
|
-
/**
|
|
25
|
-
* Retrieve local scoring history and earned badges for a wallet.
|
|
26
|
-
*/
|
|
27
|
-
getPassport(address: string): Promise<import("./passport/manager").PrivacyPassport>;
|
|
28
|
-
/**
|
|
29
|
-
* Automatic scan and atomic shield for all tainted assets.
|
|
30
|
-
*/
|
|
31
|
-
rescue(address: PublicKey): Promise<{
|
|
32
|
-
status: string;
|
|
33
|
-
txid: string;
|
|
34
|
-
leakedAssets: {
|
|
35
|
-
mint: string;
|
|
36
|
-
amount: number;
|
|
37
|
-
}[];
|
|
38
|
-
oldScore: number;
|
|
39
|
-
newScore: number;
|
|
40
|
-
message?: undefined;
|
|
41
|
-
} | {
|
|
42
|
-
status: string;
|
|
43
|
-
message: string;
|
|
44
|
-
txid?: undefined;
|
|
45
|
-
leakedAssets?: undefined;
|
|
46
|
-
oldScore?: undefined;
|
|
47
|
-
newScore?: undefined;
|
|
48
|
-
} | {
|
|
49
|
-
status: string;
|
|
50
|
-
txid: string;
|
|
51
|
-
leakedAssets: import("./rescue/analyzer").LeakedAsset[];
|
|
52
|
-
oldScore: any;
|
|
53
|
-
newScore: number;
|
|
54
|
-
message?: undefined;
|
|
55
|
-
}>;
|
|
56
|
-
/**
|
|
57
|
-
* Directly shields an amount of SOL.
|
|
58
|
-
*/
|
|
59
|
-
shield(_amount: number): Promise<{
|
|
60
|
-
txid: string;
|
|
61
|
-
commitmentData: {
|
|
62
|
-
secret: NonSharedBuffer;
|
|
63
|
-
nullifier: NonSharedBuffer;
|
|
64
|
-
commitment: NonSharedBuffer;
|
|
65
|
-
nullifierHash: NonSharedBuffer;
|
|
66
|
-
commitmentHex: string;
|
|
67
|
-
};
|
|
68
|
-
}>;
|
|
69
|
-
/**
|
|
70
|
-
* End-to-end withdrawal: Merkle proof -> ZK-proof -> On-chain broadcast.
|
|
71
|
-
*/
|
|
72
|
-
withdraw(secretHex: string, nullifierHex: string, recipient: PublicKey, allCommitments: Buffer[], wasmPath: string, zkeyPath: string, relayerSigner: any, fee?: number): Promise<string | {
|
|
73
|
-
status: string;
|
|
74
|
-
signature: string;
|
|
75
|
-
}>;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=client.d.ts.map
|
package/dist/sdk/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../sdk/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAUxD,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAgB;IAEtC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG;IA0B9C;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,SAAS;IA6BvC;;OAEG;IACU,WAAW,CAAC,OAAO,EAAE,MAAM;IAIxC;;OAEG;IACU,MAAM,CAAC,OAAO,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;IAkCtC;;OAEG;IACU,MAAM,CAAC,OAAO,EAAE,MAAM;;;;;;;;;;IASnC;;OAEG;IACU,QAAQ,CACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,GAAG,EAClB,GAAG,GAAE,MAAU;;;;CAgCtB"}
|