import type { BedrockCrossChainMessageProof, BedrockOutputData } from '@eth-optimism/core-utils'; import type { BlockTag, TransactionRequest, TransactionResponse } from '@ethersproject/abstract-provider'; import { Provider } from '@ethersproject/abstract-provider'; import type { Signer } from '@ethersproject/abstract-signer'; import type { CallOverrides, Overrides, PayableOverrides } from 'ethers'; import { BigNumber, ethers } from 'ethers'; import type { AddressLike, BridgeAdapterData, BridgeAdapters, CrossChainMessage, CrossChainMessageProof, CrossChainMessageRequest, IBridgeAdapter, LowLevelMessage, MessageLike, MessageReceipt, MessageRequestLike, NumberLike, OEContracts, OEContractsLike, ProvenWithdrawal, SignerOrProviderLike, StateRoot, StateRootBatch, TokenBridgeMessage, TransactionLike } from './interfaces'; import { MessageDirection, MessageStatus } from './interfaces'; import type { DeepPartial } from './utils'; export declare class CrossChainMessenger { l1SignerOrProvider: Signer | Provider; l2SignerOrProvider: Signer | Provider; l1ChainId: number; l2ChainId: number; contracts: OEContracts; bridges: BridgeAdapters; depositConfirmationBlocks: number; l1BlockTimeSeconds: number; bedrock: boolean; private _outputCache; constructor(opts: { l1SignerOrProvider: SignerOrProviderLike; l2SignerOrProvider: SignerOrProviderLike; l1ChainId: NumberLike; l2ChainId: NumberLike; depositConfirmationBlocks?: NumberLike; l1BlockTimeSeconds?: NumberLike; contracts?: DeepPartial; bridges?: BridgeAdapterData; bedrock?: boolean; }); get l1Provider(): Provider; get l2Provider(): Provider; get l1Signer(): Signer; get l2Signer(): Signer; fpac(): Promise; getMessagesByTransaction(transaction: TransactionLike, opts?: { direction?: MessageDirection; }): Promise; toBedrockCrossChainMessage(message: MessageLike, messageIndex?: number): Promise; toLowLevelMessage(message: MessageLike, messageIndex?: number): Promise; getBridgeForTokenPair(l1Token: AddressLike, l2Token: AddressLike): Promise; getDepositsByAddress(address: AddressLike, opts?: { fromBlock?: BlockTag; toBlock?: BlockTag; }): Promise; getWithdrawalsByAddress(address: AddressLike, opts?: { fromBlock?: BlockTag; toBlock?: BlockTag; }): Promise; toCrossChainMessage(message: MessageLike, messageIndex?: number): Promise; getMessageStatus(message: MessageLike, messageIndex?: number, fromBlockOrBlockHash?: BlockTag, toBlockOrBlockHash?: BlockTag): Promise; getMessageReceipt(message: MessageLike, messageIndex?: number, fromBlockOrBlockHash?: BlockTag, toBlockOrHash?: BlockTag): Promise; waitForMessageReceipt(message: MessageLike, opts?: { fromBlockOrBlockHash?: BlockTag; toBlockOrHash?: BlockTag; confirmations?: number; pollIntervalMs?: number; timeoutMs?: number; }, messageIndex?: number): Promise; waitForMessageStatus(message: MessageLike, status: MessageStatus, opts?: { fromBlockOrBlockHash?: BlockTag; toBlockOrBlockHash?: BlockTag; pollIntervalMs?: number; timeoutMs?: number; }, messageIndex?: number): Promise; estimateL2MessageGasLimit(message: MessageRequestLike, opts?: { bufferPercent?: number; from?: string; }, messageIndex?: number): Promise; estimateMessageWaitTimeSeconds(message: MessageLike, messageIndex?: number, fromBlockOrBlockHash?: BlockTag, toBlockOrBlockHash?: BlockTag): Promise; getChallengePeriodSeconds(): Promise; getProvenWithdrawal(withdrawalHash: string): Promise; isValidOutputRoot(outputRoot: string, l2BlockNumber: number): Promise; getMessageBedrockOutput(message: MessageLike, messageIndex?: number): Promise; getMessageStateRoot(message: MessageLike, messageIndex?: number): Promise; getStateBatchAppendedEventByBatchIndex(batchIndex: number): Promise; getStateBatchAppendedEventByTransactionIndex(transactionIndex: number): Promise; getStateRootBatchByTransactionIndex(transactionIndex: number): Promise; getMessageProof(message: MessageLike, messageIndex?: number): Promise; getBedrockMessageProof(message: MessageLike, messageIndex?: number): Promise; sendMessage(message: CrossChainMessageRequest, opts?: { signer?: Signer; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; resendMessage(message: MessageLike, messageGasLimit: NumberLike, opts?: { signer?: Signer; overrides?: Overrides; }): Promise; proveMessage(message: MessageLike, opts?: { signer?: Signer; overrides?: Overrides; }, messageIndex?: number): Promise; finalizeMessage(message: MessageLike, opts?: { signer?: Signer; overrides?: PayableOverrides; }, messageIndex?: number): Promise; depositETH(amount: NumberLike, opts?: { recipient?: AddressLike; signer?: Signer; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; withdrawETH(amount: NumberLike, opts?: { recipient?: AddressLike; signer?: Signer; overrides?: Overrides; }): Promise; approval(l1Token: AddressLike, l2Token: AddressLike, opts?: { signer?: Signer; }): Promise; approveERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { signer?: Signer; overrides?: Overrides; }): Promise; depositERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; signer?: Signer; l2GasLimit?: NumberLike; overrides?: CallOverrides; }): Promise; withdrawERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; signer?: Signer; overrides?: Overrides; }): Promise; populateTransaction: { sendMessage: (message: CrossChainMessageRequest, opts?: { l2GasLimit?: NumberLike; overrides?: Overrides; }) => Promise; resendMessage: (message: MessageLike, messageGasLimit: NumberLike, opts?: { overrides?: Overrides; }, messageIndex?: number) => Promise; proveMessage: (message: MessageLike, opts?: { overrides?: PayableOverrides; }, messageIndex?: number) => Promise; finalizeMessage: (message: MessageLike, opts?: { overrides?: PayableOverrides; }, messageIndex?: number) => Promise; depositETH: (amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: PayableOverrides; }, isEstimatingGas?: boolean) => Promise; withdrawETH: (amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: Overrides; }) => Promise; approveERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { overrides?: Overrides; }) => Promise; depositERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: CallOverrides; }, isEstimatingGas?: boolean) => Promise; withdrawERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: Overrides; }) => Promise; }; estimateGas: { sendMessage: (message: CrossChainMessageRequest, opts?: { l2GasLimit?: NumberLike; overrides?: CallOverrides; }) => Promise; resendMessage: (message: MessageLike, messageGasLimit: NumberLike, opts?: { overrides?: CallOverrides; }) => Promise; proveMessage: (message: MessageLike, opts?: { overrides?: CallOverrides; }, messageIndex?: number) => Promise; finalizeMessage: (message: MessageLike, opts?: { overrides?: CallOverrides; }, messageIndex?: number) => Promise; depositETH: (amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: CallOverrides; }) => Promise; withdrawETH: (amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: CallOverrides; }) => Promise; approveERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { overrides?: CallOverrides; }) => Promise; depositERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: CallOverrides; }) => Promise; withdrawERC20: (l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: CallOverrides; }) => Promise; }; }