Price Oracle

Smart contract using Chainlink Data Feeds to get the underlying price, and scale it to PalTokens using the their exchangeRates.

The Price Oracle contract allows to retrieve prices for palTokens.

The prices are based on Chainlink Data Feeds, both for ETH and USD prices. In the case one of the price feed is not listed for an asset, or does not exist, the other price feed (is there is one) is used with the ETH/USD price feed (baseSource in the contract) to calculate the price. The price is then scaled to the palToken, using the exchange rate between the palToken and the underlying token (the underlying associated with the price feed).

This contract is experimental. It's strongly advised to use that contract as an updatable component to replace it with newer versions if needed.

Price methods:

For usage through another smart contract, it is strongly advised to use the getUpdatedAssetPrice & getUpdatedAssetUSDPrice methods to fetch prices, as those methods will update the PalPool state before fetching the exchange rate.

getAssetPrice

function getAssetPrice(address asset) public view returns (uint256, uint256)

Returns the ETH price of the asset given, based on the ETH price source and the palToken exchangeRate. If no ETH price source is set, the USD price source is used, and conversion using the base (ETH/USD) source price is used.

Returns both the price, and the decimals for the price value

getAssetUSDPrice

function getAssetUSDPrice(address asset) public view returns (uint256, uint256)

Returns the USD price of the asset given, based on the USD price source and the palToken exchangeRate. If no USD price source is set, the ETH price source is used, and conversion using the base (ETH/USD) source price is used.

Returns both the price, and the decimals for the price value

getUpdatedAssetPrice

function getUpdatedAssetPrice(address asset) public returns (uint256, uint256)

Returns the ETH price of the asset given, based on the ETH price source and the updated palToken exchangeRate (by updating the PalPool state when fetching the exchangeRate). If no ETH price source is set, the USD price source is used, and conversion using the base (ETH/USD) source price is used.

Returns both the price, and the decimals for the price value

getUpdatedAssetUSDPrice

function getUpdatedAssetUSDPrice(address asset) public returns (uint256, uint256)

Return the USD price of the asset given, based on the USD price source and the updated palToken exchangeRate (by updating the PalPool state when fetching the exchangeRate). If no USD price source is set, the ETH price source is used, and conversion using the base (ETH/USD) source price is used

Returns both the price, and the decimals for the price value

Other methods:

getAssetSource

function getAssetSource(address asset) external view returns(address)

Returns the ETH source price for the given asset

getAssetUSDSource

function getAssetUSDSource(address asset) external view returns(address)

Returns the USD source price for the given asset

Following methods use the last updated exchangeRate stored in the Pools. If used in a contract, it is advised to update the Pool state to have an up-to-date exchangeRate for the current block.

(see _updateInterest() in PalPool contract)

underlyingForPalToken

function underlyingForPalToken(address palToken, uint256 amount) public view returns(uint256)

Returns underlying amount for a given PalToken amount, based on the last updated exchangeRate

palTokenForUnderlying

function palTokenForUnderlying(address palToken, uint256 amount) public view returns(uint256)

Returns PalToken amount for a given underlying amount, based on the last updated exchangeRate

Last updated