import { Event, BigNumber, Overrides, CallOverrides } from 'ethers'; import { Provider, BlockTag, TransactionRequest, TransactionResponse } from '@ethersproject/abstract-provider'; import { Signer } from '@ethersproject/abstract-signer'; import { MessageLike, MessageRequestLike, TransactionLike, AddressLike, NumberLike, CrossChainMessage, CrossChainMessageRequest, CrossChainMessageProof, MessageDirection, MessageStatus, TokenBridgeMessage, OEContracts, MessageReceipt, StateRoot, StateRootBatch, BridgeAdapters } from './types'; import { IBridgeAdapter } from './bridge-adapter'; export interface ICrossChainMessenger { l1SignerOrProvider: Signer | Provider; l2SignerOrProvider: Signer | Provider; l1ChainId: number; l2ChainId: number; contracts: OEContracts; bridges: BridgeAdapters; l1Provider: Provider; l2Provider: Provider; l1Signer: Signer; l2Signer: Signer; depositConfirmationBlocks: number; l1BlockTimeSeconds: number; getMessagesByTransaction(transaction: TransactionLike, opts?: { direction?: MessageDirection; }): 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): Promise; getMessageStatus(message: MessageLike): Promise; getMessageReceipt(message: MessageLike): Promise; waitForMessageReceipt(message: MessageLike, opts?: { confirmations?: number; pollIntervalMs?: number; timeoutMs?: number; }): Promise; waitForMessageStatus(message: MessageLike, status: MessageStatus, opts?: { pollIntervalMs?: number; timeoutMs?: number; }): Promise; estimateL2MessageGasLimit(message: MessageRequestLike, opts?: { bufferPercent?: number; from?: string; }): Promise; estimateMessageWaitTimeSeconds(message: MessageLike): Promise; getChallengePeriodSeconds(): Promise; getMessageStateRoot(message: MessageLike): Promise; getStateBatchAppendedEventByBatchIndex(batchIndex: number): Promise; getStateBatchAppendedEventByTransactionIndex(transactionIndex: number): Promise; getStateRootBatchByTransactionIndex(transactionIndex: number): Promise; getMessageProof(message: MessageLike): Promise; sendMessage(message: CrossChainMessageRequest, opts?: { signer?: Signer; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; resendMessage(message: MessageLike, messageGasLimit: NumberLike, opts?: { signer?: Signer; overrides?: Overrides; }): Promise; finalizeMessage(message: MessageLike, opts?: { signer?: Signer; overrides?: Overrides; }): Promise; depositETH(amount: NumberLike, opts?: { signer?: Signer; recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; withdrawETH(amount: NumberLike, opts?: { signer?: Signer; recipient?: AddressLike; 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?: { signer?: Signer; recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; withdrawERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { signer?: Signer; recipient?: AddressLike; overrides?: Overrides; }): Promise; populateTransaction: { sendMessage: (message: CrossChainMessageRequest, opts?: { l2GasLimit?: NumberLike; overrides?: Overrides; }) => Promise; resendMessage(message: MessageLike, messageGasLimit: NumberLike, opts?: { overrides?: Overrides; }): Promise; finalizeMessage(message: MessageLike, opts?: { overrides?: Overrides; }): Promise; approveERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { overrides?: Overrides; }): Promise; depositETH(amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; withdrawETH(amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: Overrides; }): Promise; depositERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: Overrides; }): 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; finalizeMessage(message: MessageLike, opts?: { overrides?: CallOverrides; }): Promise; approveERC20(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { overrides?: CallOverrides; }): Promise; depositETH(amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: CallOverrides; }): Promise; withdrawETH(amount: NumberLike, opts?: { recipient?: AddressLike; 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; }; }