ExchangeRates¶
Description¶
This contract stores the latest Synth exchange rates. These rates are set by an oracle, which updates this contract every three minutes with any prices that have moved sufficiently. Once set, these prices are available for any contract in the Synthetix system to query. Prices which have not been updated recently enough are considered stale; Synthetix functionality using stale prices does not operate. All rates are denominated in terms of sUSD, so the price of sUSD is always $1.00, and is never stale.
The ExchangeRates contract is also responsible for computing the prices of various derived synths. In particular, the behaviour of inverse synths is defined here. These are derivative synths whose price varies inversely with the price of an underlying asset.
This contract interacts with the oracle's frontrunning protection, which is partially described in SIP-6 and SIP-7.
This does not turn off any functionality in the exchange rate contract, but is used by Synthetix
to disable currency exchanges while prices are being updated to protect against oracle front running. The lock is released when rate updates have completed.
Source: contracts/ExchangeRates.sol
Architecture¶
Related Contracts¶
Details
oracle
: This address is not actually a contract, but it is the source of prices for this contract.Aggregators
: These are a collection of decentralized pricing networks that collect and aggregate results from a network of oracles.PurgeableSynth
: exchange rates are used to determine if the total token value is below the purge threshold.Synthetix
: the value of tokens is used to in order to facilitate exchange between them, and to ensure exchanges cannot occur while price updates and being made or if a particular exchange rate is stale.
Variables¶
CONTRACT_NAME
¶
Type: bytes32
aggregatorKeys
¶
A list of the keys of currencies with a decentralized aggregated pricing network.
Type: bytes32[]
aggregators
¶
For each currency with a decentralized aggregated pricing network, return the Aggregation contract address.
Type: mapping(bytes32 => contract AggregatorV2V3Interface)
currencyKeyDecimals
¶
Type: mapping(bytes32 => uint8)
Constructor¶
constructor
¶
Initialises the oracle address and initial currency prices, along with the inherited SelfDestructible
instance.
Details
Signature
constructor(address _owner, address _resolver)
Visibility
public
State Mutability
``
Views¶
aggregatorWarningFlags
¶
Details
Signature
aggregatorWarningFlags() view returns (address)
Visibility
external
State Mutability
view
anyRateIsInvalid
¶
Details
Signature
anyRateIsInvalid(bytes32[] currencyKeys) view returns (bool)
Visibility
external
State Mutability
view
anyRateIsInvalidAtRound
¶
Details
Signature
anyRateIsInvalidAtRound(bytes32[] currencyKeys, uint256[] roundIds) view returns (bool)
Visibility
external
State Mutability
view
Requires
currenciesUsingAggregator
¶
Details
Signature
currenciesUsingAggregator(address aggregator) view returns (bytes32[] currencies)
Visibility
external
State Mutability
view
effectiveAtomicValueAndRates
¶
Details
Signature
effectiveAtomicValueAndRates(bytes32, uint256, bytes32) view returns (uint256 value, uint256 systemValue, uint256 systemSourceRate, uint256 systemDestinationRate)
Visibility
public
State Mutability
view
effectiveValue
¶
Given a quantity of a source currency, returns a quantity of a destination currency that is of equivalent value at current exchange rates, if those rates are fresh.
The effective value is computed as a simple ratio of the prices of the currencies concerned. That is, to convert a quantity Q_A of currency A to currency B at prices \pi_A and \pi_B, the quantity Q_B received is:
This computation is simple because all fractional quantities in the Synthetix system except for the debt ledger are 18 decimal fixed point numbers.
Details
Signature
effectiveValue(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view returns (uint256 value)
Visibility
external
State Mutability
view
effectiveValueAndRates
¶
Details
Signature
effectiveValueAndRates(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view returns (uint256 value, uint256 sourceRate, uint256 destinationRate)
Visibility
external
State Mutability
view
effectiveValueAndRatesAtRound
¶
Details
Signature
effectiveValueAndRatesAtRound(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey, uint256 roundIdForSrc, uint256 roundIdForDest) view returns (uint256 value, uint256 sourceRate, uint256 destinationRate)
Visibility
external
State Mutability
view
getCurrentRoundId
¶
Details
Signature
getCurrentRoundId(bytes32 currencyKey) view returns (uint256)
Visibility
external
State Mutability
view
getLastRoundIdBeforeElapsedSecs
¶
Details
Signature
getLastRoundIdBeforeElapsedSecs(bytes32 currencyKey, uint256 startingRoundId, uint256 startingTimestamp, uint256 timediff) view returns (uint256)
Visibility
external
State Mutability
view
lastRateUpdateTimes
¶
Retrieves the timestamp the given rate was last updated. Accessed by the same keys as rates
is.
Details
Signature
lastRateUpdateTimes(bytes32 currencyKey) view returns (uint256)
Visibility
external
State Mutability
view
lastRateUpdateTimesForCurrencies
¶
Maps lastRateUpdateTimes
over an array of keys.
Details
Signature
lastRateUpdateTimesForCurrencies(bytes32[] currencyKeys) view returns (uint256[])
Visibility
external
State Mutability
view
rateAndInvalid
¶
Details
Signature
rateAndInvalid(bytes32 currencyKey) view returns (uint256 rate, bool isInvalid)
Visibility
public
State Mutability
view
rateAndTimestampAtRound
¶
Details
Signature
rateAndTimestampAtRound(bytes32 currencyKey, uint256 roundId) view returns (uint256 rate, uint256 time)
Visibility
external
State Mutability
view
rateAndUpdatedTime
¶
Details
Signature
rateAndUpdatedTime(bytes32 currencyKey) view returns (uint256 rate, uint256 time)
Visibility
external
State Mutability
view
rateForCurrency
¶
Returns the last recorded rate for the given currency. This is just an alias to the public mapping rates
, so it could probably be eliminated.
Details
Signature
rateForCurrency(bytes32 currencyKey) view returns (uint256)
Visibility
external
State Mutability
view
rateIsFlagged
¶
Details
Signature
rateIsFlagged(bytes32 currencyKey) view returns (bool)
Visibility
external
State Mutability
view
rateIsInvalid
¶
Details
Signature
rateIsInvalid(bytes32 currencyKey) view returns (bool)
Visibility
external
State Mutability
view
rateIsStale
¶
The rate for a given currency is stale if its last update occurred more than rateStalePeriod
seconds ago.
sUSD
is a special case; since its rate is fixed at 1.0, it is never stale. The rates of nonexistent currencies are always stale.
Details
Signature
rateIsStale(bytes32 currencyKey) view returns (bool)
Visibility
external
State Mutability
view
rateStalePeriod
¶
The duration after which a rate will be considered out of date. Synth exchange and other price-sensitive transactions in the Synthetix
contract will not operate if a relevant rate is stale.
Initialised to 3 hours.
Type: uint256
Details
Signature
rateStalePeriod() view returns (uint256)
Visibility
external
State Mutability
view
ratesAndInvalidForCurrencies
¶
Details
Signature
ratesAndInvalidForCurrencies(bytes32[] currencyKeys) view returns (uint256[] rates, bool anyRateInvalid)
Visibility
external
State Mutability
view
ratesAndUpdatedTimeForCurrencyLastNRounds
¶
Details
Signature
ratesAndUpdatedTimeForCurrencyLastNRounds(bytes32 currencyKey, uint256 numRounds, uint256 roundId) view returns (uint256[] rates, uint256[] times)
Visibility
external
State Mutability
view
ratesForCurrencies
¶
Maps rateForCurrency
over an array of keys.
Details
Signature
ratesForCurrencies(bytes32[] currencyKeys) view returns (uint256[])
Visibility
external
State Mutability
view
resolverAddressesRequired
¶
Details
Signature
resolverAddressesRequired() view returns (bytes32[] addresses)
Visibility
public
State Mutability
view
synthTooVolatileForAtomicExchange
¶
Details
Signature
synthTooVolatileForAtomicExchange(bytes32) view returns (bool)
Visibility
public
State Mutability
view
Restricted Functions¶
addAggregator
¶
Details
Signature
addAggregator(bytes32 currencyKey, address aggregatorAddress)
Visibility
external
State Mutability
``
Requires
Modifiers
Emits
removeAggregator
¶
Details
Signature
removeAggregator(bytes32 currencyKey)
Visibility
external
State Mutability
``
Requires
Modifiers
Internal Functions¶
_effectiveValueAndRates
¶
Details
Signature
_effectiveValueAndRates(bytes32 sourceCurrencyKey, uint256 sourceAmount, bytes32 destinationCurrencyKey) view returns (uint256 value, uint256 sourceRate, uint256 destinationRate)
Visibility
internal
State Mutability
view
_formatAggregatorAnswer
¶
Details
Signature
_formatAggregatorAnswer(bytes32 currencyKey, int256 rate) view returns (uint256)
Visibility
internal
State Mutability
view
Requires
_getCurrentRoundId
¶
Details
Signature
_getCurrentRoundId(bytes32 currencyKey) view returns (uint256)
Visibility
internal
State Mutability
view
_getRate
¶
Details
Signature
_getRate(bytes32 currencyKey) view returns (uint256)
Visibility
internal
State Mutability
view
_getRateAndTimestampAtRound
¶
Details
Signature
_getRateAndTimestampAtRound(bytes32 currencyKey, uint256 roundId) view returns (uint256 rate, uint256 time)
Visibility
internal
State Mutability
view
_getRateAndUpdatedTime
¶
Details
Signature
_getRateAndUpdatedTime(bytes32 currencyKey) view returns (struct IExchangeRates.RateAndUpdatedTime)
Visibility
internal
State Mutability
view
_getUpdatedTime
¶
Details
Signature
_getUpdatedTime(bytes32 currencyKey) view returns (uint256)
Visibility
internal
State Mutability
view
_notImplemented
¶
Details
Signature
_notImplemented() pure
Visibility
internal
State Mutability
pure
_rateIsCircuitBroken
¶
Details
Signature
_rateIsCircuitBroken(bytes32 currencyKey, uint256 curRate) view returns (bool)
Visibility
internal
State Mutability
view
_rateIsFlagged
¶
Details
Signature
_rateIsFlagged(bytes32 currencyKey, contract FlagsInterface flags) view returns (bool)
Visibility
internal
State Mutability
view
_rateIsStale
¶
Details
Signature
_rateIsStale(bytes32 currencyKey, uint256 _rateStalePeriod) view returns (bool)
Visibility
internal
State Mutability
view
_rateIsStaleWithTime
¶
Details
Signature
_rateIsStaleWithTime(uint256 _rateStalePeriod, uint256 _time) view returns (bool)
Visibility
internal
State Mutability
view
circuitBreaker
¶
Details
Signature
circuitBreaker() view returns (contract ICircuitBreaker)
Visibility
internal
State Mutability
view
getFlagsForRates
¶
Details
Signature
getFlagsForRates(bytes32[] currencyKeys) view returns (bool[] flagList)
Visibility
internal
State Mutability
view
removeFromArray
¶
Helper function that removes an entry
from an existing array in storage. Returns true
if found and removed, false
otherwise.
Details
Signature
removeFromArray(bytes32 entry, bytes32[] array) returns (bool)
Visibility
internal
State Mutability
``
External Functions¶
rateWithSafetyChecks
¶
Details
Signature
rateWithSafetyChecks(bytes32 currencyKey) returns (uint256 rate, bool broken, bool staleOrInvalid)
Visibility
external
State Mutability
``
Requires
Events¶
AggregatorAdded
¶
Records that an Aggregator pricing network was added
Signature: AggregatorAdded(bytes32 currencyKey, address aggregator)
AggregatorRemoved
¶
Records that an Aggregator pricing network was removed
Signature: AggregatorRemoved(bytes32 currencyKey, address aggregator)