parent
0e1b07e903
commit
c0086c936e
@ -0,0 +1,303 @@ |
|||||||
|
export interface AnalyzerModule { |
||||||
|
name: string, |
||||||
|
description: string, |
||||||
|
category: ModuleCategory |
||||||
|
algorithm: ModuleAlgorithm |
||||||
|
visit: Function |
||||||
|
report: Function |
||||||
|
} |
||||||
|
|
||||||
|
export interface ModuleAlgorithm { |
||||||
|
hasFalsePositives: boolean, |
||||||
|
hasFalseNegatives: boolean, |
||||||
|
id: string |
||||||
|
} |
||||||
|
|
||||||
|
export interface ModuleCategory { |
||||||
|
displayName: string, |
||||||
|
id: string |
||||||
|
} |
||||||
|
|
||||||
|
export interface ReportObj { |
||||||
|
warning: string, |
||||||
|
location?: string | null, |
||||||
|
more?: string |
||||||
|
} |
||||||
|
|
||||||
|
export interface CompilationResult { |
||||||
|
error?: CompilationError, |
||||||
|
/** not present if no errors/warnings were encountered */ |
||||||
|
errors?: CompilationError[] |
||||||
|
/** This contains the file-level outputs. In can be limited/filtered by the outputSelection settings */ |
||||||
|
sources?: { |
||||||
|
[contractName: string]: CompilationSource |
||||||
|
} |
||||||
|
/** This contains the contract-level outputs. It can be limited/filtered by the outputSelection settings */ |
||||||
|
contracts?: { |
||||||
|
/** If the language used has no contract names, this field should equal to an empty string. */ |
||||||
|
[fileName: string]: { |
||||||
|
[contract: string]: CompiledContract |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
///////////
|
||||||
|
// ERROR //
|
||||||
|
///////////
|
||||||
|
|
||||||
|
export interface CompilationError { |
||||||
|
/** Location within the source file */ |
||||||
|
sourceLocation?: { |
||||||
|
file: string |
||||||
|
start: number |
||||||
|
end: number |
||||||
|
} |
||||||
|
/** Error type */ |
||||||
|
type?: CompilationErrorType |
||||||
|
/** Component where the error originated, such as "general", "ewasm", etc. */ |
||||||
|
component?: 'general' | 'ewasm' | string |
||||||
|
severity?: 'error' | 'warning' |
||||||
|
message?: string |
||||||
|
mode?: 'panic' |
||||||
|
/** the message formatted with source location */ |
||||||
|
formattedMessage?: string |
||||||
|
} |
||||||
|
|
||||||
|
type CompilationErrorType = |
||||||
|
| 'JSONError' |
||||||
|
| 'IOError' |
||||||
|
| 'ParserError' |
||||||
|
| 'DocstringParsingError' |
||||||
|
| 'SyntaxError' |
||||||
|
| 'DeclarationError' |
||||||
|
| 'TypeError' |
||||||
|
| 'UnimplementedFeatureError' |
||||||
|
| 'InternalCompilerError' |
||||||
|
| 'Exception' |
||||||
|
| 'CompilerError' |
||||||
|
| 'FatalError' |
||||||
|
| 'Warning' |
||||||
|
|
||||||
|
////////////
|
||||||
|
// SOURCE //
|
||||||
|
////////////
|
||||||
|
export interface CompilationSource { |
||||||
|
/** Identifier of the source (used in source maps) */ |
||||||
|
id: number |
||||||
|
/** The AST object */ |
||||||
|
ast: AstNode |
||||||
|
/** The legacy AST object */ |
||||||
|
legacyAST: AstNodeLegacy |
||||||
|
} |
||||||
|
|
||||||
|
/////////
|
||||||
|
// AST //
|
||||||
|
/////////
|
||||||
|
export interface AstNode { |
||||||
|
absolutePath?: string |
||||||
|
exportedSymbols?: Object |
||||||
|
id: number |
||||||
|
nodeType: string |
||||||
|
nodes?: Array<AstNode> |
||||||
|
src: string |
||||||
|
literals?: Array<string> |
||||||
|
file?: string |
||||||
|
scope?: number |
||||||
|
sourceUnit?: number |
||||||
|
symbolAliases?: Array<string> |
||||||
|
[x: string]: any |
||||||
|
} |
||||||
|
|
||||||
|
export interface AstNodeLegacy { |
||||||
|
id: number |
||||||
|
name: string |
||||||
|
src: string |
||||||
|
children?: Array<AstNodeLegacy> |
||||||
|
attributes?: AstNodeAtt |
||||||
|
} |
||||||
|
|
||||||
|
export interface AstNodeAtt { |
||||||
|
operator?: string |
||||||
|
string?: null |
||||||
|
type?: string |
||||||
|
value?: string |
||||||
|
constant?: boolean |
||||||
|
name?: string |
||||||
|
public?: boolean |
||||||
|
exportedSymbols?: Object |
||||||
|
argumentTypes?: null |
||||||
|
absolutePath?: string |
||||||
|
[x: string]: any |
||||||
|
} |
||||||
|
|
||||||
|
//////////////
|
||||||
|
// CONTRACT //
|
||||||
|
//////////////
|
||||||
|
export interface CompiledContract { |
||||||
|
/** The Ethereum Contract ABI. If empty, it is represented as an empty array. */ |
||||||
|
abi: ABIDescription[] |
||||||
|
// See the Metadata Output documentation (serialised JSON string)
|
||||||
|
metadata: string |
||||||
|
/** User documentation (natural specification) */ |
||||||
|
userdoc: UserDocumentation |
||||||
|
/** Developer documentation (natural specification) */ |
||||||
|
devdoc: DeveloperDocumentation |
||||||
|
/** Intermediate representation (string) */ |
||||||
|
ir: string |
||||||
|
/** EVM-related outputs */ |
||||||
|
evm: { |
||||||
|
assembly: string |
||||||
|
legacyAssembly: {} |
||||||
|
/** Bytecode and related details. */ |
||||||
|
bytecode: BytecodeObject |
||||||
|
deployedBytecode: BytecodeObject |
||||||
|
/** The list of function hashes */ |
||||||
|
methodIdentifiers: { |
||||||
|
[functionIdentifier: string]: string |
||||||
|
} |
||||||
|
// Function gas estimates
|
||||||
|
gasEstimates: { |
||||||
|
creation: { |
||||||
|
codeDepositCost: string |
||||||
|
executionCost: 'infinite' | string |
||||||
|
totalCost: 'infinite' | string |
||||||
|
} |
||||||
|
external: { |
||||||
|
[functionIdentifier: string]: string |
||||||
|
} |
||||||
|
internal: { |
||||||
|
[functionIdentifier: string]: 'infinite' | string |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
/** eWASM related outputs */ |
||||||
|
ewasm: { |
||||||
|
/** S-expressions format */ |
||||||
|
wast: string |
||||||
|
/** Binary format (hex string) */ |
||||||
|
wasm: string |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/////////
|
||||||
|
// ABI //
|
||||||
|
/////////
|
||||||
|
export type ABIDescription = FunctionDescription | EventDescription |
||||||
|
|
||||||
|
export interface FunctionDescription { |
||||||
|
/** Type of the method. default is 'function' */ |
||||||
|
type?: 'function' | 'constructor' | 'fallback' | 'receive' |
||||||
|
/** The name of the function. Constructor and fallback function never have name */ |
||||||
|
name?: string |
||||||
|
/** List of parameters of the method. Fallback function doesn’t have inputs. */ |
||||||
|
inputs?: ABIParameter[] |
||||||
|
/** List of the outputs parameters for the method, if any */ |
||||||
|
outputs?: ABIParameter[] |
||||||
|
/** State mutability of the method */ |
||||||
|
stateMutability: 'pure' | 'view' | 'nonpayable' | 'payable' |
||||||
|
/** true if function accepts Ether, false otherwise. Default is false */ |
||||||
|
payable?: boolean |
||||||
|
/** true if function is either pure or view, false otherwise. Default is false */ |
||||||
|
constant?: boolean |
||||||
|
} |
||||||
|
|
||||||
|
export interface EventDescription { |
||||||
|
type: 'event' |
||||||
|
name: string |
||||||
|
inputs: ABIParameter & |
||||||
|
{ |
||||||
|
/** true if the field is part of the log’s topics, false if it one of the log’s data segment. */ |
||||||
|
indexed: boolean |
||||||
|
}[] |
||||||
|
/** true if the event was declared as anonymous. */ |
||||||
|
anonymous: boolean |
||||||
|
} |
||||||
|
|
||||||
|
export interface ABIParameter { |
||||||
|
/** The name of the parameter */ |
||||||
|
name: string |
||||||
|
/** The canonical type of the parameter */ |
||||||
|
type: ABITypeParameter |
||||||
|
/** Used for tuple types */ |
||||||
|
components?: ABIParameter[] |
||||||
|
} |
||||||
|
|
||||||
|
export type ABITypeParameter = |
||||||
|
| 'uint' |
||||||
|
| 'uint[]' // TODO : add <M>
|
||||||
|
| 'int' |
||||||
|
| 'int[]' // TODO : add <M>
|
||||||
|
| 'address' |
||||||
|
| 'address[]' |
||||||
|
| 'bool' |
||||||
|
| 'bool[]' |
||||||
|
| 'fixed' |
||||||
|
| 'fixed[]' // TODO : add <M>
|
||||||
|
| 'ufixed' |
||||||
|
| 'ufixed[]' // TODO : add <M>
|
||||||
|
| 'bytes' |
||||||
|
| 'bytes[]' // TODO : add <M>
|
||||||
|
| 'function' |
||||||
|
| 'function[]' |
||||||
|
| 'tuple' |
||||||
|
| 'tuple[]' |
||||||
|
| string // Fallback
|
||||||
|
|
||||||
|
///////////////////////////
|
||||||
|
// NATURAL SPECIFICATION //
|
||||||
|
///////////////////////////
|
||||||
|
|
||||||
|
// Userdoc
|
||||||
|
export interface UserDocumentation { |
||||||
|
methods: UserMethodList |
||||||
|
notice: string |
||||||
|
} |
||||||
|
|
||||||
|
export type UserMethodList = { |
||||||
|
[functionIdentifier: string]: UserMethodDoc |
||||||
|
} & { |
||||||
|
'constructor'?: string |
||||||
|
} |
||||||
|
export interface UserMethodDoc { |
||||||
|
notice: string |
||||||
|
} |
||||||
|
|
||||||
|
// Devdoc
|
||||||
|
export interface DeveloperDocumentation { |
||||||
|
author: string |
||||||
|
title: string |
||||||
|
details: string |
||||||
|
methods: DevMethodList |
||||||
|
} |
||||||
|
|
||||||
|
export interface DevMethodList { |
||||||
|
[functionIdentifier: string]: DevMethodDoc |
||||||
|
} |
||||||
|
|
||||||
|
export interface DevMethodDoc { |
||||||
|
author: string |
||||||
|
details: string |
||||||
|
return: string |
||||||
|
params: { |
||||||
|
[param: string]: string |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//////////////
|
||||||
|
// BYTECODE //
|
||||||
|
//////////////
|
||||||
|
export interface BytecodeObject { |
||||||
|
/** The bytecode as a hex string. */ |
||||||
|
object: string |
||||||
|
/** Opcodes list */ |
||||||
|
opcodes: string |
||||||
|
/** The source mapping as a string. See the source mapping definition. */ |
||||||
|
sourceMap: string |
||||||
|
/** If given, this is an unlinked object. */ |
||||||
|
linkReferences?: { |
||||||
|
[contractName: string]: { |
||||||
|
/** Byte offsets into the bytecode. */ |
||||||
|
[library: string]: { start: number; length: number }[] |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue