@tangram-mover/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +349 -0
  2. package/dist/src/analyzer/analyzer.d.ts +35 -0
  3. package/dist/src/analyzer/analyzer.d.ts.map +1 -0
  4. package/dist/src/analyzer/analyzer.js +74 -0
  5. package/dist/src/analyzer/analyzer.js.map +1 -0
  6. package/dist/src/analyzer/index.d.ts +7 -0
  7. package/dist/src/analyzer/index.d.ts.map +1 -0
  8. package/dist/src/analyzer/index.js +25 -0
  9. package/dist/src/analyzer/index.js.map +1 -0
  10. package/dist/src/analyzer/invariants.d.ts +25 -0
  11. package/dist/src/analyzer/invariants.d.ts.map +1 -0
  12. package/dist/src/analyzer/invariants.js +159 -0
  13. package/dist/src/analyzer/invariants.js.map +1 -0
  14. package/dist/src/analyzer/types.d.ts +63 -0
  15. package/dist/src/analyzer/types.d.ts.map +1 -0
  16. package/dist/src/analyzer/types.js +21 -0
  17. package/dist/src/analyzer/types.js.map +1 -0
  18. package/dist/src/index.d.ts +14 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +42 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/tangram-mover.d.ts +95 -0
  23. package/dist/src/tangram-mover.d.ts.map +1 -0
  24. package/dist/src/tangram-mover.js +254 -0
  25. package/dist/src/tangram-mover.js.map +1 -0
  26. package/dist/src/tracer/index.d.ts +6 -0
  27. package/dist/src/tracer/index.d.ts.map +1 -0
  28. package/dist/src/tracer/index.js +24 -0
  29. package/dist/src/tracer/index.js.map +1 -0
  30. package/dist/src/tracer/tracer.d.ts +26 -0
  31. package/dist/src/tracer/tracer.d.ts.map +1 -0
  32. package/dist/src/tracer/tracer.js +123 -0
  33. package/dist/src/tracer/tracer.js.map +1 -0
  34. package/dist/src/tracer/types.d.ts +110 -0
  35. package/dist/src/tracer/types.d.ts.map +1 -0
  36. package/dist/src/tracer/types.js +7 -0
  37. package/dist/src/tracer/types.js.map +1 -0
  38. package/dist/src/types/index.d.ts +44 -0
  39. package/dist/src/types/index.d.ts.map +1 -0
  40. package/dist/src/types/index.js +6 -0
  41. package/dist/src/types/index.js.map +1 -0
  42. package/dist/src/utils/parsers.d.ts +10 -0
  43. package/dist/src/utils/parsers.d.ts.map +1 -0
  44. package/dist/src/utils/parsers.js +120 -0
  45. package/dist/src/utils/parsers.js.map +1 -0
  46. package/dist/src/utils/rpc-client.d.ts +32 -0
  47. package/dist/src/utils/rpc-client.d.ts.map +1 -0
  48. package/dist/src/utils/rpc-client.js +92 -0
  49. package/dist/src/utils/rpc-client.js.map +1 -0
  50. package/dist/tests/analyzer.test.d.ts +5 -0
  51. package/dist/tests/analyzer.test.d.ts.map +1 -0
  52. package/dist/tests/analyzer.test.js +128 -0
  53. package/dist/tests/analyzer.test.js.map +1 -0
  54. package/dist/tests/integration.test.d.ts +6 -0
  55. package/dist/tests/integration.test.d.ts.map +1 -0
  56. package/dist/tests/integration.test.js +49 -0
  57. package/dist/tests/integration.test.js.map +1 -0
  58. package/dist/tests/tracer.test.d.ts +5 -0
  59. package/dist/tests/tracer.test.d.ts.map +1 -0
  60. package/dist/tests/tracer.test.js +197 -0
  61. package/dist/tests/tracer.test.js.map +1 -0
  62. package/package.json +44 -0
