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,335 @@
1
+ import { SmartContractAnalyzer } from './ContractAnalyser.js';
2
+ import { AccountUpdateAnalyzer } from './AccountUpdateAnalyzer.js';
3
+ export class AUTrace {
4
+ constructor() {
5
+ this.transactionSnapshots = [];
6
+ this.traverseTransaction = (transaction) => {
7
+ if (!transaction)
8
+ return;
9
+ const accountUpdates = transaction.transaction.accountUpdates || [];
10
+ this.transactionState.metadata.accountUpdates = accountUpdates.length;
11
+ accountUpdates.forEach((au) => {
12
+ this.processAccountUpdate(au);
13
+ });
14
+ };
15
+ this.processAccountUpdate = (au) => {
16
+ const auMetadata = this.extractAUMetadata(au);
17
+ if (au.authorization.proof) {
18
+ this.transactionState.metadata.totalProofs++;
19
+ }
20
+ else if (au.authorization.signature) {
21
+ this.transactionState.metadata.totalSignatures++;
22
+ }
23
+ /*if (auMetadata.type === 'proof') {
24
+ this.transactionState.metadata.totalProofs++;
25
+ } else if (auMetadata.type === 'signature') {
26
+ this.transactionState.metadata.totalSignatures++;
27
+ }*/
28
+ // Calculate fees
29
+ if (au.body.balanceChange) {
30
+ const magnitude = au.body.balanceChange.magnitude.toString();
31
+ // If balance change is negative, it's a fee
32
+ if (au.body.balanceChange.isNegative()) {
33
+ // Convert to nanomina
34
+ const feesInNanomina = BigInt(magnitude);
35
+ // Convert current total from MINA to nanomina for calculation
36
+ const currentTotalNanomina = this.transactionState.metadata.totalFees === 0
37
+ ? BigInt(0)
38
+ : BigInt(this.transactionState.metadata.totalFees * 1e9);
39
+ const newTotalNanomina = currentTotalNanomina + feesInNanomina;
40
+ // Convert back to MINA and store as number
41
+ this.transactionState.metadata.totalFees = Number(newTotalNanomina) / 1e9;
42
+ }
43
+ }
44
+ if (!this.transactionState.nodes.has(auMetadata.id)) {
45
+ const nodeType = this.determineNodeType(au);
46
+ const node = {
47
+ id: auMetadata.id,
48
+ type: nodeType,
49
+ label: auMetadata.label,
50
+ publicKey: auMetadata.publicKey,
51
+ contractType: this.extractContractType(au)
52
+ };
53
+ this.transactionState.nodes.set(auMetadata.id, node);
54
+ }
55
+ this.auAnalyzer.processAccountUpdate(au);
56
+ this.updateBalanceState(auMetadata);
57
+ };
58
+ this.extractAUMetadata = (au) => {
59
+ return {
60
+ id: au.id.toString(),
61
+ label: au.label || 'Unnamed Update',
62
+ type: this.determineAuthorizationType(au),
63
+ publicKey: au.body.publicKey.toBase58(),
64
+ balanceChange: au.body.balanceChange.toString(),
65
+ methodName: au.lazyAuthorization?.methodName,
66
+ args: au.lazyAuthorization?.args
67
+ };
68
+ };
69
+ this.extractContractType = (au) => {
70
+ if (au.label) {
71
+ return au.label;
72
+ }
73
+ /*// Look for contract type patterns in the label
74
+ if (au.label.includes('FungibleTokenAdmin')) {
75
+ return 'FungibleTokenAdmin';
76
+ }
77
+ if (au.label.includes('FungibleToken')) {
78
+ return 'FungibleToken';
79
+ }
80
+ if (au.label.includes('TokenEscrow')) {
81
+ return 'TokenEscrow';
82
+ }
83
+ if (au.label.includes('ZkApp')) {
84
+ return 'SmartContract';
85
+ }*/
86
+ return undefined;
87
+ };
88
+ this.determineNodeType = (au) => {
89
+ const isContract = this.isContractAccount(au);
90
+ if (isContract) {
91
+ return 'contract';
92
+ }
93
+ return 'account';
94
+ };
95
+ this.updateBalanceState = (auMetadata) => {
96
+ const currentBalance = this.transactionState.balanceStates.get(auMetadata.id) || [0];
97
+ // Get the last known balance
98
+ const lastBalance = currentBalance[currentBalance.length - 1] ?? 0;
99
+ const balanceChange = auMetadata.balanceChange ?
100
+ BigInt(auMetadata.balanceChange) :
101
+ BigInt(0);
102
+ const newBalance = BigInt(lastBalance?.toString()) + balanceChange;
103
+ currentBalance.push(Number(newBalance));
104
+ this.transactionState.balanceStates.set(auMetadata.id, currentBalance);
105
+ };
106
+ this.clearTransactionState = () => {
107
+ this.transactionState = {
108
+ nodes: new Map(),
109
+ edges: [],
110
+ balanceStates: new Map(),
111
+ metadata: {
112
+ totalProofs: 0,
113
+ totalSignatures: 0,
114
+ totalFees: 0,
115
+ accountUpdates: 0
116
+ },
117
+ relationships: new Map()
118
+ };
119
+ };
120
+ this.getTransactionState = (transaction) => {
121
+ if (!this.transactionState) {
122
+ this.clearTransactionState();
123
+ }
124
+ else {
125
+ this.transactionState.nodes = new Map();
126
+ this.transactionState.edges = [];
127
+ this.transactionState.relationships = new Map();
128
+ }
129
+ this.traverseTransaction(transaction);
130
+ const auRelationships = this.auAnalyzer.getRelationships();
131
+ const plainRelationships = new Map();
132
+ auRelationships.forEach((rel, key) => {
133
+ const contractName = rel.method?.contract || '';
134
+ const contractAnalysis = this.contractAnalyzer.getContract(contractName);
135
+ const stateNames = contractAnalysis
136
+ ? contractAnalysis.stateFields.map(f => f.name).join(', ')
137
+ : '';
138
+ const expandedChildren = Array.isArray(rel.children) && rel.children.length > 0
139
+ ? rel.children.join(', ')
140
+ : '';
141
+ const expandedMethod = rel.method
142
+ ? `Contract: ${rel.method.contract ?? ''}, Method: ${rel.method.name ?? ''}`
143
+ : 'N/A';
144
+ const expandedStateChanges = Array.isArray(rel.stateChanges)
145
+ ? rel.stateChanges
146
+ .map(change => `Field: ${change.field ?? ''}, IsSome: ${change.value?.isSome ?? false}, Value: ${change.value?.value ?? '0'}`)
147
+ .join(' | ')
148
+ : 'No State Changes';
149
+ plainRelationships.set(key, {
150
+ ...rel,
151
+ children: expandedChildren,
152
+ method: expandedMethod,
153
+ onChainStates: stateNames,
154
+ stateChanges: expandedStateChanges
155
+ });
156
+ });
157
+ const expandedEdges = this.buildEdgesFromRelationships(auRelationships)
158
+ .map(edge => {
159
+ const operation = edge.operation;
160
+ const amountValue = (typeof operation.amount?.value === 'number' && !isNaN(operation.amount.value))
161
+ ? operation.amount.value
162
+ : 0;
163
+ const denomination = operation.amount?.denomination || 'unknown';
164
+ // Build the amount string if amount exists
165
+ const amount = operation.amount
166
+ ? `, Amount: ${amountValue} ${denomination}`
167
+ : '';
168
+ // Validate fee
169
+ const fee = (typeof operation.fee === 'number' || typeof operation.fee === 'string')
170
+ ? `, Fee: ${operation.fee}`
171
+ : '';
172
+ const flattenedOperation = `Sequence: ${operation.sequence ?? 'N/A'}, Type: ${operation.type ?? 'N/A'}, Status: ${operation.status ?? 'N/A'}${amount}${fee}`;
173
+ return {
174
+ id: edge.id,
175
+ fromNode: edge.fromNode,
176
+ toNode: edge.toNode,
177
+ operation: flattenedOperation
178
+ };
179
+ });
180
+ /*const state = {
181
+ nodes: Object.fromEntries(this.transactionState.nodes),
182
+ edges: expandedEdges,
183
+ balanceStates: Object.fromEntries(this.transactionState.balanceStates),
184
+ metadata: this.transactionState.metadata,
185
+ relationships: Object.fromEntries(plainRelationships)
186
+ };*/
187
+ const finalState = {
188
+ nodes: this.transactionState.nodes,
189
+ edges: expandedEdges,
190
+ balanceStates: this.transactionState.balanceStates,
191
+ /*metadata: {
192
+ ...this.transactionState.metadata,
193
+ totalFees: this.getTotalFeesInMina() // Add here to convert to MINA
194
+ },*/
195
+ metadata: this.transactionState.metadata,
196
+ relationships: plainRelationships
197
+ };
198
+ //this.transactionSnapshots = [...this.transactionSnapshots, state];
199
+ this.transactionSnapshots = [...this.transactionSnapshots, finalState];
200
+ return {
201
+ nodes: this.transactionState.nodes,
202
+ edges: expandedEdges,
203
+ balanceStates: this.transactionState.balanceStates,
204
+ /*metadata: {
205
+ ...this.transactionState.metadata,
206
+ totalFees: this.getTotalFeesInMina() // Add here to convert to MINA
207
+ },*/
208
+ metadata: this.transactionState.metadata,
209
+ relationships: plainRelationships
210
+ };
211
+ };
212
+ this.getTransactions = (...transactionStates) => {
213
+ for (const txState of transactionStates) {
214
+ if (txState) {
215
+ this.getTransactionState(txState);
216
+ }
217
+ }
218
+ };
219
+ this.auAnalyzer = new AccountUpdateAnalyzer();
220
+ this.contractAnalyzer = new SmartContractAnalyzer();
221
+ this.contractAnalysis = new Map();
222
+ this.transactionState = {
223
+ nodes: new Map(),
224
+ edges: [],
225
+ balanceStates: new Map(),
226
+ metadata: {
227
+ totalProofs: 0,
228
+ totalSignatures: 0,
229
+ totalFees: 0,
230
+ accountUpdates: 0
231
+ },
232
+ relationships: new Map()
233
+ };
234
+ }
235
+ initializeContracts(contracts) {
236
+ contracts.forEach(contract => {
237
+ this.contractAnalyzer.analyzeContractInstance(contract);
238
+ });
239
+ this.contractAnalysis = this.contractAnalyzer.getContracts();
240
+ }
241
+ getContractAnalysis() {
242
+ return this.contractAnalysis;
243
+ }
244
+ getContractAnalysisFor(contractName) {
245
+ return this.contractAnalysis.get(contractName);
246
+ }
247
+ getTotalFeesInMina() {
248
+ const feesInNanomina = BigInt(this.transactionState.metadata.totalFees);
249
+ const feesInMina = Number(feesInNanomina) / 1e9;
250
+ return Number(feesInMina);
251
+ }
252
+ determineAuthorizationType(au) {
253
+ if (au.lazyAuthorization?.kind === 'lazy-proof')
254
+ return 'proof';
255
+ if (au.lazyAuthorization?.kind === 'lazy-signature')
256
+ return 'signature';
257
+ return 'none';
258
+ }
259
+ isContractAccount(au) {
260
+ //console.log(`Verification Key of ${au.body.publicKey.toBase58()} : ${au.body?.update?.verificationKey.value.hash}`)
261
+ //console.log(`Auth kind of ${au.body.publicKey.toBase58()} : ${au.lazyAuthorization?.kind}`)
262
+ // 1. Check the label for contract indicators
263
+ if (au.label) {
264
+ const labelLower = au.label.toLowerCase();
265
+ //console.log('Label: ', labelLower)
266
+ if (labelLower.includes('contract') ||
267
+ labelLower.includes('zkapp') ||
268
+ labelLower.includes('deploy')) {
269
+ return true;
270
+ }
271
+ }
272
+ //2. Check for verification key updates
273
+ // Contracts typically have verification keys
274
+ if (au.body?.update?.verificationKey.value.data) {
275
+ return true;
276
+ }
277
+ /*
278
+ // 3. Check for proof-based permissions
279
+ // Contracts typically use proofs for authorization
280
+ if (au.body?.update?.permissions.value) {
281
+ const permissions = au.body.update.permissions.value;
282
+ const requiresProof = (
283
+ (
284
+ permissions.editState.constant.toBoolean() === false &&
285
+ permissions.editState?.signatureNecessary?.toBoolean() === false &&
286
+ permissions.editState?.signatureSufficient?.toBoolean() === false
287
+ ) || (
288
+ permissions.send?.constant?.toBoolean() === false &&
289
+ permissions.send?.signatureNecessary?.toBoolean() === false &&
290
+ permissions.send?.signatureSufficient?.toBoolean() === false
291
+ )
292
+ )
293
+ if (requiresProof) {
294
+ return true;
295
+ }
296
+ }*/
297
+ // 4. Check authorization type
298
+ // Contracts often use proof-based authorization
299
+ if (au.lazyAuthorization?.kind === 'lazy-proof') {
300
+ return true;
301
+ }
302
+ // If none of the above, it's probably a regular account
303
+ return false;
304
+ }
305
+ buildEdgesFromRelationships(relationships) {
306
+ const edges = [];
307
+ let sequence = 1;
308
+ relationships.forEach(relationship => {
309
+ if (relationship.parentId) {
310
+ const edge = {
311
+ id: `op${sequence++}`,
312
+ fromNode: relationship.parentId,
313
+ toNode: relationship.id,
314
+ operation: {
315
+ sequence,
316
+ type: relationship.method?.name || 'update',
317
+ status: 'success'
318
+ }
319
+ };
320
+ if (relationship.stateChanges?.length) {
321
+ edge.operation.amount = {
322
+ value: Number(relationship.stateChanges[0].value),
323
+ denomination: 'USD'
324
+ };
325
+ }
326
+ edges.push(edge);
327
+ }
328
+ });
329
+ return edges;
330
+ }
331
+ getStateHistory() {
332
+ return this.transactionSnapshots;
333
+ }
334
+ }
335
+ //# sourceMappingURL=autrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autrace.js","sourceRoot":"","sources":["../../src/autrace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AUTrace } from "./autrace.js";
2
+ import { AUVisualizer } from "./Visualiser.js";
3
+ export { AUTrace, AUVisualizer };
@@ -0,0 +1,4 @@
1
+ import { AUTrace } from "./autrace.js";
2
+ import { AUVisualizer } from "./Visualiser.js";
3
+ export { AUTrace, AUVisualizer };
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,CAAA"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "autrace",
3
+ "version": "0.0.1",
4
+ "description": "Account Update analyser for MINA",
5
+ "main": "build/src/index.js",
6
+ "types": "build/src/index.d.ts",
7
+ "files": [
8
+ "build",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "type": "module",
13
+ "scripts": {
14
+ "test": "echo \"Error: no test specified\" && exit 1",
15
+ "build": "tsc"
16
+ },
17
+ "author": "krish",
18
+ "license": "ISC",
19
+ "devDependencies": {
20
+ "@types/node": "^22.13.0",
21
+ "typescript": "^5.7.3"
22
+ },
23
+ "dependencies": {
24
+ "@mermaid-js/mermaid-cli": "^11.4.2",
25
+ "o1js": "^2.2.0"
26
+ }
27
+ }