import { Provider } from '@ethersproject/abstract-provider'; import { BigNumber } from '@ethersproject/bignumber'; import { BigNumberish } from 'ethers'; import { Router } from './router'; import { AddressMap } from '../constants'; import { BridgeRoute, FeeConfig, SynapseModule, SynapseModuleSet } from '../module'; import { Query } from '../module/query'; export declare type ChainProvider = { chainId: number; provider: Provider; }; export declare type RouterConstructor = new (chainId: number, provider: Provider, address: string) => Router; /** * Abstract class for a set of routers existing on a few chains. Handles Router interactions * on a set of chains: the RouterSet users don't need to know which Router contract is used. * * The class children should provide the router addresses for each chain, as well as the Router constructor. * * @property moduleName The name of the bridge module used by the routers. * @property routers Collection of Router instances indexed by chainId. * @property providers Collection of Provider instances indexed by chainId. */ export declare abstract class RouterSet extends SynapseModuleSet { routers: { [chainId: number]: Router; }; providers: { [chainId: number]: Provider; }; /** * Constructor for a RouterSet class. * It creates the Router instances for each chain that has both a provider and a router address. */ constructor(chains: ChainProvider[], addressMap: AddressMap, ctor: RouterConstructor); /** * @inheritdoc SynapseModuleSet.getModule */ getModule(chainId: number): SynapseModule | undefined; /** * @inheritdoc SynapseModuleSet.getBridgeRoutes */ getBridgeRoutes(originChainId: number, destChainId: number, tokenIn: string, tokenOut: string, amountIn: BigNumberish): Promise; /** * @inheritdoc SynapseModuleSet.getFeeData */ getFeeData(bridgeRoute: BridgeRoute): Promise<{ feeAmount: BigNumber; feeConfig: FeeConfig; }>; /** * @inheritdoc SynapseModuleSet.getDefaultPeriods */ getDefaultPeriods(): { originPeriod: number; destPeriod: number; }; /** * @inheritdoc SynapseModuleSet.applySlippage */ applySlippage(originQueryPrecise: Query, destQueryPrecise: Query, slipNumerator: number, slipDenominator: number): { originQuery: Query; destQuery: Query; }; }