package/README.md ADDED
@@ -0,0 +1,349 @@
1
+ # Tangram Mover TypeScript SDK
2
+
3
+ TypeScript SDK for **Tangram Mover** - A comprehensive transaction trace analyzer for Sui Move protocols. Detect smart contract invariant violations, trace transactions, and execute transactions on the Sui network.
4
+
5
+ ## Features
6
+
7
+ ✅ **Transaction Tracing** - Fetch and parse complete transaction traces including PTB commands, balance changes, object changes, and events
8
+
9
+ ✅ **Invariant Detection** - Detect common security violations:
10
+ - Token inflation/deflation bugs
11
+ - Access control violations
12
+ - Ownership transfer anomalies
13
+ - Balance consistency issues
14
+
15
+ ✅ **Transaction Execution** - Execute transactions using [sui-kit](https://github.com/scallop-io/sui-kit):
16
+ - Transfer SUI and custom coins
17
+ - Call Move functions
18
+ - Transfer objects
19
+ - HD wallet multi-account support
20
+
21
+ ✅ **Batch Processing** - Process multiple transactions efficiently with rate limiting
22
+
23
+ ## Installation
24
+
25
+ ```bash
26
+ npm install @tangram-mover/sdk @scallop-io/sui-kit
27
+ ```
28
+
29
+ ## Quick Start
30
+
31
+ ### Initialize the SDK
32
+
33
+ ```typescript
34
+ import { TangramMover } from '@tangram-mover/sdk';
35
+
36
+ // Initialize with secret key
37
+ const mover = new TangramMover({
38
+ secretKey: 'your-secret-key',
39
+ networkType: 'testnet', // 'mainnet' | 'testnet' | 'devnet'
40
+ });
41
+
42
+ // Or initialize with mnemonics
43
+ const mover = new TangramMover({
44
+ mnemonics: 'word1 word2 ... word12',
45
+ networkType: 'testnet',
46
+ });
47
+
48
+ // Or create a new HD wallet
49
+ const mover = new TangramMover({
50
+ networkType: 'testnet',
51
+ });
52
+ ```
53
+
54
+ ### Trace a Transaction
55
+
56
+ ```typescript
57
+ // Fetch and parse transaction trace
58
+ const trace = await mover.traceTransaction('transaction-digest-here');
59
+
60
+ console.log('Transaction:', trace.digest);
61
+ console.log('Sender:', trace.sender);
62
+ console.log('Status:', trace.status);
63
+ console.log('Balance Changes:', trace.balance_changes);
64
+ console.log('PTB Commands:', trace.ptb_commands);
65
+ ```
66
+
67
+ ### Analyze for Invariant Violations
68
+
69
+ ```typescript
70
+ // Analyze a single transaction
71
+ const analysis = await mover.analyzeTransaction('transaction-digest-here');
72
+
73
+ console.log('Status:', analysis.status); // 'safe' | 'violations_detected'
74
+ console.log('Violations:', analysis.summary.violations);
75
+ console.log('Critical Violations:', analysis.summary.critical_violations);
76
+
77
+ // Check individual invariant results
78
+ analysis.invariants.forEach(inv => {
79
+ if (inv.violated) {
80
+ console.log(`⚠️ ${inv.name}: ${inv.message}`);
81
+ }
82
+ });
83
+ ```
84
+
85
+ ### Trace and Analyze in One Call
86
+
87
+ ```typescript
88
+ // Get both trace data and analysis
89
+ const result = await mover.traceAndAnalyze('transaction-digest-here');
90
+
91
+ console.log('Trace:', result.trace);
92
+ console.log('Analysis:', result.analysis);
93
+ ```
94
+
95
+ ### Execute Transactions
96
+
97
+ ```typescript
98
+ // Transfer SUI
99
+ const result = await mover.transferSui('0xrecipient-address', 1000000000); // 1 SUI
100
+ console.log('Transaction Digest:', result.digest);
101
+
102
+ // Transfer custom coin
103
+ const coinResult = await mover.transferCoin(
104
+ '0xrecipient-address',
105
+ 1000000,
106
+ '0xpackage::module::CoinType'
107
+ );
108
+
109
+ // Call Move function
110
+ const moveResult = await mover.moveCall(
111
+ '0xpackage::module::function',
112
+ [arg1, arg2],
113
+ ['TypeArg1']
114
+ );
115
+ ```
116
+
117
+ ### Batch Operations
118
+
119
+ ```typescript
120
+ // Trace multiple transactions
121
+ const traces = await mover.traceTransactions([
122
+ 'digest1',
123
+ 'digest2',
124
+ 'digest3',
125
+ ]);
126
+
127
+ // Analyze multiple transactions
128
+ const analyses = await mover.analyzeTransactions([
129
+ 'digest1',
130
+ 'digest2',
131
+ 'digest3',
132
+ ]);
133
+ ```
134
+
135
+ ### HD Wallet Multi-Accounts
136
+
137
+ ```typescript
138
+ // Get address for different account indices
139
+ const addr0 = mover.getAddress({ accountIndex: 0 });
140
+ const addr1 = mover.getAddress({ accountIndex: 1 });
141
+
142
+ // Execute transaction from specific account
143
+ await mover.transferSui('0xrecipient', 1000000, { accountIndex: 1 });
144
+ ```
145
+
146
+ ## API Reference
147
+
148
+ ### TangramMover
149
+
150
+ Main SDK class that provides all functionality.
151
+
152
+ #### Constructor Options
153
+
154
+ ```typescript
155
+ interface TangramMoverOptions {
156
+ secretKey?: string; // Base64, hex, or legacy format key
157
+ mnemonics?: string; // 12 or 24 word mnemonic phrase
158
+ networkType?: NetworkType; // 'mainnet' | 'testnet' | 'devnet' | 'localnet'
159
+ fullnodeUrls?: string[]; // Custom fullnode URLs
160
+ faucetUrl?: string; // Custom faucet URL
161
+ accountIndex?: number; // HD wallet account index (default: 0)
162
+ rateLimitMs?: number; // Rate limit between RPC calls (default: 1000)
163
+ }
164
+ ```
165
+
166
+ #### Methods
167
+
168
+ **Transaction Tracing**
169
+ - `traceTransaction(digest: string): Promise<TraceData>`
170
+ - `traceTransactions(digests: string[]): Promise<TraceData[]>`
171
+
172
+ **Invariant Analysis**
173
+ - `analyzeTransaction(digest: string): Promise<AnalysisResult>`
174
+ - `analyzeTransactions(digests: string[]): Promise<AnalysisResult[]>`
175
+ - `traceAndAnalyze(digest: string): Promise<TraceAndAnalysisResult>`
176
+
177
+ **Transaction Execution**
178
+ - `transferSui(recipient: string, amount: number, options?: { accountIndex?: number }): Promise<TransactionResult>`
179
+ - `transferSuiToMany(recipients: string[], amounts: number[], options?: { accountIndex?: number }): Promise<TransactionResult>`
180
+ - `transferCoin(recipient: string, amount: number, coinType: string, options?: { accountIndex?: number }): Promise<TransactionResult>`
181
+ - `transferCoinToMany(recipients: string[], amounts: number[], coinType: string, options?: { accountIndex?: number }): Promise<TransactionResult>`
182
+ - `moveCall(target: string, arguments: any[], typeArguments?: string[], options?: { accountIndex?: number }): Promise<TransactionResult>`
183
+ - `transferObjects(objectIds: string[], recipient: string, options?: { accountIndex?: number }): Promise<TransactionResult>`
184
+
185
+ **Utilities**
186
+ - `getCurrentAddress(): string`
187
+ - `getAddress(options?: { accountIndex?: number }): string`
188
+ - `getBalance(coinType?: string, options?: { accountIndex?: number }): Promise<{ totalBalance: number }>`
189
+
190
+ ### TraceData
191
+
192
+ Complete transaction trace information.
193
+
194
+ ```typescript
195
+ interface TraceData {
196
+ digest: string;
197
+ sender: string;
198
+ status: string;
199
+ gas_computation: number;
200
+ gas_storage: number;
201
+ gas_storage_rebate: number;
202
+ events: SuiEvent[];
203
+ balance_changes: BalanceChange[];
204
+ object_changes: ObjectChange[];
205
+ ptb_commands: PTBCommand[];
206
+ num_commands: number;
207
+ num_events: number;
208
+ num_balance_changes: number;
209
+ num_object_changes: number;
210
+ objects_created: number;
211
+ objects_mutated: number;
212
+ objects_deleted: number;
213
+ has_move_calls: boolean;
214
+ net_balance_change: number | string;
215
+ }
216
+ ```
217
+
218
+ ### AnalysisResult
219
+
220
+ Result of invariant analysis.
221
+
222
+ ```typescript
223
+ interface AnalysisResult {
224
+ digest: string;
225
+ timestamp: string;
226
+ status: 'safe' | 'violations_detected' | 'error';
227
+ invariants: InvariantResult[];
228
+ summary: {
229
+ total_checks: number;
230
+ violations: number;
231
+ critical_violations: number;
232
+ };
233
+ }
234
+ ```
235
+
236
+ ## Invariant Checks
237
+
238
+ The SDK includes several built-in invariant checks:
239
+
240
+ 1. **Inflation Detection** - Detects when tokens are created out of thin air (positive net balance change)
241
+ 2. **Access Control** - Basic validation of authorized operations (extendable for protocol-specific checks)
242
+ 3. **Ownership Consistency** - Validates object ownership transfers
243
+ 4. **Balance Consistency** - Ensures balance changes match object changes
244
+
245
+ ### Adding Custom Invariants
246
+
247
+ You can extend the analyzer with custom invariant checks:
248
+
249
+ ```typescript
250
+ import { Analyzer } from '@tangram-mover/sdk';
251
+ import type { TraceData } from '@tangram-mover/sdk';
252
+
253
+ const analyzer = new Analyzer();
254
+
255
+ // Add custom check
256
+ function checkCustomInvariant(traceData: TraceData): InvariantResult {
257
+ // Your custom logic here
258
+ return {
259
+ name: 'custom_check',
260
+ violated: false,
261
+ message: 'Custom check passed',
262
+ };
263
+ }
264
+
265
+ // Use in your analysis
266
+ const trace = await mover.traceTransaction('digest');
267
+ const customResult = checkCustomInvariant(trace);
268
+ ```
269
+
270
+ ## Examples
271
+
272
+ ### Monitor Protocol Transactions
273
+
274
+ ```typescript
275
+ import { TangramMover } from '@tangram-mover/sdk';
276
+
277
+ const mover = new TangramMover({ networkType: 'mainnet' });
278
+
279
+ async function monitorTransaction(digest: string) {
280
+ const result = await mover.traceAndAnalyze(digest);
281
+
282
+ if (result.analysis.status === 'violations_detected') {
283
+ console.error('🚨 INVARIANT VIOLATION DETECTED!');
284
+ console.error('Transaction:', digest);
285
+
286
+ result.analysis.invariants.forEach(inv => {
287
+ if (inv.violated) {
288
+ console.error(` - ${inv.name}: ${inv.message}`);
289
+ if (inv.severity === 'critical') {
290
+ // Send alert, pause protocol, etc.
291
+ }
292
+ }
293
+ });
294
+ } else {
295
+ console.log('✅ Transaction is safe');
296
+ }
297
+ }
298
+ ```
299
+
300
+ ### Batch Analysis
301
+
302
+ ```typescript
303
+ async function analyzeBatch(digests: string[]) {
304
+ const analyses = await mover.analyzeTransactions(digests);
305
+
306
+ const violations = analyses.filter(a => a.status === 'violations_detected');
307
+ const critical = violations.filter(a =>
308
+ a.summary.critical_violations > 0
309
+ );
310
+
311
+ console.log(`Analyzed ${digests.length} transactions`);
312
+ console.log(`Found ${violations.length} with violations`);
313
+ console.log(`Found ${critical.length} with critical violations`);
314
+ }
315
+ ```
316
+
317
+ ## Development
318
+
319
+ ### Build
320
+
321
+ ```bash
322
+ npm run build
323
+ ```
324
+
325
+ ### Test
326
+
327
+ ```bash
328
+ npm test
329
+ ```
330
+
331
+ ### Lint
332
+
333
+ ```bash
334
+ npm run lint
335
+ ```
336
+
337
+ ## Related Projects
338
+
339
+ - [Tangram Mover Rust Crawler](../crawler/) - High-performance Rust implementation for batch processing
340
+ - [Tangram Mover Python Analyzer](../analysis/) - Python-based invariant detection
341
+ - [sui-kit](https://github.com/scallop-io/sui-kit) - Sui network interaction toolkit
342
+
343
+ ## License
344
+
345
+ MIT
346
+
347
+ ## Contributing
348
+
349
+ Contributions are welcome! Please feel free to submit a Pull Request.
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Invariant analyzer for transaction traces
3
+ */
4
+ import type { TraceData } from '../tracer/types';
5
+ import type { AnalysisResult, InvariantResult } from './types';
6
+ /**
7
+ * Analyzer class for detecting invariant violations
8
+ */
9
+ export declare class Analyzer {
10
+ /**
11
+ * Analyze transaction trace and detect invariant violations
12
+ */
13
+ analyze(traceData: TraceData): Promise<AnalysisResult>;
14
+ /**
15
+ * Check inflation invariant only
16
+ */
17
+ checkInflationInvariant(traceData: TraceData): InvariantResult;
18
+ /**
19
+ * Check access control invariant only
20
+ */
21
+ checkAccessControlInvariant(traceData: TraceData): InvariantResult;
22
+ /**
23
+ * Check ownership invariant only
24
+ */
25
+ checkOwnershipInvariant(traceData: TraceData): InvariantResult;
26
+ /**
27
+ * Check balance consistency invariant only
28
+ */
29
+ checkBalanceConsistencyInvariant(traceData: TraceData): InvariantResult;
30
+ /**
31
+ * Analyze multiple transactions
32
+ */
33
+ analyzeMultiple(traceDataArray: TraceData[]): Promise<AnalysisResult[]>;
34
+ }
35
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzer/analyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAQ/D;;GAEG;AACH,qBAAa,QAAQ;IACnB;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;IAkC5D;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe;IAI9D;;OAEG;IACH,2BAA2B,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe;IAIlE;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe;IAI9D;;OAEG;IACH,gCAAgC,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe;IAIvE;;OAEG;IACG,eAAe,CAAC,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAG9E"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * Invariant analyzer for transaction traces
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Analyzer = void 0;
7
+ const invariants_1 = require("./invariants");
8
+ /**
9
+ * Analyzer class for detecting invariant violations
10
+ */
11
+ class Analyzer {
12
+ /**
13
+ * Analyze transaction trace and detect invariant violations
14
+ */
15
+ async analyze(traceData) {
16
+ const invariants = [];
17
+ // Run all invariant checks
18
+ invariants.push((0, invariants_1.checkInflationInvariant)(traceData));
19
+ invariants.push((0, invariants_1.checkAccessControlInvariant)(traceData));
20
+ invariants.push((0, invariants_1.checkOwnershipInvariant)(traceData));
21
+ invariants.push((0, invariants_1.checkBalanceConsistencyInvariant)(traceData));
22
+ // Calculate summary
23
+ const violations = invariants.filter(inv => inv.violated);
24
+ const critical_violations = violations.filter(inv => inv.severity === 'critical').length;
25
+ // Determine overall status
26
+ let status = 'safe';
27
+ if (violations.length > 0) {
28
+ status = 'violations_detected';
29
+ }
30
+ return {
31
+ digest: traceData.digest,
32
+ timestamp: new Date().toISOString(),
33
+ status,
34
+ invariants,
35
+ summary: {
36
+ total_checks: invariants.length,
37
+ violations: violations.length,
38
+ critical_violations,
39
+ },
40
+ };
41
+ }
42
+ /**
43
+ * Check inflation invariant only
44
+ */
45
+ checkInflationInvariant(traceData) {
46
+ return (0, invariants_1.checkInflationInvariant)(traceData);
47
+ }
48
+ /**
49
+ * Check access control invariant only
50
+ */
51
+ checkAccessControlInvariant(traceData) {
52
+ return (0, invariants_1.checkAccessControlInvariant)(traceData);
53
+ }
54
+ /**
55
+ * Check ownership invariant only
56
+ */
57
+ checkOwnershipInvariant(traceData) {
58
+ return (0, invariants_1.checkOwnershipInvariant)(traceData);
59
+ }
60
+ /**
61
+ * Check balance consistency invariant only
62
+ */
63
+ checkBalanceConsistencyInvariant(traceData) {
64
+ return (0, invariants_1.checkBalanceConsistencyInvariant)(traceData);
65
+ }
66
+ /**
67
+ * Analyze multiple transactions
68
+ */
69
+ async analyzeMultiple(traceDataArray) {
70
+ return Promise.all(traceDataArray.map(trace => this.analyze(trace)));
71
+ }
72
+ }
73
+ exports.Analyzer = Analyzer;
74
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/analyzer/analyzer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAIH,6CAKsB;AAEtB;;GAEG;AACH,MAAa,QAAQ;IACnB;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,SAAoB;QAChC,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,2BAA2B;QAC3B,UAAU,CAAC,IAAI,CAAC,IAAA,oCAAuB,EAAC,SAAS,CAAC,CAAC,CAAC;QACpD,UAAU,CAAC,IAAI,CAAC,IAAA,wCAA2B,EAAC,SAAS,CAAC,CAAC,CAAC;QACxD,UAAU,CAAC,IAAI,CAAC,IAAA,oCAAuB,EAAC,SAAS,CAAC,CAAC,CAAC;QACpD,UAAU,CAAC,IAAI,CAAC,IAAA,6CAAgC,EAAC,SAAS,CAAC,CAAC,CAAC;QAE7D,oBAAoB;QACpB,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,CAC3C,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,UAAU,CACnC,CAAC,MAAM,CAAC;QAET,2BAA2B;QAC3B,IAAI,MAAM,GAA6C,MAAM,CAAC;QAC9D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,qBAAqB,CAAC;QACjC,CAAC;QAED,OAAO;YACL,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;YACN,UAAU;YACV,OAAO,EAAE;gBACP,YAAY,EAAE,UAAU,CAAC,MAAM;gBAC/B,UAAU,EAAE,UAAU,CAAC,MAAM;gBAC7B,mBAAmB;aACpB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,SAAoB;QAC1C,OAAO,IAAA,oCAAuB,EAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,2BAA2B,CAAC,SAAoB;QAC9C,OAAO,IAAA,wCAA2B,EAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,SAAoB;QAC1C,OAAO,IAAA,oCAAuB,EAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,gCAAgC,CAAC,SAAoB;QACnD,OAAO,IAAA,6CAAgC,EAAC,SAAS,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,cAA2B;QAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;CACF;AAxED,4BAwEC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Analyzer module exports
3
+ */
4
+ export { Analyzer } from './analyzer';
5
+ export * from './invariants';
6
+ export * from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analyzer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * Analyzer module exports
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.Analyzer = void 0;
21
+ var analyzer_1 = require("./analyzer");
22
+ Object.defineProperty(exports, "Analyzer", { enumerable: true, get: function () { return analyzer_1.Analyzer; } });
23
+ __exportStar(require("./invariants"), exports);
24
+ __exportStar(require("./types"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzer/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6B;AAC7B,0CAAwB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Invariant detection logic
3
+ */
4
+ import type { TraceData } from '../tracer/types';
5
+ import type { InvariantResult } from './types';
6
+ /**
7
+ * Check for token inflation/deflation violations
8
+ * Invariant: Sum of balance changes should be <= 0 (excluding mints/burns)
9
+ */
10
+ export declare function checkInflationInvariant(traceData: TraceData): InvariantResult;
11
+ /**
12
+ * Check for access control violations
13
+ * This is a placeholder - actual implementation would need protocol-specific logic
14
+ */
15
+ export declare function checkAccessControlInvariant(traceData: TraceData): InvariantResult;
16
+ /**
17
+ * Check for ownership transfer anomalies
18
+ */
19
+ export declare function checkOwnershipInvariant(traceData: TraceData): InvariantResult;
20
+ /**
21
+ * Check for balance consistency
22
+ * Verify that balance changes match object changes
23
+ */
24
+ export declare function checkBalanceConsistencyInvariant(traceData: TraceData): InvariantResult;
25
+ //# sourceMappingURL=invariants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../../../src/analyzer/invariants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CAuD7E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CAqBjF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CAgD7E;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,SAAS,GAAG,eAAe,CA6BtF"}