PythPriceProvider

Overview

License: MIT

contract PythPriceProvider is PriceProvider, Initializable, AccessControlUpgradeable

The PythPriceProvider contract is the contract that provides the functionality of getting the latest price from PythNetwork.

Contract that provides the functionality of getting the latest price from PythNetwork. Inherit from PriceProvider.

Structs info

PythMetadata

struct PythMetadata {
	bytes32[] priceIdPath;
	bool isActive;
}

Events info

GrantModeratorRole

event GrantModeratorRole(address indexed newModerator)

Emitted when the moderator role is granted to a new account.

Parameters:

RevokeModeratorRole

event RevokeModeratorRole(address indexed moderator)

Emitted when the moderator role is revoked from an account.

Parameters:

SetTokenAndPriceIdPath

event SetTokenAndPriceIdPath(address indexed token, bytes32[] priceIdPath)

Emitted when the token and its corresponding price ID path are set.

Parameters:

SetPythOracle

event SetPythOracle(address indexed newPythOracle)

Emitted when a new Pyth oracle address is set.

Parameters:

ChangeActive

event ChangeActive(address indexed token, bool active)

Emitted when the active status of a token changes.

Parameters:

SetTokenDecimals

event SetTokenDecimals(uint8 newTokenDecimals)

Emitted when the token decimals is set.

Parameters:

Constants info

MODERATOR_ROLE (0x797669c9)

bytes32 constant MODERATOR_ROLE = keccak256("MODERATOR_ROLE")

DESCRIPTION (0xf1ae8856)

string constant DESCRIPTION = "Price provider that uses pyth"

MAX_LENGTH_PRICE_ID_PATH (0x4e253e91)

uint8 constant MAX_LENGTH_PRICE_ID_PATH = 5

State variables info

tokenDecimals (0x3b97e856)

uint8 tokenDecimals

pythOracle (0xf5d6ac90)

address pythOracle

validTimePeriod (0xcbdaeaba)

uint256 validTimePeriod

pythMetadata (0xbe3fd070)

mapping(address => struct PythPriceProvider.PythMetadata) pythMetadata

Modifiers info

onlyAdmin

modifier onlyAdmin()

Modifier to restrict access to functions to only the contract's admin.

onlyModerator

modifier onlyModerator()

Modifier to restrict access to functions to only the contract's moderator.

Functions info

initialize (0x8129fc1c)

function initialize() public initializer

Initializes the contract by setting up the access control roles and default values for tokenDecimals and validTimePeriod.

grantModerator (0x6981c7ae)

function grantModerator(address newModerator) public onlyAdmin

Grants the moderator role to a new address.

Parameters:

revokeModerator (0x36445636)

function revokeModerator(address moderator) public onlyAdmin

Revokes the moderator role from an address.

Parameters:

setTokenDecimals (0xf2cf47be)

function setTokenDecimals(uint8 newTokenDecimals) public onlyModerator

Sets the number of decimals used by the token. Only the moderator can call this function.

Parameters:

setTokenAndPriceIdPath (0x970d6b21)

function setTokenAndPriceIdPath(
    address token,
    bytes32[] memory newPriceIdPath
) public onlyModerator

Sets token and priceIdPath.

Parameters:

setPythOracle (0x622bd118)

function setPythOracle(address newPythOracle) public onlyModerator

Sets PythOracle contract.

Requirements:

  • Only the moderator can call this function.

  • The address of PythOracle contract must not be zero.

Parameters:

setValidTimePeriod (0x9bd92cad)

function setValidTimePeriod(uint256 newValidTimePeriod) public onlyModerator

Sets ValidTimePeriod is used to check if price is older than ValidTimePeriod to perform price update. Only the moderator can call this function.

Parameters:

changeActive (0x258a4532)

function changeActive(address token, bool active) public override onlyModerator

Changes the active status of a token in the Pyth price provider.

Requirements:

  • The token must be listed in the Pyth price provider.

  • Only the moderator can call this function.

Parameters:

updatePrices (0x0aa9adbc)

function updatePrices(
    bytes32[] memory priceIds,
    bytes[] calldata updateData
) external payable override

Perform a price update if the price is no longer valid.

Parameters:

getUpdatedPrice (0xe8ad2b23)

function getUpdatedPrice(
    address token,
    bytes[] calldata updateData
)
    external
    payable
    override
    returns (uint256 priceMantissa, uint8 priceDecimals)

Returns the latest price of a given token in USD after update price.

Parameters:

Return values:

isListed (0xf794062e)

function isListed(address token) public view override returns (bool)

Returns a boolean indicating whether the given token is listed in the Pyth price provider.

Parameters:

Return values:

isActive (0x9f8a13d7)

function isActive(address token) public view override returns (bool)

Returns a boolean indicating whether the specified token is active or not.

Parameters:

Return values:

getPrice (0x41976e09)

function getPrice(
    address token
) public view override returns (uint256 priceMantissa, uint8 priceDecimals)

Returns the latest price of a given token in USD.

Requirements:

  • This function retrieves the price of a token from the Pyth oracle and calculates the price in USD.

  • If the retrieved price is too old, the function reverts.

  • If the number of decimal places in the retrieved price is greater than the number of decimal places in the token, the function adjusts the price accordingly.

  • This function is view-only and does not modify the state of the contract.

Parameters:

Return values:

getEvaluation (0x81fd01ea)

function getEvaluation(
    address token,
    uint256 tokenAmount
) public view override returns (uint256 evaluation)

Returns the evaluation of a given token amount in USD.

Parameters:

Return values:

getEvaluationUnsafe (0xb03ec98d)

function getEvaluationUnsafe(
    address token,
    uint256 tokenAmount
) public view override returns (uint256 evaluation)

Returns the evaluation of a given token amount based on the last updated price.

Parameters:

Return values:

getPriceDecimals (0x1b30aafc)

function getPriceDecimals() public view override returns (uint8)

Returns the number of decimals used by the token.

Return values:

getExpiredPriceFeeds (0xe1f67b13)

function getExpiredPriceFeeds(
    address[] memory token,
    uint256 timeBeforeExpiration
) external view override returns (bytes32[] memory priceIds, uint256 updateFee)

Returns the priceId array to update the price before expiration and the update fee.

Parameters:

Return values:

getPythMetadata (0xed043fa8)

function getPythMetadata(
    address token
) public view returns (PythPriceProvider.PythMetadata memory)

Returns the metadata set up for token.

Parameters:

Return values:

Last updated