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.
- package/build/src/AccountUpdateAnalyzer.d.ts +17 -0
- package/build/src/AccountUpdateAnalyzer.js +88 -0
- package/build/src/AccountUpdateAnalyzer.js.map +1 -0
- package/build/src/AccountUpdateTrace.d.ts +16 -0
- package/build/src/AccountUpdateTrace.js +232 -0
- package/build/src/AccountUpdateTrace.js.map +1 -0
- package/build/src/AsciiVisualiser.d.ts +12 -0
- package/build/src/AsciiVisualiser.js +130 -0
- package/build/src/AsciiVisualiser.js.map +1 -0
- package/build/src/ContractAnalyser.d.ts +26 -0
- package/build/src/ContractAnalyser.js +171 -0
- package/build/src/ContractAnalyser.js.map +1 -0
- package/build/src/Interface.d.ts +172 -0
- package/build/src/Interface.js +2 -0
- package/build/src/Interface.js.map +1 -0
- package/build/src/Visualiser.d.ts +26 -0
- package/build/src/Visualiser.js +450 -0
- package/build/src/Visualiser.js.map +1 -0
- package/build/src/autrace.d.ts +27 -0
- package/build/src/autrace.js +335 -0
- package/build/src/autrace.js.map +1 -0
- package/build/src/index.d.ts +3 -0
- package/build/src/index.js +4 -0
- package/build/src/index.js.map +1 -0
- package/package.json +27 -0
@@ -0,0 +1,171 @@
|
|
1
|
+
export class SmartContractAnalyzer {
|
2
|
+
constructor() {
|
3
|
+
this.analyzeContractInstance = (instance) => {
|
4
|
+
const contractClass = Object.getPrototypeOf(instance).constructor;
|
5
|
+
const contractName = contractClass.name;
|
6
|
+
// Analyze state fields
|
7
|
+
const stateFields = this.extractStateFields(contractClass);
|
8
|
+
// Analyze methods and their relationships
|
9
|
+
const methods = this.extractMethods(contractClass);
|
10
|
+
// Analyze permissions
|
11
|
+
const permissions = this.extractPermissions(contractClass);
|
12
|
+
this.contracts.set(contractName, {
|
13
|
+
name: contractName,
|
14
|
+
stateFields,
|
15
|
+
methods,
|
16
|
+
permissions
|
17
|
+
});
|
18
|
+
};
|
19
|
+
this.extractStateFields = (contractClass) => {
|
20
|
+
const stateFields = [];
|
21
|
+
let stateIndex = 0;
|
22
|
+
Object.getOwnPropertyNames(contractClass.prototype).forEach(prop => {
|
23
|
+
//console.log(prop)
|
24
|
+
const descriptor = Object.getOwnPropertyDescriptor(contractClass.prototype, prop);
|
25
|
+
//console.log('Descriptor: ', descriptor);
|
26
|
+
if (descriptor?.get && prop !== 'address') {
|
27
|
+
stateFields.push({
|
28
|
+
name: prop,
|
29
|
+
index: stateIndex++
|
30
|
+
});
|
31
|
+
}
|
32
|
+
});
|
33
|
+
//console.log('StateFields: ', stateFields)
|
34
|
+
return stateFields;
|
35
|
+
};
|
36
|
+
this.extractMethods = (contractClass) => {
|
37
|
+
const methods = [];
|
38
|
+
Object.getOwnPropertyNames(contractClass.prototype).forEach(prop => {
|
39
|
+
const descriptor = Object.getOwnPropertyDescriptor(contractClass.prototype, prop);
|
40
|
+
if (descriptor?.value instanceof Function) {
|
41
|
+
const methodStr = descriptor.value.toString();
|
42
|
+
methods.push({
|
43
|
+
name: prop,
|
44
|
+
childCalls: this.extractChildCalls(methodStr),
|
45
|
+
stateChanges: this.extractStateChanges(methodStr),
|
46
|
+
authorization: {
|
47
|
+
requiresProof: methodStr.includes('@method'),
|
48
|
+
requiresSignature: methodStr.includes('requireSignature')
|
49
|
+
}
|
50
|
+
});
|
51
|
+
}
|
52
|
+
});
|
53
|
+
return methods;
|
54
|
+
};
|
55
|
+
this.extractChildCalls = (methodStr) => {
|
56
|
+
const childCalls = [];
|
57
|
+
// Detect internal method calls
|
58
|
+
const internalCallMatch = methodStr.match(/await this\.(\w+)\(/g);
|
59
|
+
if (internalCallMatch) {
|
60
|
+
childCalls.push({
|
61
|
+
internalMethod: internalCallMatch[0].replace('await this.', '').replace('(', '')
|
62
|
+
});
|
63
|
+
}
|
64
|
+
// Detect contract instantiations and calls
|
65
|
+
const contractCallMatch = methodStr.match(/const\s+(\w+)\s*=\s*new\s+(\w+)\([^)]*\).*?await\s+\1\.(\w+)\(/s);
|
66
|
+
if (contractCallMatch) {
|
67
|
+
childCalls.push({
|
68
|
+
contractMethod: `${contractCallMatch[2]}.${contractCallMatch[3]}`
|
69
|
+
});
|
70
|
+
}
|
71
|
+
return childCalls;
|
72
|
+
};
|
73
|
+
this.extractStateChanges = (methodStr) => {
|
74
|
+
const stateChanges = [];
|
75
|
+
// Match state get operations
|
76
|
+
const getMatches = methodStr.match(/this\.(\w+)\.get(?:AndRequireEquals)?\(\)/g);
|
77
|
+
if (getMatches) {
|
78
|
+
getMatches.forEach(match => {
|
79
|
+
const field = match.split('.')[1];
|
80
|
+
stateChanges.push({ field, operation: 'get' });
|
81
|
+
});
|
82
|
+
}
|
83
|
+
// Match state set operations
|
84
|
+
const setMatches = methodStr.match(/this\.(\w+)\.set\([^)]+\)/g);
|
85
|
+
if (setMatches) {
|
86
|
+
setMatches.forEach(match => {
|
87
|
+
const field = match.split('.')[1];
|
88
|
+
stateChanges.push({ field, operation: 'set' });
|
89
|
+
});
|
90
|
+
}
|
91
|
+
return stateChanges;
|
92
|
+
};
|
93
|
+
this.extractPermissions = (contractClass) => {
|
94
|
+
const deployMethod = contractClass.prototype.deploy;
|
95
|
+
if (!deployMethod)
|
96
|
+
return [];
|
97
|
+
const deployStr = deployMethod.toString();
|
98
|
+
const permissions = [];
|
99
|
+
// Extract permission settings
|
100
|
+
const permissionMatches = deployStr.match(/Permissions\.(\w+)\(\)/g);
|
101
|
+
if (permissionMatches) {
|
102
|
+
permissions.push(...permissionMatches.map((p) => p.replace('Permissions.', '').replace('()', '')));
|
103
|
+
}
|
104
|
+
return permissions;
|
105
|
+
};
|
106
|
+
this.buildRelationshipGraph = () => {
|
107
|
+
const relationships = new Map();
|
108
|
+
this.contracts.forEach((contract, contractName) => {
|
109
|
+
const contractRelations = {
|
110
|
+
parents: [],
|
111
|
+
children: [],
|
112
|
+
stateAccess: [],
|
113
|
+
onChainStates: contract.stateFields.map(field => field.name).join(', ')
|
114
|
+
};
|
115
|
+
contract.methods.forEach(method => {
|
116
|
+
// Add child relationships
|
117
|
+
method.childCalls.forEach(call => {
|
118
|
+
if (call.contractMethod) {
|
119
|
+
const [childContract, childMethod] = call.contractMethod.split('.');
|
120
|
+
contractRelations.children.push({
|
121
|
+
contract: childContract,
|
122
|
+
method: childMethod
|
123
|
+
});
|
124
|
+
}
|
125
|
+
else if (call.internalMethod) {
|
126
|
+
contractRelations.children.push({
|
127
|
+
method: call.internalMethod
|
128
|
+
});
|
129
|
+
}
|
130
|
+
});
|
131
|
+
// Track state access
|
132
|
+
method.stateChanges.forEach(change => {
|
133
|
+
const existing = contractRelations.stateAccess.find(s => s.field === change.field);
|
134
|
+
if (existing) {
|
135
|
+
if (!existing.operations.includes(change.operation)) {
|
136
|
+
existing.operations.push(change.operation);
|
137
|
+
}
|
138
|
+
}
|
139
|
+
else {
|
140
|
+
contractRelations.stateAccess.push({
|
141
|
+
field: change.field,
|
142
|
+
operations: [change.operation]
|
143
|
+
});
|
144
|
+
}
|
145
|
+
});
|
146
|
+
});
|
147
|
+
relationships.set(contractName, contractRelations);
|
148
|
+
});
|
149
|
+
// Second pass to fill in parent relationships
|
150
|
+
relationships.forEach((relations, contractName) => {
|
151
|
+
relations.children.forEach((child) => {
|
152
|
+
if (child.contract) {
|
153
|
+
const childRelations = relationships.get(child.contract);
|
154
|
+
if (childRelations && !childRelations.parents.includes(contractName)) {
|
155
|
+
childRelations.parents.push(contractName);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
});
|
159
|
+
});
|
160
|
+
return relationships;
|
161
|
+
};
|
162
|
+
this.contracts = new Map();
|
163
|
+
}
|
164
|
+
getContracts() {
|
165
|
+
return this.contracts;
|
166
|
+
}
|
167
|
+
getContract(contractName) {
|
168
|
+
return this.contracts.get(contractName);
|
169
|
+
}
|
170
|
+
}
|
171
|
+
//# sourceMappingURL=ContractAnalyser.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ContractAnalyser.js","sourceRoot":"","sources":["../../src/ContractAnalyser.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,172 @@
|
|
1
|
+
type TreeOperation = 'deploy' | 'prove' | 'sign' | 'send';
|
2
|
+
interface TreeSnapshot {
|
3
|
+
operation: TreeOperation;
|
4
|
+
timestamp: number;
|
5
|
+
tree: any;
|
6
|
+
changes: ChangeLog;
|
7
|
+
}
|
8
|
+
type ChangeLog = {
|
9
|
+
added: {
|
10
|
+
path: string;
|
11
|
+
node: any;
|
12
|
+
}[];
|
13
|
+
removed: {
|
14
|
+
path: string;
|
15
|
+
node: any;
|
16
|
+
}[];
|
17
|
+
updated: {
|
18
|
+
path: string;
|
19
|
+
changes: {
|
20
|
+
field: string;
|
21
|
+
oldValue: any;
|
22
|
+
newValue: any;
|
23
|
+
}[];
|
24
|
+
}[];
|
25
|
+
};
|
26
|
+
interface TransactionNode {
|
27
|
+
id: string;
|
28
|
+
type: AccountType;
|
29
|
+
label: string;
|
30
|
+
publicKey: string;
|
31
|
+
role?: string;
|
32
|
+
contractType?: string;
|
33
|
+
features?: Record<string, any>;
|
34
|
+
contractMetadata?: ContractMetadata;
|
35
|
+
}
|
36
|
+
interface TransactionState {
|
37
|
+
nodes: Map<string, TransactionNode>;
|
38
|
+
edges: Edge[];
|
39
|
+
balanceStates: Map<string, number[]>;
|
40
|
+
metadata: {
|
41
|
+
totalProofs: number;
|
42
|
+
totalSignatures: number;
|
43
|
+
totalFees: number;
|
44
|
+
accountUpdates: number;
|
45
|
+
};
|
46
|
+
relationships: Map<string, AccountUpdateRelationship>;
|
47
|
+
}
|
48
|
+
interface Edge {
|
49
|
+
id: string;
|
50
|
+
fromNode: string;
|
51
|
+
toNode: string;
|
52
|
+
operation: {
|
53
|
+
sequence: number;
|
54
|
+
type: string;
|
55
|
+
status: 'success' | 'rejected';
|
56
|
+
amount?: {
|
57
|
+
value: number;
|
58
|
+
denomination: string;
|
59
|
+
};
|
60
|
+
fee?: string;
|
61
|
+
};
|
62
|
+
}
|
63
|
+
interface AUMetadata {
|
64
|
+
id: string;
|
65
|
+
label: string;
|
66
|
+
type: 'proof' | 'signature' | 'none';
|
67
|
+
publicKey: string;
|
68
|
+
balanceChange: string;
|
69
|
+
methodName?: string;
|
70
|
+
args?: any[];
|
71
|
+
}
|
72
|
+
type AccountType = 'account' | 'contract';
|
73
|
+
interface ContractMetadata {
|
74
|
+
methods: MethodAnalysis[];
|
75
|
+
state: {
|
76
|
+
fields: string[];
|
77
|
+
hasOnChainState: boolean;
|
78
|
+
};
|
79
|
+
}
|
80
|
+
interface EnhancedTransactionState extends TransactionState {
|
81
|
+
contractMetadata: Map<string, ContractMetadata>;
|
82
|
+
}
|
83
|
+
interface AccountUpdateBody {
|
84
|
+
callDepth?: number;
|
85
|
+
balanceChange?: any;
|
86
|
+
publicKey?: any;
|
87
|
+
mayUseToken?: any;
|
88
|
+
}
|
89
|
+
interface ParsedAccountUpdate {
|
90
|
+
id: string | number;
|
91
|
+
label?: string;
|
92
|
+
body: AccountUpdateBody;
|
93
|
+
lazyAuthorization?: {
|
94
|
+
kind?: string;
|
95
|
+
methodName?: string;
|
96
|
+
};
|
97
|
+
caller?: string;
|
98
|
+
}
|
99
|
+
interface MethodAnalysis {
|
100
|
+
name: string;
|
101
|
+
childCalls: {
|
102
|
+
contractMethod?: string;
|
103
|
+
internalMethod?: string;
|
104
|
+
}[];
|
105
|
+
stateChanges: {
|
106
|
+
field: string;
|
107
|
+
operation: 'set' | 'get';
|
108
|
+
}[];
|
109
|
+
authorization: {
|
110
|
+
requiresProof: boolean;
|
111
|
+
requiresSignature: boolean;
|
112
|
+
};
|
113
|
+
}
|
114
|
+
interface MethodAccountUpdate {
|
115
|
+
creates: boolean;
|
116
|
+
requiresSignature: boolean;
|
117
|
+
balanceChanges: boolean;
|
118
|
+
}
|
119
|
+
interface ContractMethod {
|
120
|
+
name: string;
|
121
|
+
authorization: {
|
122
|
+
requiresProof: boolean;
|
123
|
+
requiresSignature: boolean;
|
124
|
+
};
|
125
|
+
accountUpdates: MethodAccountUpdate[];
|
126
|
+
}
|
127
|
+
interface ContractAnalysis {
|
128
|
+
name: string;
|
129
|
+
stateFields: {
|
130
|
+
name: string;
|
131
|
+
index: number;
|
132
|
+
}[];
|
133
|
+
methods: MethodAnalysis[];
|
134
|
+
permissions: string[];
|
135
|
+
}
|
136
|
+
interface AccountUpdateRelationship {
|
137
|
+
id: string;
|
138
|
+
label: string;
|
139
|
+
parentId?: string;
|
140
|
+
children: string[];
|
141
|
+
depth: number;
|
142
|
+
method?: {
|
143
|
+
name: string;
|
144
|
+
contract: string;
|
145
|
+
};
|
146
|
+
onChainStates?: string;
|
147
|
+
stateChanges?: {
|
148
|
+
field: string;
|
149
|
+
value: any;
|
150
|
+
}[];
|
151
|
+
}
|
152
|
+
interface PlainRelationshipMap {
|
153
|
+
[key: string]: AccountUpdateRelationship;
|
154
|
+
}
|
155
|
+
interface EntityInfo {
|
156
|
+
id: string;
|
157
|
+
type: string;
|
158
|
+
name: string;
|
159
|
+
operations: Set<string>;
|
160
|
+
publicKey: string;
|
161
|
+
contractType?: string;
|
162
|
+
labels: Set<string>;
|
163
|
+
}
|
164
|
+
interface FlowOperation {
|
165
|
+
from: string;
|
166
|
+
to: string;
|
167
|
+
action: string;
|
168
|
+
fee?: string;
|
169
|
+
status?: string;
|
170
|
+
parameters?: Record<string, string>;
|
171
|
+
}
|
172
|
+
export { TreeSnapshot, EntityInfo, FlowOperation, PlainRelationshipMap, AccountUpdateRelationship, TreeOperation, ContractAnalysis, ChangeLog, ContractMethod, MethodAccountUpdate, AUMetadata, Edge, TransactionNode, TransactionState, AccountType, ContractMetadata, MethodAnalysis, EnhancedTransactionState, ParsedAccountUpdate };
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Interface.js","sourceRoot":"","sources":["../../src/Interface.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
export declare class AUVisualizer {
|
2
|
+
private stateHistory;
|
3
|
+
private entities;
|
4
|
+
constructor(stateHistory: any[]);
|
5
|
+
private getUniqueNodeId;
|
6
|
+
private formatLabel;
|
7
|
+
private getNodeStyle;
|
8
|
+
private formatEdgeLabel;
|
9
|
+
private extractOperationDetails;
|
10
|
+
private hasConnections;
|
11
|
+
private generateStateSubgraph;
|
12
|
+
private processEntities;
|
13
|
+
private extractEntityName;
|
14
|
+
private extractOperation;
|
15
|
+
private generateEntityRegistry;
|
16
|
+
private processStateOperations;
|
17
|
+
private generateASCIIFlow;
|
18
|
+
private generateTransactionFlow;
|
19
|
+
private generateMetadata;
|
20
|
+
generateMermaidCode: () => string;
|
21
|
+
generateMarkdown(): string;
|
22
|
+
openInBrowser(filePath: string): Promise<void>;
|
23
|
+
generateSVG(outputPath?: string): Promise<void>;
|
24
|
+
generatePNG(outputPath?: string): Promise<void>;
|
25
|
+
generateMarkdownFile(outputPath?: string): Promise<void>;
|
26
|
+
}
|