3 releases
0.0.3 | Sep 2, 2024 |
---|---|
0.0.2 | Sep 2, 2024 |
0.0.1 | Aug 28, 2024 |
#4 in #dharitri
2MB
45K
SLoC
Price aggregator
Overview
The price-aggregator smart contract keeps track of the price between multiple pairs of tokens. Compared to the other chainlink contracts, it is a simplified and easier to use version.
Deployment
Arguments:
staking_token
- the token used for staking and slashingstaking_amount
- the minimum staked amount required for a used to be considered a board memberslash_amount
- the amount to be slashed from a board member on a successful slash voteslash_quorum
- the minimum number of board members required for a vote to be considered successfuloracles
- the list of addresses which are allowed to submit price feed updatessubmission_count
- the minimum number of submissions from different oracles which trigger an update of the price feed
Configuring the number of decimals
The number of decimals for a given token pair can be set by calling setPairDecimals(from, to, decimals)
. Notes:
- only the owner can configure the number of decimals
- the contract must be paused first
- this method also clears the submissions accumulated so far
- no submissions will be accepted for any given pair unless the number of decimals is configured first
- every oracle must change its configuration to provide submissions with the new number of decimals, as any mismatch will be considered a configuration error and the submission will be rejected
Submitting price feed updates
An oracle can submit a price feed update using one of the endpoints:
submit
- submit a single price feed as 5 arguments (from
,to
,submission_timestamp
,price
anddecimals
).submitBatch
- submit multiple price feeds simultaneously. The number of arguments must be a multiple of 5.
Note: the decimals argument must match the value returned by getPairDecimals
for that specific pair, otherwise the submission will be rejected.
Rounds
Price feeds from multiple oracles are collected. When a certain threshold number of submissions has been reached (given by submission_count
), a new round is created.
The price feed recorded in the round is the median value out of all submissions made.
Querying the price feeds
Endpoints:
latestRoundData
takes no arguments and returns all the latest price feeds.latestPriceFeed
takes a filter (as thefrom
andto
token identifiers) and returns a single price feed. The transaction fails if there is no price feed for the given filter.latestPriceFeedOptional
behaves likelatestPriceFeed
but it returns an option so that the caller can handle the lack of a price feed.
A price feed contains:
round_id
- the ID of the current round (not related to the blockchain round ID)from
- the first tokento
- the second tokenprice
- the price between the two tokensdecimals
- the number of decimals for the price
Dependencies
~3.5MB
~69K SLoC