import { FetcherResult, OraclePriceEntry, ParseContext } from '../types';
/**
 * Exactly oracle price fetcher.
 *
 * Exactly is a fixed-rate/fixed-maturity POOL protocol (Optimism + Base). Its
 * `Previewer.exactly(account)` view returns every market with a `usdPrice`
 * field — a DIRECT USD price (1e18-scaled) sourced from the market's own
 * Chainlink price feed (the same oracle Exactly liquidates against). So unlike
 * Morpho/Midnight (whose oracles return collateral priced in the loan asset and
 * need a second-pass USD derivation), Exactly prices are direct USD and belong
 * in PASS 1 — they feed the shared `usdPrices` map for every Exactly asset.
 *
 * Why a dedicated fetcher (not cross-protocol flattening): Exactly lists assets
 * no other protocol on its chains prices (e.g. cbXRP on Base), so without this
 * their markets would have no oracle price. It also uses Exactly's own feed for
 * the assets other protocols DO cover, which is the correct oracle for risk.
 *
 * One `Previewer.exactly(address(0))` call per chain returns the whole set, so
 * the fetcher emits a single call and the parser fans the result out to one
 * entry per market asset, keyed under `EXACTLY_<market>`.
 */
/** Grouped metadata: the previewer answering the single aggregate call. */
interface ExactlyChainMeta {
    previewer: string;
}
/** Build the (single) multicall call for Exactly oracle prices. */
export declare function getExactlyCalls(chainId: string): FetcherResult<ExactlyChainMeta>[];
/**
 * Parse the aggregate `Previewer.exactly` result into direct-USD price entries.
 *
 * `data[0]` is the decoded `MarketAccount[]`. Each carries `market`, `asset`
 * and `usdPrice` (1e18-scaled USD). One entry per market asset, priced in USD,
 * keyed under the per-market `EXACTLY_<market>` lender so the marketUids join
 * the Exactly lending data emitted by `convertExactlyMarketsToResponse`.
 */
