autrace 0.0.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.
@@ -0,0 +1,450 @@
1
+ import { promises as fs } from 'fs';
2
+ import child_process from 'child_process';
3
+ import util from 'util';
4
+ const exec = util.promisify(child_process.exec);
5
+ export class AUVisualizer {
6
+ constructor(stateHistory) {
7
+ this.getUniqueNodeId = (id, stateIndex) => {
8
+ return `N${id.replace(/[^0-9]/g, '')}${stateIndex}`;
9
+ };
10
+ /*private getUniqueNodeId(id: string): string {
11
+ return `N${id.replace(/[^0-9]/g, '')}`;
12
+ }*/
13
+ this.formatLabel = (relationship) => {
14
+ return relationship?.label?.replace(/[()]/g, '') || 'Unknown';
15
+ };
16
+ this.extractOperationDetails = (operation) => {
17
+ try {
18
+ const parts = operation.split(',').map(p => p.trim());
19
+ let sequence = '', type = '';
20
+ parts.forEach(part => {
21
+ if (part.toLowerCase().includes('sequence')) {
22
+ sequence = part.split(':')[1]?.trim() || '';
23
+ }
24
+ if (part.toLowerCase().includes('type')) {
25
+ type = part.split(':')[1]?.trim() || '';
26
+ }
27
+ });
28
+ return { sequence, type };
29
+ }
30
+ catch (error) {
31
+ return { sequence: '', type: operation };
32
+ }
33
+ };
34
+ this.hasConnections = (nodeId, state) => {
35
+ // Check if node is source or target of any edge
36
+ return state.edges?.some((edge) => edge.fromNode === nodeId || edge.toNode === nodeId) || false;
37
+ };
38
+ this.generateStateSubgraph = (state, stateIndex, isFirstState) => {
39
+ let subgraph = ` subgraph State${stateIndex}\n`;
40
+ const nodeIds = new Map();
41
+ // Add nodes that have connections or are in first state
42
+ state.nodes.forEach((node, id) => {
43
+ if (isFirstState || this.hasConnections(id, state)) {
44
+ const nodeId = this.getUniqueNodeId(id, stateIndex);
45
+ nodeIds.set(id, nodeId);
46
+ const relationship = state.relationships.get(id);
47
+ const label = this.formatLabel(relationship);
48
+ const color = (node.type === 'account') ? '#lightblue' : '#purple';
49
+ subgraph += ` ${nodeId}["${label}"]\n`;
50
+ subgraph += ` style ${nodeId} fill:${color},width:300px,height:50px\n`;
51
+ }
52
+ });
53
+ // Add edges
54
+ if (Array.isArray(state.edges)) {
55
+ state.edges.forEach((edge) => {
56
+ if (edge.fromNode && edge.toNode) {
57
+ const fromId = nodeIds.get(edge.fromNode);
58
+ const toId = nodeIds.get(edge.toNode);
59
+ if (fromId && toId) {
60
+ const { sequence, type } = this.extractOperationDetails(edge.operation);
61
+ const label = sequence && type ? `${sequence}] ${type}` : '';
62
+ subgraph += ` ${fromId} -->|"${label}"| ${toId}\n`;
63
+ }
64
+ }
65
+ });
66
+ }
67
+ subgraph += ' end\n\n';
68
+ return subgraph;
69
+ };
70
+ this.generateMermaidCode = () => {
71
+ let mermaidCode = `%%{init: {
72
+ 'theme': 'base',
73
+ 'themeVariables': {
74
+ 'fontSize': '15px',
75
+ 'fontFamily': '"Helvetica Neue", Arial, sans-serif',
76
+ 'nodeSpacing': 200,
77
+ 'rankSpacing': 150,
78
+ 'labelBackground': '#ffffff',
79
+ 'fontWeight': 600,
80
+ 'wrap': true,
81
+ 'useMaxWidth': false
82
+ },
83
+ 'securityLevel': 'loose',
84
+ 'flowchart': {
85
+ 'htmlLabels': true,
86
+ 'curve': 'basis',
87
+ 'padding': 30,
88
+ 'useMaxWidth': false,
89
+ 'diagramPadding': 50
90
+ }
91
+ }}%%\n`;
92
+ mermaidCode += 'flowchart TB\n';
93
+ mermaidCode += ' %% Global styles\n';
94
+ mermaidCode += ' classDef accountNode fill:#lightblue,stroke:#333,stroke-width:2px\n';
95
+ mermaidCode += ' classDef contractNode fill:#purple,stroke:#333,stroke-width:2px\n\n';
96
+ // Generate state subgraphs
97
+ this.stateHistory.forEach((state, index) => {
98
+ if (state.nodes && state.nodes.size > 0) {
99
+ mermaidCode += this.generateStateSubgraph(state, index, index === 0);
100
+ }
101
+ });
102
+ return mermaidCode;
103
+ };
104
+ this.stateHistory = stateHistory;
105
+ this.entities = new Map();
106
+ this.processEntities();
107
+ }
108
+ getNodeStyle(node) {
109
+ switch (node.type) {
110
+ case 'account':
111
+ return 'fill:#B3E0FF,stroke:#333,stroke-width:2px';
112
+ case 'contract':
113
+ return 'fill:#DDA0DD,stroke:#333,stroke-width:2px';
114
+ default:
115
+ return 'fill:#90EE90,stroke:#333,stroke-width:2px';
116
+ }
117
+ }
118
+ formatEdgeLabel(operation) {
119
+ try {
120
+ const parts = operation.split(',').map(p => p.trim());
121
+ let sequence = '', type = '', amount = '', fee = '';
122
+ parts.forEach(part => {
123
+ if (part.toLowerCase().includes('sequence')) {
124
+ sequence = part.split(':')[1]?.trim() || '';
125
+ }
126
+ if (part.toLowerCase().includes('type')) {
127
+ type = part.split(':')[1]?.trim() || '';
128
+ }
129
+ if (part.toLowerCase().includes('amount')) {
130
+ amount = part.split(':')[1]?.trim() || '';
131
+ }
132
+ if (part.toLowerCase().includes('fee')) {
133
+ fee = part.split(':')[1]?.trim() || '';
134
+ }
135
+ });
136
+ let label = `${sequence})${type}`;
137
+ if (amount)
138
+ label += ` ${amount}`;
139
+ if (fee)
140
+ label += ` fee: ${fee}`;
141
+ return label;
142
+ }
143
+ catch (error) {
144
+ return operation;
145
+ }
146
+ }
147
+ processEntities() {
148
+ this.stateHistory.forEach(state => {
149
+ if (state.nodes) {
150
+ state.nodes.forEach((node) => {
151
+ if (!this.entities.has(node.publicKey)) {
152
+ this.entities.set(node.publicKey, {
153
+ id: node.id,
154
+ type: node.type,
155
+ name: this.extractEntityName(node.label),
156
+ operations: new Set(),
157
+ publicKey: node.publicKey,
158
+ contractType: node.contractType,
159
+ labels: new Set([node.label])
160
+ });
161
+ }
162
+ const entity = this.entities.get(node.publicKey);
163
+ entity.operations.add(this.extractOperation(node.label));
164
+ entity.labels.add(node.label);
165
+ });
166
+ }
167
+ });
168
+ }
169
+ extractEntityName(label) {
170
+ return label.split('.')[0];
171
+ }
172
+ extractOperation(label) {
173
+ return label.split('.')[1]?.replace(/[()]/g, '') || 'unknown';
174
+ }
175
+ generateEntityRegistry() {
176
+ let md = '## Entity Registry\n\n';
177
+ const groupedEntities = new Map();
178
+ this.entities.forEach(entity => {
179
+ if (!groupedEntities.has(entity.type)) {
180
+ groupedEntities.set(entity.type, []);
181
+ }
182
+ groupedEntities.get(entity.type).push(entity);
183
+ });
184
+ groupedEntities.forEach((entities, type) => {
185
+ md += `### ${type.charAt(0).toUpperCase() + type.slice(1)}s\n`;
186
+ entities.forEach(entity => {
187
+ md += `- **${entity.name}**\n`;
188
+ md += ` - Public Key: \`${entity.publicKey}\`\n`;
189
+ if (entity.contractType) {
190
+ md += ` - Contract Type: ${entity.contractType}\n`;
191
+ }
192
+ if (entity.operations.size > 0) {
193
+ md += ` - Operations: ${Array.from(entity.operations).join(', ')}\n`;
194
+ }
195
+ md += '\n';
196
+ });
197
+ });
198
+ return md;
199
+ }
200
+ processStateOperations(state) {
201
+ const operations = [];
202
+ if (state.edges) {
203
+ state.edges.forEach((edge) => {
204
+ const fromNode = state.nodes.get(edge.fromNode);
205
+ const toNode = state.nodes.get(edge.toNode);
206
+ if (fromNode && toNode) {
207
+ const operation = this.extractOperationDetails(edge.operation);
208
+ operations.push({
209
+ from: this.extractEntityName(fromNode.label),
210
+ to: this.extractEntityName(toNode.label),
211
+ action: operation.type,
212
+ fee: state.metadata?.totalFees,
213
+ status: edge.operation.includes('REJECTED') ? 'REJECTED' : 'success'
214
+ });
215
+ }
216
+ });
217
+ }
218
+ return operations;
219
+ }
220
+ generateASCIIFlow(operations) {
221
+ let flow = '';
222
+ operations.forEach((op, index) => {
223
+ // Determine the arrow type based on status
224
+ const arrow = op.status === 'REJECTED' ? '╳' : '→';
225
+ flow += `${op.from} ${arrow} ${op.to}\n`;
226
+ if (op.action) {
227
+ flow += `│ └─ Action: ${op.action}\n`;
228
+ }
229
+ if (op.fee && op.fee !== '0') {
230
+ flow += `│ └─ Fee: ${op.fee}\n`;
231
+ }
232
+ if (op.status === 'REJECTED') {
233
+ flow += `│ └─ Status: ${op.status}\n`;
234
+ }
235
+ if (op.parameters) {
236
+ flow += `│ └─ Parameters:\n`;
237
+ Object.entries(op.parameters).forEach(([key, value]) => {
238
+ flow += `│ - ${key}: ${value}\n`;
239
+ });
240
+ }
241
+ // Add separator between operations
242
+ if (index < operations.length - 1) {
243
+ flow += '│\n';
244
+ }
245
+ });
246
+ return flow;
247
+ }
248
+ generateTransactionFlow() {
249
+ let md = '## Transaction Flow\n\n';
250
+ this.stateHistory.forEach((state, index) => {
251
+ const operations = this.processStateOperations(state);
252
+ if (operations.length > 0) {
253
+ md += `### State ${index}\n`;
254
+ md += this.generateASCIIFlow(operations);
255
+ md += '\n\n';
256
+ }
257
+ });
258
+ return md;
259
+ }
260
+ generateMetadata() {
261
+ let md = '## Transaction Metadata\n\n';
262
+ this.stateHistory.forEach((state, index) => {
263
+ md += `### State ${index}\n`;
264
+ if (state.metadata) {
265
+ Object.entries(state.metadata).forEach(([key, value]) => {
266
+ md += `- ${key}: ${value}\n`;
267
+ });
268
+ }
269
+ md += '\n';
270
+ });
271
+ return md;
272
+ }
273
+ /*public generateMermaidCode(): string {
274
+ let mermaidCode = `%%{init: {
275
+ 'theme': 'base',
276
+ 'themeVariables': {
277
+ 'fontSize': '14px',
278
+ 'fontFamily': 'arial',
279
+ 'nodeSpacing': 150,
280
+ 'rankSpacing': 100
281
+ }
282
+ }}%%\n`;
283
+ mermaidCode += 'flowchart LR\n';
284
+
285
+ const processedNodes = new Set();
286
+ const edges: string[] = [];
287
+
288
+ // Process all states
289
+ this.stateHistory.forEach(state => {
290
+ // Add nodes
291
+ state.nodes.forEach((node: any, id: string) => {
292
+ if (!processedNodes.has(id)) {
293
+ const nodeId = this.getUniqueNodeId(id);
294
+ const relationship = state.relationships.get(id);
295
+ const label = this.formatLabel(relationship);
296
+ const style = this.getNodeStyle(node);
297
+
298
+ mermaidCode += ` ${nodeId}["${label}\\n${node.publicKey?.substring(0, 10)}..."]\n`;
299
+ mermaidCode += ` style ${nodeId} ${style}\n`;
300
+ processedNodes.add(id);
301
+ }
302
+ });
303
+
304
+ // Collect edges
305
+ if (Array.isArray(state.edges)) {
306
+ state.edges.forEach((edge: any) => {
307
+ const fromId = this.getUniqueNodeId(edge.fromNode);
308
+ const toId = this.getUniqueNodeId(edge.toNode);
309
+ const label = this.formatEdgeLabel(edge.operation);
310
+ edges.push(` ${fromId} -->|"${label}"| ${toId}\n`);
311
+ });
312
+ }
313
+ });
314
+
315
+ // Add all edges after nodes
316
+ edges.forEach(edge => {
317
+ mermaidCode += edge;
318
+ });
319
+
320
+ return mermaidCode;
321
+ }*/
322
+ generateMarkdown() {
323
+ let markdown = '# Account Update State History\n\n';
324
+ markdown += this.generateEntityRegistry();
325
+ markdown += this.generateTransactionFlow();
326
+ markdown += this.generateMetadata();
327
+ return markdown;
328
+ }
329
+ async openInBrowser(filePath) {
330
+ // Convert to absolute path for browser
331
+ const absolutePath = require('path').resolve(filePath);
332
+ const fileUrl = `file://${absolutePath}`;
333
+ try {
334
+ // Different commands for different operating systems
335
+ let command;
336
+ switch (process.platform) {
337
+ case 'darwin': // macOS
338
+ command = `open -a "Google Chrome" "${fileUrl}"`;
339
+ break;
340
+ case 'win32': // Windows
341
+ command = `start chrome "${fileUrl}"`;
342
+ break;
343
+ default: // Linux and others
344
+ command = `google-chrome "${fileUrl}"`;
345
+ break;
346
+ }
347
+ await exec(command);
348
+ }
349
+ catch (firstError) {
350
+ try {
351
+ // Fallback to default browser if Chrome isn't available
352
+ let fallbackCommand;
353
+ switch (process.platform) {
354
+ case 'darwin': // macOS
355
+ fallbackCommand = `open "${fileUrl}"`;
356
+ break;
357
+ case 'win32': // Windows
358
+ fallbackCommand = `start "" "${fileUrl}"`;
359
+ break;
360
+ default: // Linux and others
361
+ fallbackCommand = `xdg-open "${fileUrl}"`;
362
+ break;
363
+ }
364
+ await exec(fallbackCommand);
365
+ }
366
+ catch (error) {
367
+ console.error('Error opening SVG in browser:', error);
368
+ throw error;
369
+ }
370
+ }
371
+ }
372
+ async generateSVG(outputPath = 'transaction_flow.svg') {
373
+ try {
374
+ const mermaidCode = this.generateMermaidCode();
375
+ const tempFile = 'temp_diagram.mmd';
376
+ await fs.writeFile(tempFile, mermaidCode);
377
+ const config = {
378
+ width: 3840,
379
+ height: 2160,
380
+ backgroundColor: '#ffffff',
381
+ scale: 1.0, // Scale can be 1.0 for SVG since it's vector-based
382
+ puppeteerConfig: {
383
+ deviceScaleFactor: 1.0
384
+ }
385
+ };
386
+ // Generate SVG
387
+ const command = `mmdc -i ${tempFile} -o ${outputPath} ` +
388
+ `-w ${config.width} ` +
389
+ `-H ${config.height} ` +
390
+ `-b ${config.backgroundColor}`;
391
+ await exec(command);
392
+ // Clean up temporary file
393
+ await fs.unlink(tempFile);
394
+ console.log(`Successfully generated SVG at: ${outputPath}`);
395
+ //await this.openInBrowser(outputPath);
396
+ }
397
+ catch (error) {
398
+ console.error('Error generating SVG:', error);
399
+ throw error;
400
+ }
401
+ }
402
+ async generatePNG(outputPath = 'transaction_flow.png') {
403
+ try {
404
+ const mermaidCode = this.generateMermaidCode();
405
+ const tempFile = 'temp_diagram.mmd';
406
+ await fs.writeFile(tempFile, mermaidCode);
407
+ const config = {
408
+ width: 3840, // 4K width
409
+ height: 2160, // 4K height
410
+ backgroundColor: '#ffffff',
411
+ scale: 8.0, // Increased scale for better text quality
412
+ puppeteerConfig: {
413
+ deviceScaleFactor: 4.0,
414
+ defaultViewport: {
415
+ width: 3840,
416
+ height: 2160,
417
+ deviceScaleFactor: 4.0
418
+ }
419
+ }
420
+ };
421
+ const command = `mmdc -i ${tempFile} -o ${outputPath} ` +
422
+ `-w ${config.width} ` +
423
+ `-H ${config.height} ` +
424
+ `-b ${config.backgroundColor} ` +
425
+ `-s ${config.scale} ` +
426
+ `--puppeteerConfig '{"deviceScaleFactor": ${config.puppeteerConfig.deviceScaleFactor}, ` +
427
+ `"defaultViewport": {"width": ${config.width}, "height": ${config.height}, ` +
428
+ `"deviceScaleFactor": ${config.puppeteerConfig.deviceScaleFactor}}}'`;
429
+ await exec(command);
430
+ await fs.unlink(tempFile);
431
+ console.log(`Successfully generated PNG at: ${outputPath}`);
432
+ }
433
+ catch (error) {
434
+ console.error('Error generating PNG:', error);
435
+ throw error;
436
+ }
437
+ }
438
+ async generateMarkdownFile(outputPath = 'state_history.md') {
439
+ try {
440
+ const markdown = this.generateMarkdown();
441
+ await fs.writeFile(outputPath, markdown);
442
+ console.log(`Successfully generated Markdown at: ${outputPath}`);
443
+ }
444
+ catch (error) {
445
+ console.error('Error generating Markdown:', error);
446
+ throw error;
447
+ }
448
+ }
449
+ }
450
+ //# sourceMappingURL=Visualiser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Visualiser.js","sourceRoot":"","sources":["../../src/Visualiser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { SmartContract } from 'o1js';
2
+ import { TransactionState, ContractAnalysis } from './Interface.js';
3
+ export declare class AUTrace {
4
+ private transactionState;
5
+ private contractAnalyzer;
6
+ private contractAnalysis;
7
+ private auAnalyzer;
8
+ private transactionSnapshots;
9
+ constructor();
10
+ initializeContracts(contracts: SmartContract[]): void;
11
+ getContractAnalysis(): Map<string, ContractAnalysis>;
12
+ getContractAnalysisFor(contractName: string): ContractAnalysis | undefined;
13
+ private traverseTransaction;
14
+ private processAccountUpdate;
15
+ private extractAUMetadata;
16
+ private getTotalFeesInMina;
17
+ private determineAuthorizationType;
18
+ private extractContractType;
19
+ private determineNodeType;
20
+ private isContractAccount;
21
+ private updateBalanceState;
22
+ private buildEdgesFromRelationships;
23
+ clearTransactionState: () => void;
24
+ getTransactionState: (transaction: any) => TransactionState;
25
+ getTransactions: (...transactionStates: any[]) => void;
26
+ getStateHistory(): any[];
27
+ }