// SPDX-License-Identifier: MIT pragma solidity ^0.8.21; interface IV2x { event AccountLiquidated(address indexed account, uint256 snxRedeemed, uint256 amountLiquidated, address liquidator); event Approval(address indexed owner, address indexed spender, uint256 value); event AtomicSynthExchange(address indexed account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress); event CacheUpdated(bytes32 name, address destination); event ExchangeRebate(address indexed account, bytes32 currencyKey, uint256 amount); event ExchangeReclaim(address indexed account, bytes32 currencyKey, uint256 amount); event ExchangeTracking(bytes32 indexed trackingCode, bytes32 toCurrencyKey, uint256 toAmount, uint256 fee); event OwnerChanged(address oldOwner, address newOwner); event OwnerNominated(address newOwner); event ProxyUpdated(address proxyAddress); event SynthExchange(address indexed account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress); event TokenStateUpdated(address newTokenState); event Transfer(address indexed from, address indexed to, uint256 value); function CONTRACT_NAME() external view returns (bytes32); function DECIMALS() external view returns (uint8); function TOKEN_NAME() external view returns (string memory); function TOKEN_SYMBOL() external view returns (string memory); function acceptOwnership() external; function allowance(address owner, address spender) external view returns (uint256); function anySynthOrSNXRateIsInvalid() external view returns (bool anyRateInvalid); function approve(address spender, uint256 value) external returns (bool); function availableCurrencyKeys() external view returns (bytes32[] memory); function availableSynthCount() external view returns (uint256); function availableSynths(uint256 index) external view returns (address); function balanceOf(address account) external view returns (uint256); function burnSecondary(address, uint256) external; function burnSynths(uint256 amount) external; function burnSynthsOnBehalf(address burnForAddress, uint256 amount) external; function burnSynthsToTarget() external; function burnSynthsToTargetOnBehalf(address burnForAddress) external; function collateral(address account) external view returns (uint256); function collateralisationRatio(address _issuer) external view returns (uint256); function debtBalanceOf(address account, bytes32 currencyKey) external view returns (uint256); function decimals() external view returns (uint8); function emitAtomicSynthExchange(address account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress) external; function emitExchangeRebate(address account, bytes32 currencyKey, uint256 amount) external; function emitExchangeReclaim(address account, bytes32 currencyKey, uint256 amount) external; function emitExchangeTracking(bytes32 trackingCode, bytes32 toCurrencyKey, uint256 toAmount, uint256 fee) external; function emitSynthExchange(address account, bytes32 fromCurrencyKey, uint256 fromAmount, bytes32 toCurrencyKey, uint256 toAmount, address toAddress) external; function exchange(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) external returns (uint256 amountReceived); function exchangeAtomically(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, bytes32 trackingCode, uint256 minAmount) external returns (uint256 amountReceived); function exchangeOnBehalf(address exchangeForAddress, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) external returns (uint256 amountReceived); function exchangeOnBehalfWithTracking(address exchangeForAddress, bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address rewardAddress, bytes32 trackingCode) external returns (uint256 amountReceived); function exchangeWithTracking(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address rewardAddress, bytes32 trackingCode) external returns (uint256 amountReceived); function exchangeWithTrackingForInitiator(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, address rewardAddress, bytes32 trackingCode) external returns (uint256 amountReceived); function exchangeWithVirtual(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, bytes32 trackingCode) external returns (uint256 amountReceived, address vSynth); function getFirstNonZeroEscrowIndex(address account) external view returns (uint256); function isResolverCached() external view returns (bool); function isWaitingPeriod(bytes32 currencyKey) external view returns (bool); function issueMaxSynths() external; function issueMaxSynthsOnBehalf(address issueForAddress) external; function issueSynths(uint256 amount) external; function issueSynthsOnBehalf(address issueForAddress, uint256 amount) external; function liquidateDelinquentAccount(address account) external returns (bool); function liquidateDelinquentAccountEscrowIndex(address account, uint256 escrowStartIndex) external returns (bool); function liquidateSelf() external returns (bool); function maxIssuableSynths(address account) external view returns (uint256 maxIssuable); function messageSender() external view returns (address); function migrateAccountBalances(address account) external returns (uint256 totalEscrowRevoked, uint256 totalLiquidBalance); function migrateEscrowBalanceToRewardEscrowV2() external; function migrateEscrowContractBalance() external; function mint() external returns (bool); function mintSecondary(address, uint256) external; function mintSecondaryRewards(uint256) external; function name() external view returns (string memory); function nominateNewOwner(address _owner) external; function nominatedOwner() external view returns (address); function owner() external view returns (address); function proxy() external view returns (address); function rebuildCache() external; function remainingIssuableSynths(address account) external view returns (uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt); function resolver() external view returns (address); function resolverAddressesRequired() external view returns (bytes32[] memory addresses); function sUSD() external view returns (bytes32); function setMessageSender(address sender) external; function setProxy(address _proxy) external; function setTokenState(address _tokenState) external; function settle(bytes32 currencyKey) external returns (uint256 reclaimed, uint256 refunded, uint256 numEntriesSettled); function symbol() external view returns (string memory); function synths(bytes32 currencyKey) external view returns (address); function synthsByAddress(address synthAddress) external view returns (bytes32); function tokenState() external view returns (address); function totalIssuedSynths(bytes32 currencyKey) external view returns (uint256); function totalIssuedSynthsExcludeOtherCollateral(bytes32 currencyKey) external view returns (uint256); function totalSupply() external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function transferableSynthetix(address account) external view returns (uint256 transferable); }