import { AddressSet } from "../utils/AddressSet.js"; import { AssetsMap } from "../utils/AssetsMap.js"; import { RouterCASlice, RouterCMSlice } from "./types.js"; import { OnchainSDK } from "../OnchainSDK.js"; import "../utils/index.js"; import { BaseContract, BaseContractArgs } from "../base/BaseContract.js"; import "../base/index.js"; import { Abi, Address } from "viem"; //#region src/onchain/router/AbstractRouterContract.d.ts export interface ExpectedAndLeftoverOptions { balances?: Leftovers; keepAssets?: Address[]; debtOnly?: boolean; } export interface Leftovers { expectedBalances: AssetsMap; leftoverBalances: AssetsMap; tokensToClaim: AssetsMap; } /** * @internal * Base class for router contract wrappers. * * Provides helpers that classify credit-account token balances into * "expected" (to be swapped) and "leftover" (to be kept) categories, * which concrete router implementations use when building optimised * multi-call swap paths. * * @typeParam abi - ABI type of the underlying router contract. **/ export declare abstract class AbstractRouterContract extends BaseContract { /** * Reference to the parent SDK instance. **/ readonly sdk: OnchainSDK; constructor(sdk: OnchainSDK, args: BaseContractArgs); protected getExpectedAndLeftover(ca: RouterCASlice, cm: RouterCMSlice, options?: ExpectedAndLeftoverOptions): Leftovers; protected getDefaultExpectedAndLeftover(ca: RouterCASlice, keepAssets?: Address[], debtOnly?: boolean): Leftovers; /** * Tries to sell just enough of the most valuable token to cover debt. * @param ca * @param keepAssets * @returns */ protected getLeftoversAfterBuyingDebt(ca: RouterCASlice, keepAssets: AddressSet): Leftovers | undefined; } //#endregion