import { Provider, TransactionResponse, TransactionRequest, TransactionReceipt } from '@ethersproject/abstract-provider';
import { Signer } from '@ethersproject/abstract-signer';
import { BigNumber, PayableOverrides, ethers } from 'ethers';
import { BedrockOutputData, BedrockCrossChainMessageProof } from '@tokamak-network/core-utils';
import { DepositTransactionRequest, OEContracts, OEContractsLike, NumberLike, SignerOrProviderLike, ProvenWithdrawal, WithdrawalMessageInfo, WithdrawalTransactionRequest, MessageStatus, StateRoot, StateRootBatch } from './interfaces';
import { DeepPartial } from './utils';
export declare class Portals {
    l1SignerOrProvider: Signer | Provider;
    l2SignerOrProvider: Signer | Provider;
    l1ChainId: number;
    l2ChainId: number;
    contracts: OEContracts;
    depositConfirmationBlocks: number;
    l1BlockTimeSeconds: number;
    bedrock: boolean;
    private _outputCache;
    constructor(opts: {
        l1SignerOrProvider: SignerOrProviderLike;
        l2SignerOrProvider: SignerOrProviderLike;
        l1ChainId: NumberLike;
        l2ChainId: NumberLike;
        depositConfirmationBlocks?: NumberLike;
        l1BlockTimeSeconds?: NumberLike;
        contracts?: DeepPartial<OEContractsLike>;
        bedrock?: boolean;
    });
    get l1Provider(): Provider;
    get l2Provider(): Provider;
    get l1Signer(): Signer;
    get l2Signer(): Signer;
    getL1BlockNumber(): Promise<number>;
    getMessageStatus(txReceipt: TransactionReceipt): Promise<MessageStatus>;
    getL1ToL2MessageStatusByReceipt(txReceipt: TransactionReceipt): Promise<MessageStatus>;
    getStateBatchAppendedEventByBatchIndex(batchIndex: number): Promise<ethers.Event | null>;
    getStateBatchAppendedEventByTransactionIndex(transactionIndex: number): Promise<ethers.Event | null>;
    getStateRootBatchByTransactionIndex(transactionIndex: number): Promise<StateRootBatch | null>;
    getMessageStateRoot(transactionHash: string): Promise<StateRoot | null>;
    getMessageBedrockOutput(l2BlockNumber: number): Promise<BedrockOutputData | null>;
    getL2ToL1MessageStatusByReceipt(txReceipt: TransactionReceipt): Promise<MessageStatus>;
    calculateRelayedDepositTxID(txReceipt: TransactionReceipt): Promise<string>;
    calculateWithdrawalMessage(txReceipt: TransactionReceipt): Promise<WithdrawalMessageInfo>;
    calculateWithdrawalMessageByL2TxHash(transactionHash: string): Promise<WithdrawalMessageInfo>;
    waitForMessageStatus(txReceipt: TransactionReceipt, status: MessageStatus, opts?: {
        pollIntervalMs?: number;
        timeoutMs?: number;
    }): Promise<void>;
    getChallengePeriodSeconds(): Promise<number>;
    getBedrockMessageProof(withdrawalMessageInfo: WithdrawalMessageInfo): Promise<BedrockCrossChainMessageProof>;
    getProvenWithdrawal(withdrawalHash: string): Promise<ProvenWithdrawal>;
    isValidOutputRoot(outputRoot: string, l2BlockNumber: number): Promise<boolean>;
    getFinalizedWithdrawalStatus(withdrawalHash: string): Promise<boolean>;
    depositTransaction(request: DepositTransactionRequest, opts?: {
        signer?: Signer;
    }): Promise<TransactionResponse>;
    initiateWithdrawal(request: WithdrawalTransactionRequest, opts?: {
        signer?: Signer;
    }): Promise<TransactionResponse>;
    proveWithdrawalTransaction(message: WithdrawalMessageInfo, opts?: {
        signer?: Signer;
    }): Promise<TransactionResponse>;
    proveWithdrawalTransactionUsingL2Tx(transactionHash: string, opts?: {
        signer?: Signer;
    }): Promise<TransactionResponse>;
    finalizeWithdrawalTransaction(message: WithdrawalMessageInfo, opts?: {
        signer?: Signer;
    }): Promise<TransactionResponse>;
    finalizeWithdrawalTransactionUsingL2Tx(transactionHash: string, opts?: {
        signer?: Signer;
    }): Promise<TransactionResponse>;
    fpac(): Promise<boolean>;
    populateTransaction: {
        depositTransaction: (request: DepositTransactionRequest) => Promise<TransactionRequest>;
        initiateWithdrawal: (request: WithdrawalTransactionRequest) => Promise<TransactionRequest>;
        proveWithdrawalTransaction: (message: WithdrawalMessageInfo, opts?: {
            overrides?: PayableOverrides;
        }) => Promise<TransactionRequest>;
        finalizeWithdrawalTransaction: (message: WithdrawalMessageInfo) => Promise<TransactionRequest>;
    };
    estimateGas: {
        depositTransaction: (request: DepositTransactionRequest) => Promise<BigNumber>;
        initiateWithdrawal: (request: WithdrawalTransactionRequest) => Promise<BigNumber>;
        proveWithdrawalTransaction: (message: WithdrawalMessageInfo, opts?: {
            overrides?: PayableOverrides;
        }) => Promise<BigNumber>;
        finalizeWithdrawalTransaction: (message: WithdrawalMessageInfo) => Promise<BigNumber>;
    };
}
