import BigNumber from 'bignumber.js'; import BN from 'bn.js'; import { AbiInput, AbiOutput } from '../../../abi-properties'; export interface Web3ContractContext { address: string; jsonInterface: AbiModel; options: Options; clone(): Web3ContractContext; deploy(options: DeployOptions): ContractSendMethod; methods: TMethodsInterface; once(event: TEventType, callback: (error: Error, event: EventData) => void): void; once(event: TEventType, options: EventOptions, callback: (error: Error, event: EventData) => void): void; events: TEventsInterface & { allEvents(options: EventOptions): EventResponse; allEvents(options: EventOptions, callback: (error: Error, event: EventData) => void): EventResponse; }; getPastEvents(event: TEventType): Promise; getPastEvents(event: TEventType, options: EventOptions, callback: (error: Error, event: EventData) => void): Promise; getPastEvents(event: TEventType, options: EventOptions): Promise; getPastEvents(event: TEventType, callback: (error: Error, event: EventData) => void): Promise; } export interface AbiModel { getMethod(name: TMethodNamesEnum): AbiItemModel | false; getMethods(): AbiItemModel[]; hasMethod(name: TMethodNamesEnum): boolean; getEvent(name: TEventEnum): AbiItemModel | false; getEvents(): AbiItemModel[]; getEventBySignature(signature: string): AbiItemModel; hasEvent(name: TEventEnum): boolean; } export interface AbiItemModel { signature: string; name: TMethodNamesEnum; payable: boolean; anonymous: boolean; getInputLength(): number; getInputs(): AbiInput[]; getIndexedInputs(): AbiInput[]; getOutputs(): AbiOutput[]; isOfType(): boolean; } export interface Options { address: string; data: string; } export interface DeployOptions { data: string; arguments?: any[]; } export interface ContractSendMethod { send(options: SendOptions, callback?: (err: Error, transactionHash: string) => void): PromiEvent>; estimateGas(options: EstimateGasOptions, callback?: (err: Error, gas: number) => void): Promise; estimateGas(callback: (err: Error, gas: number) => void): Promise; estimateGas(options: EstimateGasOptions, callback: (err: Error, gas: number) => void): Promise; estimateGas(options: EstimateGasOptions): Promise; estimateGas(): Promise; encodeABI(): string; } export interface SendOptions { from: string; gasPrice?: string; gas?: number; value?: number | string | BN | BigNumber; } export interface EstimateGasOptions { from?: string; gas?: number; value?: number | string | BN | BigNumber; } export interface PromiEvent extends Promise { once(type: 'transactionHash', handler: (hash: string) => void): PromiEvent; once(type: 'receipt', handler: (receipt: TransactionReceipt) => void): PromiEvent; once(type: 'confirmation', handler: (confNumber: number, receipt: TransactionReceipt) => void): PromiEvent; once(type: 'error', handler: (error: Error) => void): PromiEvent; on(type: 'transactionHash', handler: (hash: string) => void): PromiEvent; on(type: 'receipt', handler: (receipt: TransactionReceipt) => void): PromiEvent; on(type: 'confirmation', handler: (confNumber: number, receipt: TransactionReceipt) => void): PromiEvent; on(type: 'error', handler: (error: Error) => void): PromiEvent; } export interface TransactionReceipt { status: boolean; transactionHash: string; transactionIndex: number; blockHash: string; blockNumber: number; from: string; to: string; contractAddress?: string; cumulativeGasUsed: number; gasUsed: number; logs: Log[]; logsBloom: string; events?: { [eventName: string]: EventData; }; } export interface Log { address: string; data: string; topics: (string | string[])[]; logIndex: number; transactionIndex: number; transactionHash: string; blockHash: string; blockNumber: number; } export interface EventData { returnValues: { [key: string]: any; }; raw: { data: string; topics: string[]; }; event: string; signature: string; logIndex: number; transactionIndex: number; transactionHash: string; blockHash: string; blockNumber: number; address: string; } export interface EventOptions { filter?: any; fromBlock?: number; toBlock?: 'latest' | number; topics?: any[]; } export interface EventResponse { on(type: 'data', handler: (event: EventData) => void): EventResponse; on(type: 'changed', handler: (event: EventData) => void): EventResponse; on(type: 'error', handler: (error: Error) => void): EventResponse; }