UNPKG

@nomiclabs/buidler

Version:

Buidler is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

239 lines 8.2 kB
/// <reference types="mocha" /> /// <reference types="node" /> import { EventEmitter } from "events"; import { DeepPartial, DeepReadonly, Omit } from "ts-essentials"; import { MessageTrace } from "./internal/buidler-evm/stack-traces/message-trace"; import * as types from "./internal/core/params/argumentTypes"; export interface CommonNetworkConfig { chainId?: number; from?: string; gas?: "auto" | number; gasPrice?: "auto" | number; gasMultiplier?: number; } export interface BuidlerNetworkAccount { privateKey: string; balance: string; } export interface BuidlerNetworkConfig extends CommonNetworkConfig { accounts?: BuidlerNetworkAccount[]; blockGasLimit?: number; hardfork?: string; throwOnTransactionFailures?: boolean; throwOnCallFailures?: boolean; loggingEnabled?: boolean; allowUnlimitedContractSize?: boolean; initialDate?: string; } export interface HDAccountsConfig { mnemonic: string; initialIndex?: number; count?: number; path?: string; } export interface OtherAccountsConfig { type: string; } export declare type NetworkConfigAccounts = "remote" | string[] | HDAccountsConfig | OtherAccountsConfig; export interface HttpNetworkConfig extends CommonNetworkConfig { url?: string; timeout?: number; httpHeaders?: { [name: string]: string; }; accounts?: NetworkConfigAccounts; } export declare type NetworkConfig = BuidlerNetworkConfig | HttpNetworkConfig; export interface Networks { [networkName: string]: NetworkConfig; } /** * The project paths: * * root: the project's root. * * configFile: the buidler's config filepath. * * cache: project's cache directory. * * artifacts: artifact's directory. * * sources: project's sources directory. * * tests: project's tests directory. */ export interface ProjectPaths { root: string; configFile: string; cache: string; artifacts: string; sources: string; tests: string; } declare type EVMVersion = string; export interface SolcConfig { version: string; optimizer: SolcOptimizerConfig; evmVersion?: EVMVersion; } export interface SolcOptimizerConfig { enabled: boolean; runs: number; } export interface AnalyticsConfig { enabled: boolean; } export interface BuidlerConfig { defaultNetwork?: string; networks?: Networks; paths?: Omit<Partial<ProjectPaths>, "configFile">; solc?: DeepPartial<SolcConfig>; mocha?: Mocha.MochaOptions; analytics?: Partial<AnalyticsConfig>; } export interface ResolvedBuidlerConfig extends BuidlerConfig { defaultNetwork: string; paths: ProjectPaths; networks: Networks; solc: SolcConfig; analytics: AnalyticsConfig; } export interface SolcInput { settings: { metadata: { useLiteralContent: boolean; }; optimizer: SolcOptimizerConfig; outputSelection: { "*": { "": string[]; "*": string[]; }; }; evmVersion?: string; }; sources: { [p: string]: { content: string; }; }; language: string; } /** * A function that receives a BuidlerRuntimeEnvironment and * modify its properties or add new ones. */ export declare type EnvironmentExtender = (env: BuidlerRuntimeEnvironment) => void; export declare type ConfigExtender = (config: ResolvedBuidlerConfig, userConfig: DeepReadonly<BuidlerConfig>) => void; export declare type ExperimentalBuidlerEVMMessageTraceHook = (bre: BuidlerRuntimeEnvironment, trace: MessageTrace, isMessageTraceFromACall: boolean) => Promise<void>; export declare type BoundExperimentalBuidlerEVMMessageTraceHook = (trace: MessageTrace, isMessageTraceFromACall: boolean) => Promise<void>; export interface TasksMap { [name: string]: TaskDefinition; } export interface ConfigurableTaskDefinition { setDescription(description: string): this; setAction(action: ActionType<TaskArguments>): this; addParam<T>(name: string, description?: string, defaultValue?: T, type?: types.ArgumentType<T>, isOptional?: boolean): this; addOptionalParam<T>(name: string, description?: string, defaultValue?: T, type?: types.ArgumentType<T>): this; addPositionalParam<T>(name: string, description?: string, defaultValue?: T, type?: types.ArgumentType<T>, isOptional?: boolean): this; addOptionalPositionalParam<T>(name: string, description?: string, defaultValue?: T, type?: types.ArgumentType<T>): this; addVariadicPositionalParam<T>(name: string, description?: string, defaultValue?: T[], type?: types.ArgumentType<T>, isOptional?: boolean): this; addOptionalVariadicPositionalParam<T>(name: string, description?: string, defaultValue?: T[], type?: types.ArgumentType<T>): this; addFlag(name: string, description?: string): this; } export interface ParamDefinition<T> { name: string; defaultValue?: T; type: types.ArgumentType<T>; description?: string; isOptional: boolean; isFlag: boolean; isVariadic: boolean; } export interface OptionalParamDefinition<T> extends ParamDefinition<T> { defaultValue: T; isOptional: true; } export interface ParamDefinitionsMap { [paramName: string]: ParamDefinition<any>; } /** * Buidler arguments: * * network: the network to be used. * * showStackTraces: flag to show stack traces. * * version: flag to show buidler's version. * * help: flag to show buidler's help message. * * emoji: * * config: used to specify buidler's config file. */ export interface BuidlerArguments { network?: string; showStackTraces: boolean; version: boolean; help: boolean; emoji: boolean; config?: string; verbose: boolean; maxMemory?: number; } export declare type BuidlerParamDefinitions = { [param in keyof Required<BuidlerArguments>]: OptionalParamDefinition<BuidlerArguments[param]>; }; export interface TaskDefinition extends ConfigurableTaskDefinition { readonly name: string; readonly description?: string; readonly action: ActionType<TaskArguments>; readonly isInternal: boolean; readonly paramDefinitions: ParamDefinitionsMap; readonly positionalParamDefinitions: Array<ParamDefinition<any>>; } /** * @type TaskArguments {object-like} - the input arguments for a task. * * TaskArguments type is set to 'any' because it's interface is dynamic. * It's impossible in TypeScript to statically specify a variadic * number of fields and at the same time define specific types for\ * the argument values. * * For example, we could define: * type TaskArguments = Record<string, any>; * * ...but then, we couldn't narrow the actual argument value's type in compile time, * thus we have no other option than forcing it to be just 'any'. */ export declare type TaskArguments = any; export declare type RunTaskFunction = (name: string, taskArguments?: TaskArguments) => Promise<any>; export interface RunSuperFunction<ArgT extends TaskArguments> { (taskArguments?: ArgT): Promise<any>; isDefined: boolean; } export declare type ActionType<ArgsT extends TaskArguments> = (taskArgs: ArgsT, env: BuidlerRuntimeEnvironment, runSuper: RunSuperFunction<ArgsT>) => Promise<any>; export interface EthereumProvider extends EventEmitter { send(method: string, params?: any[]): Promise<any>; } export declare type IEthereumProvider = EthereumProvider; export interface Network { name: string; config: NetworkConfig; provider: EthereumProvider; } export interface BuidlerRuntimeEnvironment { readonly config: ResolvedBuidlerConfig; readonly buidlerArguments: BuidlerArguments; readonly tasks: TasksMap; readonly run: RunTaskFunction; readonly network: Network; readonly ethereum: EthereumProvider; } export interface Artifact { contractName: string; abi: any; bytecode: string; deployedBytecode: string; linkReferences: LinkReferences; deployedLinkReferences: LinkReferences; } export interface LinkReferences { [libraryFileName: string]: { [libraryName: string]: Array<{ length: number; start: number; }>; }; } export {}; //# sourceMappingURL=types.d.ts.map