import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, EventFragment, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener, TypedContractMethod } from "../../common";
export interface SimplePSMV2Interface extends Interface {
    getFunction(nameOrSignature: "BASIS_POINTS" | "DEFAULT_ADMIN_ROLE" | "EXCHANGE_RATE_SCALE" | "MAX_EXIT_FEE" | "MAX_RESERVE_DRIFT" | "UPGRADE_INTERFACE_VERSION" | "VERSION" | "addReserves" | "addSupportedStablecoin" | "adminModule" | "canRedeem" | "controller" | "exchangeRates" | "exitFees" | "feeBalance" | "feeRecipientRegistry" | "fees" | "forceSyncReserves" | "getAvailableReserves" | "getRedemptionQuote" | "getRoleAdmin" | "getRoleMember" | "getRoleMemberCount" | "getRoleMembers" | "getSwapQuote" | "grantRole" | "hasRole" | "initialize" | "initializeAdminModule" | "initializeV2" | "lastOperationBlock" | "lastRedeemCapUpdateBlock" | "lastSwapCapUpdateBlock" | "maxRedeemAmounts" | "maxRedeemVolumePerBlock" | "maxSwapAmounts" | "maxSwapVolumePerBlock" | "minRedeemAmounts" | "minSwapAmounts" | "operationCount" | "pause" | "paused" | "proxiableUUID" | "redeem" | "redeemEnabled" | "redeemVolumeByBlock" | "removeSupportedStablecoin" | "renounceRole" | "reserves" | "revokeRole" | "setAdminModule" | "setFeeRecipientRegistry" | "setRedeemEnabled" | "setRedeemVolumeCap" | "setSwapVolumeCap" | "stablecoinDecimals" | "supportedStablecoins" | "supportsInterface" | "swap" | "swapVolumeByBlock" | "syncReserves" | "transferFee" | "ucdDecimals" | "ucdToken" | "unpause" | "updateSupportedStablecoin" | "upgradeToAndCall" | "withdrawStablecoin"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "AdminModuleUpdated" | "ContractPaused" | "ContractUnpaused" | "ContractUpgraded" | "EntryFeeUpdated" | "ExchangeRateUpdated" | "ExitFeeUpdated" | "FeeRecipientRegistryUpdated" | "FeeTransferred" | "Initialized" | "Paused" | "Redeem" | "RedeemVolumeCapUpdated" | "RedemptionStatusChanged" | "ReserveUpdated" | "RoleAdminChanged" | "RoleGranted" | "RoleRevoked" | "StablecoinAdded" | "StablecoinRemoved" | "StablecoinUpdated" | "Swap" | "SwapVolumeCapUpdated" | "Unpaused" | "Upgraded"): EventFragment;
    encodeFunctionData(functionFragment: "BASIS_POINTS", values?: undefined): string;
    encodeFunctionData(functionFragment: "DEFAULT_ADMIN_ROLE", values?: undefined): string;
    encodeFunctionData(functionFragment: "EXCHANGE_RATE_SCALE", values?: undefined): string;
    encodeFunctionData(functionFragment: "MAX_EXIT_FEE", values?: undefined): string;
    encodeFunctionData(functionFragment: "MAX_RESERVE_DRIFT", values?: undefined): string;
    encodeFunctionData(functionFragment: "UPGRADE_INTERFACE_VERSION", values?: undefined): string;
    encodeFunctionData(functionFragment: "VERSION", values?: undefined): string;
    encodeFunctionData(functionFragment: "addReserves", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "addSupportedStablecoin", values: [
        AddressLike,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish
    ]): string;
    encodeFunctionData(functionFragment: "adminModule", values?: undefined): string;
    encodeFunctionData(functionFragment: "canRedeem", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "controller", values?: undefined): string;
    encodeFunctionData(functionFragment: "exchangeRates", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "exitFees", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "feeBalance", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "feeRecipientRegistry", values?: undefined): string;
    encodeFunctionData(functionFragment: "fees", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "forceSyncReserves", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "getAvailableReserves", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "getRedemptionQuote", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "getRoleAdmin", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "getRoleMember", values: [BytesLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "getRoleMemberCount", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "getRoleMembers", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "getSwapQuote", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "grantRole", values: [BytesLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "hasRole", values: [BytesLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "initialize", values: [AddressLike, AddressLike, AddressLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "initializeAdminModule", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "initializeV2", values: [boolean, AddressLike[], BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "lastOperationBlock", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "lastRedeemCapUpdateBlock", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "lastSwapCapUpdateBlock", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "maxRedeemAmounts", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "maxRedeemVolumePerBlock", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "maxSwapAmounts", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "maxSwapVolumePerBlock", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "minRedeemAmounts", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "minSwapAmounts", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "operationCount", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "pause", values?: undefined): string;
    encodeFunctionData(functionFragment: "paused", values?: undefined): string;
    encodeFunctionData(functionFragment: "proxiableUUID", values?: undefined): string;
    encodeFunctionData(functionFragment: "redeem", values: [AddressLike, BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "redeemEnabled", values?: undefined): string;
    encodeFunctionData(functionFragment: "redeemVolumeByBlock", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "removeSupportedStablecoin", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "renounceRole", values: [BytesLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "reserves", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "revokeRole", values: [BytesLike, AddressLike]): string;
    encodeFunctionData(functionFragment: "setAdminModule", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "setFeeRecipientRegistry", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "setRedeemEnabled", values: [boolean]): string;
    encodeFunctionData(functionFragment: "setRedeemVolumeCap", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "setSwapVolumeCap", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "stablecoinDecimals", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "supportedStablecoins", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "supportsInterface", values: [BytesLike]): string;
    encodeFunctionData(functionFragment: "swap", values: [AddressLike, BigNumberish, BigNumberish]): string;
    encodeFunctionData(functionFragment: "swapVolumeByBlock", values: [AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "syncReserves", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "transferFee", values: [AddressLike, AddressLike, BigNumberish]): string;
    encodeFunctionData(functionFragment: "ucdDecimals", values?: undefined): string;
    encodeFunctionData(functionFragment: "ucdToken", values?: undefined): string;
    encodeFunctionData(functionFragment: "unpause", values?: undefined): string;
    encodeFunctionData(functionFragment: "updateSupportedStablecoin", values: [
        AddressLike,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish
    ]): string;
    encodeFunctionData(functionFragment: "upgradeToAndCall", values: [AddressLike, BytesLike]): string;
    encodeFunctionData(functionFragment: "withdrawStablecoin", values: [AddressLike, BigNumberish]): string;
    decodeFunctionResult(functionFragment: "BASIS_POINTS", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "DEFAULT_ADMIN_ROLE", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "EXCHANGE_RATE_SCALE", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "MAX_EXIT_FEE", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "MAX_RESERVE_DRIFT", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "UPGRADE_INTERFACE_VERSION", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "VERSION", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "addReserves", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "addSupportedStablecoin", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "adminModule", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "canRedeem", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "controller", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "exchangeRates", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "exitFees", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "feeBalance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "feeRecipientRegistry", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "fees", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "forceSyncReserves", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getAvailableReserves", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRedemptionQuote", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRoleAdmin", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRoleMember", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRoleMemberCount", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRoleMembers", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getSwapQuote", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initializeAdminModule", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initializeV2", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "lastOperationBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "lastRedeemCapUpdateBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "lastSwapCapUpdateBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "maxRedeemAmounts", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "maxRedeemVolumePerBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "maxSwapAmounts", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "maxSwapVolumePerBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "minRedeemAmounts", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "minSwapAmounts", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "operationCount", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "paused", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "proxiableUUID", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "redeem", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "redeemEnabled", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "redeemVolumeByBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "removeSupportedStablecoin", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "renounceRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "reserves", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setAdminModule", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setFeeRecipientRegistry", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setRedeemEnabled", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setRedeemVolumeCap", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setSwapVolumeCap", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "stablecoinDecimals", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "supportedStablecoins", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "supportsInterface", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "swap", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "swapVolumeByBlock", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "syncReserves", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferFee", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "ucdDecimals", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "ucdToken", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "updateSupportedStablecoin", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "upgradeToAndCall", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdrawStablecoin", data: BytesLike): Result;
}
export declare namespace AdminModuleUpdatedEvent {
    type InputTuple = [
        oldAdminModule: AddressLike,
        newAdminModule: AddressLike
    ];
    type OutputTuple = [oldAdminModule: string, newAdminModule: string];
    interface OutputObject {
        oldAdminModule: string;
        newAdminModule: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ContractPausedEvent {
    type InputTuple = [caller: AddressLike, timestamp: BigNumberish];
    type OutputTuple = [caller: string, timestamp: bigint];
    interface OutputObject {
        caller: string;
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ContractUnpausedEvent {
    type InputTuple = [caller: AddressLike, timestamp: BigNumberish];
    type OutputTuple = [caller: string, timestamp: bigint];
    interface OutputObject {
        caller: string;
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ContractUpgradedEvent {
    type InputTuple = [
        oldImplementation: AddressLike,
        newImplementation: AddressLike,
        version: string,
        timestamp: BigNumberish
    ];
    type OutputTuple = [
        oldImplementation: string,
        newImplementation: string,
        version: string,
        timestamp: bigint
    ];
    interface OutputObject {
        oldImplementation: string;
        newImplementation: string;
        version: string;
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace EntryFeeUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        oldFee: BigNumberish,
        newFee: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        oldFee: bigint,
        newFee: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        oldFee: bigint;
        newFee: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ExchangeRateUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        oldRate: BigNumberish,
        newRate: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        oldRate: bigint,
        newRate: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        oldRate: bigint;
        newRate: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ExitFeeUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        oldFee: BigNumberish,
        newFee: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        oldFee: bigint,
        newFee: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        oldFee: bigint;
        newFee: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace FeeRecipientRegistryUpdatedEvent {
    type InputTuple = [oldRegistry: AddressLike, newRegistry: AddressLike];
    type OutputTuple = [oldRegistry: string, newRegistry: string];
    interface OutputObject {
        oldRegistry: string;
        newRegistry: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace FeeTransferredEvent {
    type InputTuple = [
        token: AddressLike,
        recipient: AddressLike,
        amount: BigNumberish,
        timestamp: BigNumberish
    ];
    type OutputTuple = [
        token: string,
        recipient: string,
        amount: bigint,
        timestamp: bigint
    ];
    interface OutputObject {
        token: string;
        recipient: string;
        amount: bigint;
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace InitializedEvent {
    type InputTuple = [version: BigNumberish];
    type OutputTuple = [version: bigint];
    interface OutputObject {
        version: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace PausedEvent {
    type InputTuple = [account: AddressLike];
    type OutputTuple = [account: string];
    interface OutputObject {
        account: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RedeemEvent {
    type InputTuple = [
        user: AddressLike,
        stablecoin: AddressLike,
        ucdAmount: BigNumberish,
        stablecoinAmount: BigNumberish,
        exitFee: BigNumberish,
        timestamp: BigNumberish
    ];
    type OutputTuple = [
        user: string,
        stablecoin: string,
        ucdAmount: bigint,
        stablecoinAmount: bigint,
        exitFee: bigint,
        timestamp: bigint
    ];
    interface OutputObject {
        user: string;
        stablecoin: string;
        ucdAmount: bigint;
        stablecoinAmount: bigint;
        exitFee: bigint;
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RedeemVolumeCapUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        oldCap: BigNumberish,
        newCap: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        oldCap: bigint,
        newCap: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        oldCap: bigint;
        newCap: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RedemptionStatusChangedEvent {
    type InputTuple = [enabled: boolean];
    type OutputTuple = [enabled: boolean];
    interface OutputObject {
        enabled: boolean;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace ReserveUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        oldReserve: BigNumberish,
        newReserve: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        oldReserve: bigint,
        newReserve: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        oldReserve: bigint;
        newReserve: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RoleAdminChangedEvent {
    type InputTuple = [
        role: BytesLike,
        previousAdminRole: BytesLike,
        newAdminRole: BytesLike
    ];
    type OutputTuple = [
        role: string,
        previousAdminRole: string,
        newAdminRole: string
    ];
    interface OutputObject {
        role: string;
        previousAdminRole: string;
        newAdminRole: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RoleGrantedEvent {
    type InputTuple = [
        role: BytesLike,
        account: AddressLike,
        sender: AddressLike
    ];
    type OutputTuple = [role: string, account: string, sender: string];
    interface OutputObject {
        role: string;
        account: string;
        sender: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RoleRevokedEvent {
    type InputTuple = [
        role: BytesLike,
        account: AddressLike,
        sender: AddressLike
    ];
    type OutputTuple = [role: string, account: string, sender: string];
    interface OutputObject {
        role: string;
        account: string;
        sender: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace StablecoinAddedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        exchangeRate: BigNumberish,
        fee: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        exchangeRate: bigint,
        fee: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        exchangeRate: bigint;
        fee: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace StablecoinRemovedEvent {
    type InputTuple = [stablecoin: AddressLike];
    type OutputTuple = [stablecoin: string];
    interface OutputObject {
        stablecoin: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace StablecoinUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        exchangeRate: BigNumberish,
        entryFeeBps: BigNumberish,
        exitFeeBps: BigNumberish,
        decimals: BigNumberish,
        minSwapAmount: BigNumberish,
        minRedeemAmount: BigNumberish,
        maxSwapAmount: BigNumberish,
        maxRedeemAmount: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        exchangeRate: bigint,
        entryFeeBps: bigint,
        exitFeeBps: bigint,
        decimals: bigint,
        minSwapAmount: bigint,
        minRedeemAmount: bigint,
        maxSwapAmount: bigint,
        maxRedeemAmount: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        exchangeRate: bigint;
        entryFeeBps: bigint;
        exitFeeBps: bigint;
        decimals: bigint;
        minSwapAmount: bigint;
        minRedeemAmount: bigint;
        maxSwapAmount: bigint;
        maxRedeemAmount: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SwapEvent {
    type InputTuple = [
        user: AddressLike,
        stablecoin: AddressLike,
        stablecoinAmount: BigNumberish,
        ucdAmount: BigNumberish,
        fee: BigNumberish,
        timestamp: BigNumberish
    ];
    type OutputTuple = [
        user: string,
        stablecoin: string,
        stablecoinAmount: bigint,
        ucdAmount: bigint,
        fee: bigint,
        timestamp: bigint
    ];
    interface OutputObject {
        user: string;
        stablecoin: string;
        stablecoinAmount: bigint;
        ucdAmount: bigint;
        fee: bigint;
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace SwapVolumeCapUpdatedEvent {
    type InputTuple = [
        stablecoin: AddressLike,
        oldCap: BigNumberish,
        newCap: BigNumberish
    ];
    type OutputTuple = [
        stablecoin: string,
        oldCap: bigint,
        newCap: bigint
    ];
    interface OutputObject {
        stablecoin: string;
        oldCap: bigint;
        newCap: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace UnpausedEvent {
    type InputTuple = [account: AddressLike];
    type OutputTuple = [account: string];
    interface OutputObject {
        account: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace UpgradedEvent {
    type InputTuple = [implementation: AddressLike];
    type OutputTuple = [implementation: string];
    interface OutputObject {
        implementation: string;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface SimplePSMV2 extends BaseContract {
    connect(runner?: ContractRunner | null): SimplePSMV2;
    waitForDeployment(): Promise<this>;
    interface: SimplePSMV2Interface;
    queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
    listeners(eventName?: string): Promise<Array<Listener>>;
    removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
    BASIS_POINTS: TypedContractMethod<[], [bigint], "view">;
    DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">;
    EXCHANGE_RATE_SCALE: TypedContractMethod<[], [bigint], "view">;
    MAX_EXIT_FEE: TypedContractMethod<[], [bigint], "view">;
    MAX_RESERVE_DRIFT: TypedContractMethod<[], [bigint], "view">;
    UPGRADE_INTERFACE_VERSION: TypedContractMethod<[], [string], "view">;
    VERSION: TypedContractMethod<[], [string], "view">;
    addReserves: TypedContractMethod<[
        stablecoin: AddressLike,
        amount: BigNumberish
    ], [
        void
    ], "nonpayable">;
    addSupportedStablecoin: TypedContractMethod<[
        stablecoin: AddressLike,
        exchangeRate: BigNumberish,
        entryFeeBps: BigNumberish,
        exitFeeBps: BigNumberish,
        decimals: BigNumberish,
        minSwapAmount: BigNumberish,
        minRedeemAmount: BigNumberish,
        maxSwapAmount: BigNumberish,
        maxRedeemAmount: BigNumberish,
        initialSwapVolumeCap: BigNumberish,
        initialRedeemVolumeCap: BigNumberish
    ], [
        void
    ], "nonpayable">;
    adminModule: TypedContractMethod<[], [string], "view">;
    canRedeem: TypedContractMethod<[
        stablecoin: AddressLike,
        ucdAmount: BigNumberish
    ], [
        boolean
    ], "view">;
    controller: TypedContractMethod<[], [string], "view">;
    exchangeRates: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    exitFees: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    feeBalance: TypedContractMethod<[token: AddressLike], [bigint], "view">;
    feeRecipientRegistry: TypedContractMethod<[], [string], "view">;
    fees: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    forceSyncReserves: TypedContractMethod<[
        stablecoin: AddressLike
    ], [
        void
    ], "nonpayable">;
    getAvailableReserves: TypedContractMethod<[
        stablecoin: AddressLike
    ], [
        bigint
    ], "view">;
    getRedemptionQuote: TypedContractMethod<[
        stablecoin: AddressLike,
        ucdAmount: BigNumberish
    ], [
        [bigint, bigint] & {
            stablecoinOut: bigint;
            exitFee: bigint;
        }
    ], "view">;
    getRoleAdmin: TypedContractMethod<[role: BytesLike], [string], "view">;
    getRoleMember: TypedContractMethod<[
        role: BytesLike,
        index: BigNumberish
    ], [
        string
    ], "view">;
    getRoleMemberCount: TypedContractMethod<[role: BytesLike], [bigint], "view">;
    getRoleMembers: TypedContractMethod<[role: BytesLike], [string[]], "view">;
    getSwapQuote: TypedContractMethod<[
        stablecoin: AddressLike,
        amountIn: BigNumberish
    ], [
        [bigint, bigint] & {
            ucdOut: bigint;
            fee: bigint;
        }
    ], "view">;
    grantRole: TypedContractMethod<[
        role: BytesLike,
        account: AddressLike
    ], [
        void
    ], "nonpayable">;
    hasRole: TypedContractMethod<[
        role: BytesLike,
        account: AddressLike
    ], [
        boolean
    ], "view">;
    initialize: TypedContractMethod<[
        _controller: AddressLike,
        _ucdToken: AddressLike,
        _admin: AddressLike,
        _adminModule: AddressLike
    ], [
        void
    ], "nonpayable">;
    initializeAdminModule: TypedContractMethod<[
        _adminModule: AddressLike
    ], [
        void
    ], "nonpayable">;
    initializeV2: TypedContractMethod<[
        _redeemEnabled: boolean,
        stablecoins: AddressLike[],
        initialExitFees: BigNumberish[]
    ], [
        void
    ], "nonpayable">;
    lastOperationBlock: TypedContractMethod<[
        arg0: AddressLike
    ], [
        bigint
    ], "view">;
    lastRedeemCapUpdateBlock: TypedContractMethod<[
        arg0: AddressLike
    ], [
        bigint
    ], "view">;
    lastSwapCapUpdateBlock: TypedContractMethod<[
        arg0: AddressLike
    ], [
        bigint
    ], "view">;
    maxRedeemAmounts: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    maxRedeemVolumePerBlock: TypedContractMethod<[
        arg0: AddressLike
    ], [
        bigint
    ], "view">;
    maxSwapAmounts: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    maxSwapVolumePerBlock: TypedContractMethod<[
        arg0: AddressLike
    ], [
        bigint
    ], "view">;
    minRedeemAmounts: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    minSwapAmounts: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    operationCount: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    pause: TypedContractMethod<[], [void], "nonpayable">;
    paused: TypedContractMethod<[], [boolean], "view">;
    proxiableUUID: TypedContractMethod<[], [string], "view">;
    redeem: TypedContractMethod<[
        stablecoin: AddressLike,
        ucdAmount: BigNumberish,
        minStablecoinOut: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    redeemEnabled: TypedContractMethod<[], [boolean], "view">;
    redeemVolumeByBlock: TypedContractMethod<[
        arg0: AddressLike,
        arg1: BigNumberish
    ], [
        bigint
    ], "view">;
    removeSupportedStablecoin: TypedContractMethod<[
        stablecoin: AddressLike
    ], [
        void
    ], "nonpayable">;
    renounceRole: TypedContractMethod<[
        role: BytesLike,
        callerConfirmation: AddressLike
    ], [
        void
    ], "nonpayable">;
    reserves: TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    revokeRole: TypedContractMethod<[
        role: BytesLike,
        account: AddressLike
    ], [
        void
    ], "nonpayable">;
    setAdminModule: TypedContractMethod<[
        newAdminModule: AddressLike
    ], [
        void
    ], "nonpayable">;
    setFeeRecipientRegistry: TypedContractMethod<[
        registry: AddressLike
    ], [
        void
    ], "nonpayable">;
    setRedeemEnabled: TypedContractMethod<[
        enabled: boolean
    ], [
        void
    ], "nonpayable">;
    setRedeemVolumeCap: TypedContractMethod<[
        stablecoin: AddressLike,
        cap: BigNumberish
    ], [
        void
    ], "nonpayable">;
    setSwapVolumeCap: TypedContractMethod<[
        stablecoin: AddressLike,
        cap: BigNumberish
    ], [
        void
    ], "nonpayable">;
    stablecoinDecimals: TypedContractMethod<[
        arg0: AddressLike
    ], [
        bigint
    ], "view">;
    supportedStablecoins: TypedContractMethod<[
        arg0: AddressLike
    ], [
        boolean
    ], "view">;
    supportsInterface: TypedContractMethod<[
        interfaceId: BytesLike
    ], [
        boolean
    ], "view">;
    swap: TypedContractMethod<[
        stablecoin: AddressLike,
        amountIn: BigNumberish,
        minUcdOut: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    swapVolumeByBlock: TypedContractMethod<[
        arg0: AddressLike,
        arg1: BigNumberish
    ], [
        bigint
    ], "view">;
    syncReserves: TypedContractMethod<[
        stablecoin: AddressLike
    ], [
        void
    ], "nonpayable">;
    transferFee: TypedContractMethod<[
        token: AddressLike,
        recipient: AddressLike,
        amount: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    ucdDecimals: TypedContractMethod<[], [bigint], "view">;
    ucdToken: TypedContractMethod<[], [string], "view">;
    unpause: TypedContractMethod<[], [void], "nonpayable">;
    updateSupportedStablecoin: TypedContractMethod<[
        stablecoin: AddressLike,
        exchangeRate: BigNumberish,
        entryFeeBps: BigNumberish,
        exitFeeBps: BigNumberish,
        decimals: BigNumberish,
        minSwapAmount: BigNumberish,
        minRedeemAmount: BigNumberish,
        maxSwapAmount: BigNumberish,
        maxRedeemAmount: BigNumberish
    ], [
        void
    ], "nonpayable">;
    upgradeToAndCall: TypedContractMethod<[
        newImplementation: AddressLike,
        data: BytesLike
    ], [
        void
    ], "payable">;
    withdrawStablecoin: TypedContractMethod<[
        stablecoin: AddressLike,
        amount: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "BASIS_POINTS"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "DEFAULT_ADMIN_ROLE"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "EXCHANGE_RATE_SCALE"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "MAX_EXIT_FEE"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "MAX_RESERVE_DRIFT"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "UPGRADE_INTERFACE_VERSION"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "VERSION"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "addReserves"): TypedContractMethod<[
        stablecoin: AddressLike,
        amount: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "addSupportedStablecoin"): TypedContractMethod<[
        stablecoin: AddressLike,
        exchangeRate: BigNumberish,
        entryFeeBps: BigNumberish,
        exitFeeBps: BigNumberish,
        decimals: BigNumberish,
        minSwapAmount: BigNumberish,
        minRedeemAmount: BigNumberish,
        maxSwapAmount: BigNumberish,
        maxRedeemAmount: BigNumberish,
        initialSwapVolumeCap: BigNumberish,
        initialRedeemVolumeCap: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "adminModule"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "canRedeem"): TypedContractMethod<[
        stablecoin: AddressLike,
        ucdAmount: BigNumberish
    ], [
        boolean
    ], "view">;
    getFunction(nameOrSignature: "controller"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "exchangeRates"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "exitFees"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "feeBalance"): TypedContractMethod<[token: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "feeRecipientRegistry"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "fees"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "forceSyncReserves"): TypedContractMethod<[stablecoin: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "getAvailableReserves"): TypedContractMethod<[stablecoin: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "getRedemptionQuote"): TypedContractMethod<[
        stablecoin: AddressLike,
        ucdAmount: BigNumberish
    ], [
        [bigint, bigint] & {
            stablecoinOut: bigint;
            exitFee: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "getRoleAdmin"): TypedContractMethod<[role: BytesLike], [string], "view">;
    getFunction(nameOrSignature: "getRoleMember"): TypedContractMethod<[
        role: BytesLike,
        index: BigNumberish
    ], [
        string
    ], "view">;
    getFunction(nameOrSignature: "getRoleMemberCount"): TypedContractMethod<[role: BytesLike], [bigint], "view">;
    getFunction(nameOrSignature: "getRoleMembers"): TypedContractMethod<[role: BytesLike], [string[]], "view">;
    getFunction(nameOrSignature: "getSwapQuote"): TypedContractMethod<[
        stablecoin: AddressLike,
        amountIn: BigNumberish
    ], [
        [bigint, bigint] & {
            ucdOut: bigint;
            fee: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "grantRole"): TypedContractMethod<[
        role: BytesLike,
        account: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "hasRole"): TypedContractMethod<[
        role: BytesLike,
        account: AddressLike
    ], [
        boolean
    ], "view">;
    getFunction(nameOrSignature: "initialize"): TypedContractMethod<[
        _controller: AddressLike,
        _ucdToken: AddressLike,
        _admin: AddressLike,
        _adminModule: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "initializeAdminModule"): TypedContractMethod<[_adminModule: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "initializeV2"): TypedContractMethod<[
        _redeemEnabled: boolean,
        stablecoins: AddressLike[],
        initialExitFees: BigNumberish[]
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "lastOperationBlock"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "lastRedeemCapUpdateBlock"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "lastSwapCapUpdateBlock"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "maxRedeemAmounts"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "maxRedeemVolumePerBlock"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "maxSwapAmounts"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "maxSwapVolumePerBlock"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "minRedeemAmounts"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "minSwapAmounts"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "operationCount"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "pause"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "paused"): TypedContractMethod<[], [boolean], "view">;
    getFunction(nameOrSignature: "proxiableUUID"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "redeem"): TypedContractMethod<[
        stablecoin: AddressLike,
        ucdAmount: BigNumberish,
        minStablecoinOut: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    getFunction(nameOrSignature: "redeemEnabled"): TypedContractMethod<[], [boolean], "view">;
    getFunction(nameOrSignature: "redeemVolumeByBlock"): TypedContractMethod<[
        arg0: AddressLike,
        arg1: BigNumberish
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "removeSupportedStablecoin"): TypedContractMethod<[stablecoin: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "renounceRole"): TypedContractMethod<[
        role: BytesLike,
        callerConfirmation: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "reserves"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "revokeRole"): TypedContractMethod<[
        role: BytesLike,
        account: AddressLike
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "setAdminModule"): TypedContractMethod<[newAdminModule: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "setFeeRecipientRegistry"): TypedContractMethod<[registry: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "setRedeemEnabled"): TypedContractMethod<[enabled: boolean], [void], "nonpayable">;
    getFunction(nameOrSignature: "setRedeemVolumeCap"): TypedContractMethod<[
        stablecoin: AddressLike,
        cap: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "setSwapVolumeCap"): TypedContractMethod<[
        stablecoin: AddressLike,
        cap: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "stablecoinDecimals"): TypedContractMethod<[arg0: AddressLike], [bigint], "view">;
    getFunction(nameOrSignature: "supportedStablecoins"): TypedContractMethod<[arg0: AddressLike], [boolean], "view">;
    getFunction(nameOrSignature: "supportsInterface"): TypedContractMethod<[interfaceId: BytesLike], [boolean], "view">;
    getFunction(nameOrSignature: "swap"): TypedContractMethod<[
        stablecoin: AddressLike,
        amountIn: BigNumberish,
        minUcdOut: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    getFunction(nameOrSignature: "swapVolumeByBlock"): TypedContractMethod<[
        arg0: AddressLike,
        arg1: BigNumberish
    ], [
        bigint
    ], "view">;
    getFunction(nameOrSignature: "syncReserves"): TypedContractMethod<[stablecoin: AddressLike], [void], "nonpayable">;
    getFunction(nameOrSignature: "transferFee"): TypedContractMethod<[
        token: AddressLike,
        recipient: AddressLike,
        amount: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    getFunction(nameOrSignature: "ucdDecimals"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "ucdToken"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "unpause"): TypedContractMethod<[], [void], "nonpayable">;
    getFunction(nameOrSignature: "updateSupportedStablecoin"): TypedContractMethod<[
        stablecoin: AddressLike,
        exchangeRate: BigNumberish,
        entryFeeBps: BigNumberish,
        exitFeeBps: BigNumberish,
        decimals: BigNumberish,
        minSwapAmount: BigNumberish,
        minRedeemAmount: BigNumberish,
        maxSwapAmount: BigNumberish,
        maxRedeemAmount: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "upgradeToAndCall"): TypedContractMethod<[
        newImplementation: AddressLike,
        data: BytesLike
    ], [
        void
    ], "payable">;
    getFunction(nameOrSignature: "withdrawStablecoin"): TypedContractMethod<[
        stablecoin: AddressLike,
        amount: BigNumberish
    ], [
        void
    ], "nonpayable">;
    getEvent(key: "AdminModuleUpdated"): TypedContractEvent<AdminModuleUpdatedEvent.InputTuple, AdminModuleUpdatedEvent.OutputTuple, AdminModuleUpdatedEvent.OutputObject>;
    getEvent(key: "ContractPaused"): TypedContractEvent<ContractPausedEvent.InputTuple, ContractPausedEvent.OutputTuple, ContractPausedEvent.OutputObject>;
    getEvent(key: "ContractUnpaused"): TypedContractEvent<ContractUnpausedEvent.InputTuple, ContractUnpausedEvent.OutputTuple, ContractUnpausedEvent.OutputObject>;
    getEvent(key: "ContractUpgraded"): TypedContractEvent<ContractUpgradedEvent.InputTuple, ContractUpgradedEvent.OutputTuple, ContractUpgradedEvent.OutputObject>;
    getEvent(key: "EntryFeeUpdated"): TypedContractEvent<EntryFeeUpdatedEvent.InputTuple, EntryFeeUpdatedEvent.OutputTuple, EntryFeeUpdatedEvent.OutputObject>;
    getEvent(key: "ExchangeRateUpdated"): TypedContractEvent<ExchangeRateUpdatedEvent.InputTuple, ExchangeRateUpdatedEvent.OutputTuple, ExchangeRateUpdatedEvent.OutputObject>;
    getEvent(key: "ExitFeeUpdated"): TypedContractEvent<ExitFeeUpdatedEvent.InputTuple, ExitFeeUpdatedEvent.OutputTuple, ExitFeeUpdatedEvent.OutputObject>;
    getEvent(key: "FeeRecipientRegistryUpdated"): TypedContractEvent<FeeRecipientRegistryUpdatedEvent.InputTuple, FeeRecipientRegistryUpdatedEvent.OutputTuple, FeeRecipientRegistryUpdatedEvent.OutputObject>;
    getEvent(key: "FeeTransferred"): TypedContractEvent<FeeTransferredEvent.InputTuple, FeeTransferredEvent.OutputTuple, FeeTransferredEvent.OutputObject>;
    getEvent(key: "Initialized"): TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
    getEvent(key: "Paused"): TypedContractEvent<PausedEvent.InputTuple, PausedEvent.OutputTuple, PausedEvent.OutputObject>;
    getEvent(key: "Redeem"): TypedContractEvent<RedeemEvent.InputTuple, RedeemEvent.OutputTuple, RedeemEvent.OutputObject>;
    getEvent(key: "RedeemVolumeCapUpdated"): TypedContractEvent<RedeemVolumeCapUpdatedEvent.InputTuple, RedeemVolumeCapUpdatedEvent.OutputTuple, RedeemVolumeCapUpdatedEvent.OutputObject>;
    getEvent(key: "RedemptionStatusChanged"): TypedContractEvent<RedemptionStatusChangedEvent.InputTuple, RedemptionStatusChangedEvent.OutputTuple, RedemptionStatusChangedEvent.OutputObject>;
    getEvent(key: "ReserveUpdated"): TypedContractEvent<ReserveUpdatedEvent.InputTuple, ReserveUpdatedEvent.OutputTuple, ReserveUpdatedEvent.OutputObject>;
    getEvent(key: "RoleAdminChanged"): TypedContractEvent<RoleAdminChangedEvent.InputTuple, RoleAdminChangedEvent.OutputTuple, RoleAdminChangedEvent.OutputObject>;
    getEvent(key: "RoleGranted"): TypedContractEvent<RoleGrantedEvent.InputTuple, RoleGrantedEvent.OutputTuple, RoleGrantedEvent.OutputObject>;
    getEvent(key: "RoleRevoked"): TypedContractEvent<RoleRevokedEvent.InputTuple, RoleRevokedEvent.OutputTuple, RoleRevokedEvent.OutputObject>;
    getEvent(key: "StablecoinAdded"): TypedContractEvent<StablecoinAddedEvent.InputTuple, StablecoinAddedEvent.OutputTuple, StablecoinAddedEvent.OutputObject>;
    getEvent(key: "StablecoinRemoved"): TypedContractEvent<StablecoinRemovedEvent.InputTuple, StablecoinRemovedEvent.OutputTuple, StablecoinRemovedEvent.OutputObject>;
    getEvent(key: "StablecoinUpdated"): TypedContractEvent<StablecoinUpdatedEvent.InputTuple, StablecoinUpdatedEvent.OutputTuple, StablecoinUpdatedEvent.OutputObject>;
    getEvent(key: "Swap"): TypedContractEvent<SwapEvent.InputTuple, SwapEvent.OutputTuple, SwapEvent.OutputObject>;
    getEvent(key: "SwapVolumeCapUpdated"): TypedContractEvent<SwapVolumeCapUpdatedEvent.InputTuple, SwapVolumeCapUpdatedEvent.OutputTuple, SwapVolumeCapUpdatedEvent.OutputObject>;
    getEvent(key: "Unpaused"): TypedContractEvent<UnpausedEvent.InputTuple, UnpausedEvent.OutputTuple, UnpausedEvent.OutputObject>;
    getEvent(key: "Upgraded"): TypedContractEvent<UpgradedEvent.InputTuple, UpgradedEvent.OutputTuple, UpgradedEvent.OutputObject>;
    filters: {
        "AdminModuleUpdated(address,address)": TypedContractEvent<AdminModuleUpdatedEvent.InputTuple, AdminModuleUpdatedEvent.OutputTuple, AdminModuleUpdatedEvent.OutputObject>;
        AdminModuleUpdated: TypedContractEvent<AdminModuleUpdatedEvent.InputTuple, AdminModuleUpdatedEvent.OutputTuple, AdminModuleUpdatedEvent.OutputObject>;
        "ContractPaused(address,uint256)": TypedContractEvent<ContractPausedEvent.InputTuple, ContractPausedEvent.OutputTuple, ContractPausedEvent.OutputObject>;
        ContractPaused: TypedContractEvent<ContractPausedEvent.InputTuple, ContractPausedEvent.OutputTuple, ContractPausedEvent.OutputObject>;
        "ContractUnpaused(address,uint256)": TypedContractEvent<ContractUnpausedEvent.InputTuple, ContractUnpausedEvent.OutputTuple, ContractUnpausedEvent.OutputObject>;
        ContractUnpaused: TypedContractEvent<ContractUnpausedEvent.InputTuple, ContractUnpausedEvent.OutputTuple, ContractUnpausedEvent.OutputObject>;
        "ContractUpgraded(address,address,string,uint256)": TypedContractEvent<ContractUpgradedEvent.InputTuple, ContractUpgradedEvent.OutputTuple, ContractUpgradedEvent.OutputObject>;
        ContractUpgraded: TypedContractEvent<ContractUpgradedEvent.InputTuple, ContractUpgradedEvent.OutputTuple, ContractUpgradedEvent.OutputObject>;
        "EntryFeeUpdated(address,uint256,uint256)": TypedContractEvent<EntryFeeUpdatedEvent.InputTuple, EntryFeeUpdatedEvent.OutputTuple, EntryFeeUpdatedEvent.OutputObject>;
        EntryFeeUpdated: TypedContractEvent<EntryFeeUpdatedEvent.InputTuple, EntryFeeUpdatedEvent.OutputTuple, EntryFeeUpdatedEvent.OutputObject>;
        "ExchangeRateUpdated(address,uint256,uint256)": TypedContractEvent<ExchangeRateUpdatedEvent.InputTuple, ExchangeRateUpdatedEvent.OutputTuple, ExchangeRateUpdatedEvent.OutputObject>;
        ExchangeRateUpdated: TypedContractEvent<ExchangeRateUpdatedEvent.InputTuple, ExchangeRateUpdatedEvent.OutputTuple, ExchangeRateUpdatedEvent.OutputObject>;
        "ExitFeeUpdated(address,uint256,uint256)": TypedContractEvent<ExitFeeUpdatedEvent.InputTuple, ExitFeeUpdatedEvent.OutputTuple, ExitFeeUpdatedEvent.OutputObject>;
        ExitFeeUpdated: TypedContractEvent<ExitFeeUpdatedEvent.InputTuple, ExitFeeUpdatedEvent.OutputTuple, ExitFeeUpdatedEvent.OutputObject>;
        "FeeRecipientRegistryUpdated(address,address)": TypedContractEvent<FeeRecipientRegistryUpdatedEvent.InputTuple, FeeRecipientRegistryUpdatedEvent.OutputTuple, FeeRecipientRegistryUpdatedEvent.OutputObject>;
        FeeRecipientRegistryUpdated: TypedContractEvent<FeeRecipientRegistryUpdatedEvent.InputTuple, FeeRecipientRegistryUpdatedEvent.OutputTuple, FeeRecipientRegistryUpdatedEvent.OutputObject>;
        "FeeTransferred(address,address,uint256,uint256)": TypedContractEvent<FeeTransferredEvent.InputTuple, FeeTransferredEvent.OutputTuple, FeeTransferredEvent.OutputObject>;
        FeeTransferred: TypedContractEvent<FeeTransferredEvent.InputTuple, FeeTransferredEvent.OutputTuple, FeeTransferredEvent.OutputObject>;
        "Initialized(uint64)": TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
        Initialized: TypedContractEvent<InitializedEvent.InputTuple, InitializedEvent.OutputTuple, InitializedEvent.OutputObject>;
        "Paused(address)": TypedContractEvent<PausedEvent.InputTuple, PausedEvent.OutputTuple, PausedEvent.OutputObject>;
        Paused: TypedContractEvent<PausedEvent.InputTuple, PausedEvent.OutputTuple, PausedEvent.OutputObject>;
        "Redeem(address,address,uint256,uint256,uint256,uint256)": TypedContractEvent<RedeemEvent.InputTuple, RedeemEvent.OutputTuple, RedeemEvent.OutputObject>;
        Redeem: TypedContractEvent<RedeemEvent.InputTuple, RedeemEvent.OutputTuple, RedeemEvent.OutputObject>;
        "RedeemVolumeCapUpdated(address,uint256,uint256)": TypedContractEvent<RedeemVolumeCapUpdatedEvent.InputTuple, RedeemVolumeCapUpdatedEvent.OutputTuple, RedeemVolumeCapUpdatedEvent.OutputObject>;
        RedeemVolumeCapUpdated: TypedContractEvent<RedeemVolumeCapUpdatedEvent.InputTuple, RedeemVolumeCapUpdatedEvent.OutputTuple, RedeemVolumeCapUpdatedEvent.OutputObject>;
        "RedemptionStatusChanged(bool)": TypedContractEvent<RedemptionStatusChangedEvent.InputTuple, RedemptionStatusChangedEvent.OutputTuple, RedemptionStatusChangedEvent.OutputObject>;
        RedemptionStatusChanged: TypedContractEvent<RedemptionStatusChangedEvent.InputTuple, RedemptionStatusChangedEvent.OutputTuple, RedemptionStatusChangedEvent.OutputObject>;
        "ReserveUpdated(address,uint256,uint256)": TypedContractEvent<ReserveUpdatedEvent.InputTuple, ReserveUpdatedEvent.OutputTuple, ReserveUpdatedEvent.OutputObject>;
        ReserveUpdated: TypedContractEvent<ReserveUpdatedEvent.InputTuple, ReserveUpdatedEvent.OutputTuple, ReserveUpdatedEvent.OutputObject>;
        "RoleAdminChanged(bytes32,bytes32,bytes32)": TypedContractEvent<RoleAdminChangedEvent.InputTuple, RoleAdminChangedEvent.OutputTuple, RoleAdminChangedEvent.OutputObject>;
        RoleAdminChanged: TypedContractEvent<RoleAdminChangedEvent.InputTuple, RoleAdminChangedEvent.OutputTuple, RoleAdminChangedEvent.OutputObject>;
        "RoleGranted(bytes32,address,address)": TypedContractEvent<RoleGrantedEvent.InputTuple, RoleGrantedEvent.OutputTuple, RoleGrantedEvent.OutputObject>;
        RoleGranted: TypedContractEvent<RoleGrantedEvent.InputTuple, RoleGrantedEvent.OutputTuple, RoleGrantedEvent.OutputObject>;
        "RoleRevoked(bytes32,address,address)": TypedContractEvent<RoleRevokedEvent.InputTuple, RoleRevokedEvent.OutputTuple, RoleRevokedEvent.OutputObject>;
        RoleRevoked: TypedContractEvent<RoleRevokedEvent.InputTuple, RoleRevokedEvent.OutputTuple, RoleRevokedEvent.OutputObject>;
        "StablecoinAdded(address,uint256,uint256)": TypedContractEvent<StablecoinAddedEvent.InputTuple, StablecoinAddedEvent.OutputTuple, StablecoinAddedEvent.OutputObject>;
        StablecoinAdded: TypedContractEvent<StablecoinAddedEvent.InputTuple, StablecoinAddedEvent.OutputTuple, StablecoinAddedEvent.OutputObject>;
        "StablecoinRemoved(address)": TypedContractEvent<StablecoinRemovedEvent.InputTuple, StablecoinRemovedEvent.OutputTuple, StablecoinRemovedEvent.OutputObject>;
        StablecoinRemoved: TypedContractEvent<StablecoinRemovedEvent.InputTuple, StablecoinRemovedEvent.OutputTuple, StablecoinRemovedEvent.OutputObject>;
        "StablecoinUpdated(address,uint256,uint256,uint256,uint8,uint256,uint256,uint256,uint256)": TypedContractEvent<StablecoinUpdatedEvent.InputTuple, StablecoinUpdatedEvent.OutputTuple, StablecoinUpdatedEvent.OutputObject>;
        StablecoinUpdated: TypedContractEvent<StablecoinUpdatedEvent.InputTuple, StablecoinUpdatedEvent.OutputTuple, StablecoinUpdatedEvent.OutputObject>;
        "Swap(address,address,uint256,uint256,uint256,uint256)": TypedContractEvent<SwapEvent.InputTuple, SwapEvent.OutputTuple, SwapEvent.OutputObject>;
        Swap: TypedContractEvent<SwapEvent.InputTuple, SwapEvent.OutputTuple, SwapEvent.OutputObject>;
        "SwapVolumeCapUpdated(address,uint256,uint256)": TypedContractEvent<SwapVolumeCapUpdatedEvent.InputTuple, SwapVolumeCapUpdatedEvent.OutputTuple, SwapVolumeCapUpdatedEvent.OutputObject>;
        SwapVolumeCapUpdated: TypedContractEvent<SwapVolumeCapUpdatedEvent.InputTuple, SwapVolumeCapUpdatedEvent.OutputTuple, SwapVolumeCapUpdatedEvent.OutputObject>;
        "Unpaused(address)": TypedContractEvent<UnpausedEvent.InputTuple, UnpausedEvent.OutputTuple, UnpausedEvent.OutputObject>;
        Unpaused: TypedContractEvent<UnpausedEvent.InputTuple, UnpausedEvent.OutputTuple, UnpausedEvent.OutputObject>;
        "Upgraded(address)": TypedContractEvent<UpgradedEvent.InputTuple, UpgradedEvent.OutputTuple, UpgradedEvent.OutputObject>;
        Upgraded: TypedContractEvent<UpgradedEvent.InputTuple, UpgradedEvent.OutputTuple, UpgradedEvent.OutputObject>;
    };
}
