Chainlink Median
Chainlink integrated medianizer
Last updated
Chainlink integrated medianizer
Last updated
The ChainlinkPriceFeedMedianizer
has a similar interface to the although, instead of relying on governance whitelisted oracles, it simply keeps a reference to a (price aggregator).
Variables
authorizedAccounts [usr: address]
- addAuthorization
/removeAuthorization
/isAuthorized
- auth mechanisms
staleThreshold
- time since linkAggregatorTimestamp
after which the median value is considered stale
chainlinkAggregator
- address of the Chainlink price reference contract
rewardRelayer
- address of the contract that rewards addresses that call updateResult
medianPrice
- latest fetched price
lastUpdateTime
- latest timestamp when the contract pulled a price update from Chainlink
multiplier
- scaling factor for the Chainlink result (e.g if the price has 8 decimals and we want it to be scaled to 18 decimals, multiplier = 10
and medianPrice = fetchedPrice * 10 ^ multiplier
)
symbol
- the price oracle type (ex: ETHUSD)
periodSize
- the minimum delay between two consecutive updates after which the reward for updating again starts to increase
linkAggregatorTimestamp
- the timestamp of the Chainlink aggregator's latest price update
Modifiers
isAuthorized
**** - checks whether an address is part of authorizedAddresses
(and thus can call authed functions).
Functions
modifyParameters
- allows governance to change contract parameters
read() public view returns (uint256)
- gets a non-zero price or fails
getResultWithValidity() public view returns (uint256,bool)
- gets the price and its validity
updateResult(feeReceiver: address)
- updates the price stored in the contract by calling the Chainlink aggregator
Events
AddAuthorization
- emitted when a new address becomes authorized. Contains:
account
- the new authorized account
RemoveAuthorization
- emitted when an address is de-authorized. Contains:
account
- the address that was de-authorized
ModifyParameters
**** - emitted when a parameter is updated
UpdateResult
- emitted when updateResult
is called. Contains:
medianPrice
- the latest median price
lastUpdateTime
- timestamp of the call
When reading the latest price feed, the contract also stores the timestamp when the price coming from Chainlink was posted on-chain. The system can incentivize anyone to call updateResult
and update the median price regularly using a rewardRelayer
.
This oracle is entirely dependent on Chainlink. If the Chainlink relayer contract is deprecated the Oracle needs to be updated accordingly.
If the Chainlink contract is not updated the price will become stale, and other contracts reading from it will revert on state-changing transactions, effectively freezing the system.
If the price reported by Chainlink is wrong the system will take it as it is, possibly causing unfair liquidations, or preventing liquidations in case of higher prices reported.