import { AztecAddress, Fr } from '@aztec/aztec.js';
import { CheatCodes } from '@aztec/aztec/testing';
import type { RollupContract } from '@aztec/ethereum';
import type { TestDateProvider } from '@aztec/foundation/timer';
import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
import type { TokenSimulator } from './token_simulator.js';
/**
 * Contains utilities to compute the "key" for private holdings in the public state.
 */
export declare class LendingAccount {
    /** The address that owns this account */
    readonly address: AztecAddress;
    /** The secret used for private deposits */
    readonly secret: Fr;
    constructor(address: AztecAddress, secret: Fr);
    /**
     * Computes the key for the private holdings of this account.
     * @returns Key in public space
     */
    key(): Promise<Fr>;
}
/**
 * Helper class that emulates the logic of the lending contract. Used to have a "twin" to check values against.
 */
export declare class LendingSimulator {
    private cc;
    private account;
    private rate;
    private ethereumSlotDuration;
    /** the rollup contract */
    rollup: RollupContract;
    /** the lending contract */
    lendingContract: LendingContract;
    /** the collateral asset used in the lending contract */
    collateralAsset: TokenSimulator;
    /** the stable-coin borrowed in the lending contract */
    stableCoin: TokenSimulator;
    /** interest rate accumulator */
    accumulator: bigint;
    /** the timestamp of the simulator*/
    time: number;
    private collateral;
    private staticDebt;
    private borrowed;
    private mintedOutside;
    constructor(cc: CheatCodes, account: LendingAccount, rate: bigint, ethereumSlotDuration: number, 
    /** the rollup contract */
    rollup: RollupContract, 
    /** the lending contract */
    lendingContract: LendingContract, 
    /** the collateral asset used in the lending contract */
    collateralAsset: TokenSimulator, 
    /** the stable-coin borrowed in the lending contract */
    stableCoin: TokenSimulator);
    prepare(): Promise<void>;
    progressSlots(diff: number, dateProvider?: TestDateProvider): Promise<void>;
    depositPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
    depositPublic(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
    private deposit;
    withdraw(owner: Fr, recipient: AztecAddress, amount: bigint): void;
    borrow(owner: Fr, recipient: AztecAddress, amount: bigint): void;
    repayPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
    repayPublic(from: AztecAddress, onBehalfOf: Fr, amount: bigint): void;
    private repay;
    mintStableCoinOutsideLoan(recipient: AztecAddress, amount: bigint, priv?: boolean): void;
    check(): Promise<void>;
}
//# sourceMappingURL=lending_simulator.d.ts.map