import { INodeInfo, IWalletProvider, WalletConsumer } from "@cryptovarna/tron-web-api";
import BigNumber from "bignumber.js";
export interface TaskCreated {
    taskId?: string;
    creator?: string;
    targetNetwork?: string;
    targets?: string;
    values?: BigNumber;
    calldatas?: string;
    userSeed: BigNumber;
    startTime?: BigNumber;
    endTime?: BigNumber;
    signers?: string;
    signersN?: BigNumber;
}
export interface TaskSigned {
    taskId: string;
    signer: string;
    signature: string;
}
export interface TaskExecuted {
    taskId: string;
}
export interface TaskCanceled {
    taskId: string;
    signature: string;
}
export interface TaskApproved {
    taskId: string;
    signatures: string;
    signaturesN: string;
}
export interface TokensBridged {
    owner: string;
    targetNetwork: string;
    recipient: string;
    amount: BigNumber;
    userSeed: BigNumber;
    taskId: string;
}
export interface TaskFinalized {
    owner: string;
    taskId: string;
}
export declare enum TokenBridgeStatus {
    Invalid = "Invalid",
    Created = "Created",
    Approved = "Approved",
    Declined = "Declined"
}
export interface ITokenBridgeTask {
    taskData: ITaskData;
    sourceNode: INodeInfo;
    destinationNode: INodeInfo;
    networkHash: string;
    status: TokenBridgeStatus;
    confirmation: number;
    requiredConfirmations: number;
    fetch(): Promise<void>;
    execute(targetProvider: IWalletProvider): Promise<void>;
    withdraw(): Promise<void>;
}
export declare abstract class TokenBridgeTask extends WalletConsumer implements ITokenBridgeTask {
    protected _eventSource: string;
    protected _bridgeDestination: string;
    protected _tokenBridge: string;
    protected _signature: string;
    taskData: ITaskData;
    sourceNode: INodeInfo;
    destinationNode: INodeInfo;
    networkHash: string;
    status: TokenBridgeStatus;
    confirmation: number;
    requiredConfirmations: number;
    protected abstract _setup(): Promise<void>;
    fetch(): Promise<void>;
    execute(targetProvider: IWalletProvider): Promise<void>;
    withdraw(): Promise<void>;
}
export interface ITaskData {
    taskId?: string;
    creator?: string;
    targetNetwork?: string;
    targets?: string[];
    values?: number[];
    calldatas?: string[];
    userSeed?: number;
    startTime?: number;
    endTime?: number;
    signers?: string[];
    signersN?: number;
    signatures?: string[];
}
export declare function generateITaskData(task?: TaskCreated, ethereum?: boolean): ITaskData;
export declare function convertITaskData(task: ITaskData, ethereum: boolean): ITaskData;
export interface IOracleTask {
    taskId: string;
    verifyTask(): Promise<{
        bridge: string;
        node: INodeInfo;
        eventData: ITaskData;
        discrepency: boolean;
    }>;
    approveTask(provider: IWalletProvider, signature: string): Promise<void>;
    declineTask(provider: IWalletProvider, signature: string): Promise<void>;
}
export declare abstract class OracleTask implements IOracleTask {
    taskId: string;
    protected _bridge: string;
    protected _node: INodeInfo;
    protected _eventData: ITaskData;
    protected _peggedTask: boolean;
    protected _sourceProvider: IWalletProvider;
    protected _discrepency: boolean;
    constructor(taskId: string, _bridge: string, _node: INodeInfo, _eventData: ITaskData, _peggedTask: boolean, _sourceProvider: IWalletProvider);
    abstract verifyTask(): Promise<{
        bridge: string;
        node: INodeInfo;
        eventData: ITaskData;
        discrepency: boolean;
    }>;
    abstract approveTask(provider: IWalletProvider, signature: string): Promise<void>;
    abstract declineTask(provider: IWalletProvider, signature: string): Promise<void>;
}