export declare function parseExactlyResults(data: any[], _meta: ExactlyChainMeta, context: ParseContext): OraclePriceEntry[];
/** ABI for the Exactly oracle call (the Previewer aggregate view). */
export declare function getExactlyAbi(): readonly [{
    readonly type: "function";
    readonly name: "exactly";
    readonly stateMutability: "view";
    readonly inputs: readonly [{
        readonly name: "account";
        readonly type: "address";
    }];
    readonly outputs: readonly [{
        readonly name: "data";
        readonly type: "tuple[]";
        readonly components: readonly [{
            readonly name: "market";
            readonly type: "address";
        }, {
            readonly name: "symbol";
            readonly type: "string";
        }, {
            readonly name: "decimals";
            readonly type: "uint8";
        }, {
            readonly name: "asset";
            readonly type: "address";
        }, {
            readonly name: "assetName";
            readonly type: "string";
        }, {
            readonly name: "assetSymbol";
            readonly type: "string";
        }, {
            readonly name: "interestRateModel";
            readonly type: "tuple";
            readonly components: readonly [{
                readonly name: "id";
                readonly type: "address";
            }, {
                readonly name: "parameters";
                readonly type: "tuple";
                readonly components: readonly [{
                    readonly name: "minRate";
                    readonly type: "uint256";
                }, {
                    readonly name: "naturalRate";
                    readonly type: "uint256";
                }, {
                    readonly name: "maxUtilization";
                    readonly type: "uint256";
                }, {
                    readonly name: "naturalUtilization";
                    readonly type: "uint256";
                }, {
                    readonly name: "growthSpeed";
                    readonly type: "uint256";
                }, {
                    readonly name: "sigmoidSpeed";
                    readonly type: "uint256";
                }, {
                    readonly name: "spreadFactor";
                    readonly type: "uint256";
                }, {
                    readonly name: "maturitySpeed";
                    readonly type: "uint256";
                }, {
                    readonly name: "timePreference";
                    readonly type: "int256";
                }, {
                    readonly name: "fixedAllocation";
                    readonly type: "uint256";
                }, {
                    readonly name: "maxRate";
                    readonly type: "uint256";
                }];
            }];
        }, {
            readonly name: "usdPrice";
            readonly type: "uint256";
        }, {
            readonly name: "penaltyRate";
            readonly type: "uint256";
        }, {
            readonly name: "adjustFactor";
            readonly type: "uint256";
        }, {
            readonly name: "maxFuturePools";
            readonly type: "uint8";
        }, {
            readonly name: "reserveFactor";
            readonly type: "uint256";
        }, {
            readonly name: "fixedPools";
            readonly type: "tuple[]";
            readonly components: readonly [{
                readonly name: "maturity";
                readonly type: "uint256";
            }, {
                readonly name: "borrowed";
                readonly type: "uint256";
            }, {
                readonly name: "supplied";
                readonly type: "uint256";
            }, {
                readonly name: "available";
                readonly type: "uint256";
            }, {
                readonly name: "utilization";
                readonly type: "uint256";
            }, {
                readonly name: "depositRate";
                readonly type: "uint256";
            }, {
                readonly name: "minBorrowRate";
                readonly type: "uint256";
            }, {
                readonly name: "optimalDeposit";
                readonly type: "uint256";
            }];
        }, {
            readonly name: "rewardRates";
            readonly type: "tuple[]";
            readonly components: readonly [{
                readonly name: "asset";
                readonly type: "address";
            }, {
                readonly name: "assetName";
                readonly type: "string";
            }, {
                readonly name: "assetSymbol";
                readonly type: "string";
            }, {
                readonly name: "usdPrice";
                readonly type: "uint256";
            }, {
                readonly name: "borrow";
                readonly type: "uint256";
            }, {
                readonly name: "floatingDeposit";
                readonly type: "uint256";
            }, {
                readonly name: "maturities";
                readonly type: "uint256[]";
            }];
        }, {
            readonly name: "floatingBorrowRate";
            readonly type: "uint256";
        }, {
            readonly name: "floatingUtilization";
            readonly type: "uint256";
        }, {
            readonly name: "floatingAssets";
            readonly type: "uint256";
        }, {
            readonly name: "floatingDebt";
            readonly type: "uint256";
        }, {
            readonly name: "floatingBackupBorrowed";
            readonly type: "uint256";
        }, {
            readonly name: "floatingAvailableAssets";
            readonly type: "uint256";
        }, {
            readonly name: "totalFloatingBorrowAssets";
            readonly type: "uint256";
        }, {
            readonly name: "totalFloatingDepositAssets";
            readonly type: "uint256";
        }, {
            readonly name: "totalFloatingBorrowShares";
            readonly type: "uint256";
        }, {
            readonly name: "totalFloatingDepositShares";
            readonly type: "uint256";
        }, {
            readonly name: "isCollateral";
            readonly type: "bool";
        }, {
            readonly name: "maxBorrowAssets";
            readonly type: "uint256";
        }, {
            readonly name: "floatingBorrowShares";
            readonly type: "uint256";
        }, {
            readonly name: "floatingBorrowAssets";
            readonly type: "uint256";
        }, {
            readonly name: "floatingDepositShares";
            readonly type: "uint256";
        }, {
            readonly name: "floatingDepositAssets";
            readonly type: "uint256";
        }, {
            readonly name: "fixedDepositPositions";
            readonly type: "tuple[]";
            readonly components: readonly [{
                readonly name: "maturity";
                readonly type: "uint256";
            }, {
                readonly name: "previewValue";
                readonly type: "uint256";
            }, {
                readonly name: "position";
                readonly type: "tuple";
                readonly components: readonly [{
                    readonly name: "principal";
                    readonly type: "uint256";
                }, {
                    readonly name: "fee";
                    readonly type: "uint256";
                }];
            }];
        }, {
            readonly name: "fixedBorrowPositions";
            readonly type: "tuple[]";
            readonly components: readonly [{
                readonly name: "maturity";
                readonly type: "uint256";
            }, {
                readonly name: "previewValue";
                readonly type: "uint256";
            }, {
                readonly name: "position";
                readonly type: "tuple";
                readonly components: readonly [{
                    readonly name: "principal";
                    readonly type: "uint256";
                }, {
                    readonly name: "fee";
                    readonly type: "uint256";
                }];
            }];
        }, {
            readonly name: "claimableRewards";
            readonly type: "tuple[]";
            readonly components: readonly [{
                readonly name: "asset";
                readonly type: "address";
            }, {
                readonly name: "assetName";
                readonly type: "string";
            }, {
                readonly name: "assetSymbol";
                readonly type: "string";
            }, {
                readonly name: "amount";
                readonly type: "uint256";
            }];
        }];
    }];
}, {
    readonly type: "function";
    readonly name: "previewBorrowAtMaturity";
    readonly stateMutability: "view";
    readonly inputs: readonly [{
        readonly name: "market";
        readonly type: "address";
    }, {
        readonly name: "maturity";
        readonly type: "uint256";
    }, {
        readonly name: "assets";
        readonly type: "uint256";
    }];
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "tuple";
        readonly components: readonly [{
            readonly name: "maturity";
            readonly type: "uint256";
        }, {
            readonly name: "assets";
            readonly type: "uint256";
        }, {
            readonly name: "utilization";
            readonly type: "uint256";
        }];
    }];
}, {
    readonly type: "function";
    readonly name: "previewDepositAtMaturity";
    readonly stateMutability: "view";
    readonly inputs: readonly [{
        readonly name: "market";
        readonly type: "address";
    }, {
        readonly name: "maturity";
        readonly type: "uint256";
    }, {
        readonly name: "assets";
        readonly type: "uint256";
    }];
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "tuple";
        readonly components: readonly [{
            readonly name: "maturity";
            readonly type: "uint256";
        }, {
            readonly name: "assets";
            readonly type: "uint256";
        }, {
            readonly name: "utilization";
            readonly type: "uint256";
        }];
    }];
}, {
    readonly type: "function";
    readonly name: "previewRepayAtMaturity";
    readonly stateMutability: "view";
    readonly inputs: readonly [{
        readonly name: "market";
        readonly type: "address";
    }, {
        readonly name: "maturity";
        readonly type: "uint256";
    }, {
        readonly name: "positionAssets";
        readonly type: "uint256";
    }, {
        readonly name: "borrower";
        readonly type: "address";
    }];
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "tuple";
        readonly components: readonly [{
            readonly name: "maturity";
            readonly type: "uint256";
        }, {
            readonly name: "assets";
            readonly type: "uint256";
        }, {
            readonly name: "utilization";
            readonly type: "uint256";
        }];
    }];
}, {
    readonly type: "function";
    readonly name: "previewWithdrawAtMaturity";
    readonly stateMutability: "view";
    readonly inputs: readonly [{
        readonly name: "market";
        readonly type: "address";
    }, {
        readonly name: "maturity";
        readonly type: "uint256";
    }, {
        readonly name: "positionAssets";
        readonly type: "uint256";
    }, {
        readonly name: "owner";
        readonly type: "address";
    }];
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "tuple";
        readonly components: readonly [{
            readonly name: "maturity";
            readonly type: "uint256";
        }, {
            readonly name: "assets";
            readonly type: "uint256";
        }, {
            readonly name: "utilization";
            readonly type: "uint256";
        }];
    }];
}, {
    readonly type: "function";
    readonly name: "auditor";
    readonly stateMutability: "view";
    readonly inputs: readonly [];
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "address";
    }];
}];
/** Exactly Oracle Fetcher module. */
export declare const exactlyFetcher: {
    getCalls: typeof getExactlyCalls;
    parse: typeof parseExactlyResults;
    getAbi: typeof getExactlyAbi;
};
export {};
//# sourceMappingURL=exactly.d.ts.map