import type { BlockTag, TransactionRequest, TransactionResponse } from '@ethersproject/abstract-provider'; import type { BigNumber, CallOverrides, Contract, Overrides, PayableOverrides, Signer } from 'ethers'; import type { CrossChainMessenger } from '../cross-chain-messenger'; import type { AddressLike, NumberLike, TokenBridgeMessage } from './types'; export interface IBridgeAdapter { messenger: CrossChainMessenger; l1Bridge: Contract; l2Bridge: Contract; getDepositsByAddress(address: AddressLike, opts?: { fromBlock?: BlockTag; toBlock?: BlockTag; }): Promise; getWithdrawalsByAddress(address: AddressLike, opts?: { fromBlock?: BlockTag; toBlock?: BlockTag; }): Promise; supportsTokenPair(l1Token: AddressLike, l2Token: AddressLike): Promise; approval(l1Token: AddressLike, l2Token: AddressLike, signer: Signer): Promise; approve(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, signer: Signer, opts?: { overrides?: Overrides; }): Promise; deposit(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, signer: Signer, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: Overrides; }): Promise; withdraw(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, signer: Signer, opts?: { recipient?: AddressLike; overrides?: Overrides; }): Promise; populateTransaction: { approve(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { overrides?: Overrides; }): Promise; deposit(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: PayableOverrides; }): Promise; withdraw(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: Overrides; }): Promise; }; estimateGas: { approve(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { overrides?: CallOverrides; }): Promise; deposit(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; l2GasLimit?: NumberLike; overrides?: CallOverrides; }): Promise; withdraw(l1Token: AddressLike, l2Token: AddressLike, amount: NumberLike, opts?: { recipient?: AddressLike; overrides?: CallOverrides; }): Promise; }; }