84 releases (25 breaking)
Uses new Rust 2024
| new 0.64.0 | Dec 18, 2025 |
|---|---|
| 0.63.1 | Nov 24, 2025 |
| 0.59.1 | Jul 24, 2025 |
| 0.57.0 | Mar 11, 2025 |
| 0.39.8 | Mar 29, 2023 |
#7 in #multiversx
1.5MB
41K
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,priceanddecimals).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:
latestRoundDatatakes no arguments and returns all the latest price feeds.latestPriceFeedtakes a filter (as thefromandtotoken identifiers) and returns a single price feed. The transaction fails if there is no price feed for the given filter.latestPriceFeedOptionalbehaves likelatestPriceFeedbut 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
~1.4–2MB
~45K SLoC