import type { Abi, Address } from "viem"; import { BaseContract, type BaseContractArgs } from "../base/index.js"; import type { IPriceOracleContract } from "../market/index.js"; import type { OnchainSDK } from "../OnchainSDK.js"; import { AddressMap, AddressSet } from "../utils/index.js"; import type { Asset, RouterCASlice, RouterCMSlice } from "./types.js"; export interface ExpectedAndLeftoverOptions { balances?: Leftovers; keepAssets?: Address[]; debtOnly?: boolean; } export interface Leftovers { expectedBalances: AddressMap; leftoverBalances: AddressMap; tokensToClaim: AddressMap; } /** * @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; protected safeConvertToUSD(priceOracle: IPriceOracleContract, token: Address, balance: bigint): bigint; protected safeConvertFromUSD(priceOracle: IPriceOracleContract, token: Address, balance: bigint): bigint; }