> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gains.trade/llms.txt
> Use this file to discover all available pages before exploring further.

# GNSPriceAggregator

*Facet #10: Price aggregator (does the requests to the Chainlink DON, takes the median, and executes callbacks)*

## constructor

```solidity theme={null}
constructor() public
```

## initializePriceAggregator

```solidity theme={null}
function initializePriceAggregator(address _linkToken, contract IChainlinkFeed _linkUsdPriceFeed, uint24 _twapInterval, uint8 _minAnswers, address[] _nodes, bytes32[2] _jobIds, uint8[] _collateralIndices, struct IPriceAggregator.LiquidityPoolInput[] _gnsCollateralLiquidityPools, contract IChainlinkFeed[] _collateralUsdPriceFeeds) external
```

*Initializes price aggregator facet*

### Parameters

| Name                          | Type                                                                                                                                     | Description                                            |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| \_linkToken                   | address                                                                                                                                  | LINK token address                                     |
| \_linkUsdPriceFeed            | contract IChainlinkFeed                                                                                                                  | LINK/USD price feed address                            |
| \_twapInterval                | uint24                                                                                                                                   | TWAP interval (seconds)                                |
| \_minAnswers                  | uint8                                                                                                                                    | answers count at which a trade is executed with median |
| \_nodes                       | address\[]                                                                                                                               |                                                        |
| \_jobIds                      | bytes32\[2]                                                                                                                              | chainlink job ids (market/lookback)                    |
| \_collateralIndices           | uint8\[]                                                                                                                                 | collateral indices                                     |
| \_gnsCollateralLiquidityPools | [IPriceAggregator.LiquidityPoolInput\[\]](/developer/technical-reference/contracts/interfaces/types/ipriceaggregator#liquiditypoolinput) | corresponding GNS/collateral liquidity pool values     |
| \_collateralUsdPriceFeeds     | contract IChainlinkFeed\[]                                                                                                               | corresponding collateral/USD chainlink price feeds     |

## updateLinkUsdPriceFeed

```solidity theme={null}
function updateLinkUsdPriceFeed(contract IChainlinkFeed _value) external
```

*Updates LINK/USD chainlink price feed*

### Parameters

| Name    | Type                    | Description |
| ------- | ----------------------- | ----------- |
| \_value | contract IChainlinkFeed | new value   |

## updateCollateralUsdPriceFeed

```solidity theme={null}
function updateCollateralUsdPriceFeed(uint8 _collateralIndex, contract IChainlinkFeed _value) external
```

*Updates collateral/USD chainlink price feed*

### Parameters

| Name              | Type                    | Description      |
| ----------------- | ----------------------- | ---------------- |
| \_collateralIndex | uint8                   | collateral index |
| \_value           | contract IChainlinkFeed | new value        |

## updateCollateralGnsLiquidityPool

```solidity theme={null}
function updateCollateralGnsLiquidityPool(uint8 _collateralIndex, struct IPriceAggregator.LiquidityPoolInput _liquidityPoolInput) external
```

*Updates collateral/GNS liquidity pool*

### Parameters

| Name                 | Type                                                                                                                                 | Description      |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------- |
| \_collateralIndex    | uint8                                                                                                                                | collateral index |
| \_liquidityPoolInput | [IPriceAggregator.LiquidityPoolInput](/developer/technical-reference/contracts/interfaces/types/ipriceaggregator#liquiditypoolinput) | new values       |

## updateTwapInterval

```solidity theme={null}
function updateTwapInterval(uint24 _twapInterval) external
```

*Updates TWAP interval*

### Parameters

| Name           | Type   | Description         |
| -------------- | ------ | ------------------- |
| \_twapInterval | uint24 | new value (seconds) |

## updateMinAnswers

```solidity theme={null}
function updateMinAnswers(uint8 _value) external
```

*Updates minimum answers count*

### Parameters

| Name    | Type  | Description |
| ------- | ----- | ----------- |
| \_value | uint8 | new value   |

## addOracle

```solidity theme={null}
function addOracle(address _a) external
```

*Adds an oracle*

### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_a  | address | new value   |

## replaceOracle

```solidity theme={null}
function replaceOracle(uint256 _index, address _a) external
```

*Replaces an oracle*

### Parameters

| Name    | Type    | Description  |
| ------- | ------- | ------------ |
| \_index | uint256 | oracle index |
| \_a     | address | new value    |

## removeOracle

```solidity theme={null}
function removeOracle(uint256 _index) external
```

*Removes an oracle*

### Parameters

| Name    | Type    | Description  |
| ------- | ------- | ------------ |
| \_index | uint256 | oracle index |

## setMarketJobId

```solidity theme={null}
function setMarketJobId(bytes32 _jobId) external
```

*Updates market job id*

### Parameters

| Name    | Type    | Description |
| ------- | ------- | ----------- |
| \_jobId | bytes32 | new value   |

## setLimitJobId

```solidity theme={null}
function setLimitJobId(bytes32 _jobId) external
```

*Updates lookback job id*

### Parameters

| Name    | Type    | Description |
| ------- | ------- | ----------- |
| \_jobId | bytes32 | new value   |

## getPrice

```solidity theme={null}
function getPrice(uint8 _collateralIndex, uint16 _pairIndex, struct ITradingStorage.Id _tradeId, struct ITradingStorage.Id _orderId, enum ITradingStorage.PendingOrderType _orderType, uint256 _positionSizeCollateral, uint256 _fromBlock) external virtual
```

*Requests price from oracles*

### Parameters

| Name                     | Type                                                                                               | Description                                                      |
| ------------------------ | -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| \_collateralIndex        | uint8                                                                                              | collateral index                                                 |
| \_pairIndex              | uint16                                                                                             | pair index                                                       |
| \_tradeId                | [ITradingStorage.Id](/developer/technical-reference/contracts/interfaces/types/itradingstorage#id) | trade id                                                         |
| \_orderId                | [ITradingStorage.Id](/developer/technical-reference/contracts/interfaces/types/itradingstorage#id) | order id                                                         |
| \_orderType              | enum ITradingStorage.PendingOrderType                                                              | order type                                                       |
| \_positionSizeCollateral | uint256                                                                                            | position size (collateral precision)                             |
| \_fromBlock              | uint256                                                                                            | block number from which to start fetching prices (for lookbacks) |

## fulfill

```solidity theme={null}
function fulfill(bytes32 _requestId, uint256 _priceData) external
```

*Fulfills price request, called by chainlink oracles*

### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| \_requestId | bytes32 | request id  |
| \_priceData | uint256 | price data  |

## claimBackLink

```solidity theme={null}
function claimBackLink() external
```

*Claims back LINK tokens, called by gov fund*

## getLinkFee

```solidity theme={null}
function getLinkFee(uint8 _collateralIndex, address _trader, uint16 _pairIndex, uint256 _positionSizeCollateral) external view returns (uint256)
```

*Returns LINK fee for price request*

### Parameters

| Name                     | Type    | Description                                               |
| ------------------------ | ------- | --------------------------------------------------------- |
| \_collateralIndex        | uint8   | collateral index                                          |
| \_trader                 | address | trader address                                            |
| \_pairIndex              | uint16  | pair index                                                |
| \_positionSizeCollateral | uint256 | position size in collateral tokens (collateral precision) |

## getCollateralPriceUsd

```solidity theme={null}
function getCollateralPriceUsd(uint8 _collateralIndex) external view returns (uint256)
```

*Returns collateral/USD price*

### Parameters

| Name              | Type  | Description         |
| ----------------- | ----- | ------------------- |
| \_collateralIndex | uint8 | index of collateral |

## getUsdNormalizedValue

```solidity theme={null}
function getUsdNormalizedValue(uint8 _collateralIndex, uint256 _collateralValue) external view returns (uint256)
```

*Returns USD normalized value from collateral value*

### Parameters

| Name              | Type    | Description                             |
| ----------------- | ------- | --------------------------------------- |
| \_collateralIndex | uint8   | index of collateral                     |
| \_collateralValue | uint256 | collateral value (collateral precision) |

## getCollateralFromUsdNormalizedValue

```solidity theme={null}
function getCollateralFromUsdNormalizedValue(uint8 _collateralIndex, uint256 _normalizedValue) external view returns (uint256)
```

*Returns collateral value (collateral precision) from USD normalized value*

### Parameters

| Name              | Type    | Description                 |
| ----------------- | ------- | --------------------------- |
| \_collateralIndex | uint8   | index of collateral         |
| \_normalizedValue | uint256 | normalized value (1e18 USD) |

## getGnsPriceUsd

```solidity theme={null}
function getGnsPriceUsd(uint8 _collateralIndex) external view virtual returns (uint256)
```

*Returns GNS/USD price based on GNS/collateral price*

### Parameters

| Name              | Type  | Description         |
| ----------------- | ----- | ------------------- |
| \_collateralIndex | uint8 | index of collateral |

## getGnsPriceUsd

```solidity theme={null}
function getGnsPriceUsd(uint8 _collateralIndex, uint256 _gnsPriceCollateral) external view returns (uint256)
```

*Returns GNS/USD price based on GNS/collateral price*

### Parameters

| Name                 | Type    | Description                 |
| -------------------- | ------- | --------------------------- |
| \_collateralIndex    | uint8   | index of collateral         |
| \_gnsPriceCollateral | uint256 | GNS/collateral price (1e10) |

## getGnsPriceCollateralIndex

```solidity theme={null}
function getGnsPriceCollateralIndex(uint8 _collateralIndex) external view virtual returns (uint256)
```

*Returns GNS/collateral price*

### Parameters

| Name              | Type  | Description         |
| ----------------- | ----- | ------------------- |
| \_collateralIndex | uint8 | index of collateral |

## getGnsPriceCollateralAddress

```solidity theme={null}
function getGnsPriceCollateralAddress(address _collateral) external view virtual returns (uint256)
```

*Returns GNS/collateral price*

### Parameters

| Name         | Type    | Description               |
| ------------ | ------- | ------------------------- |
| \_collateral | address | address of the collateral |

## getLinkUsdPriceFeed

```solidity theme={null}
function getLinkUsdPriceFeed() external view returns (contract IChainlinkFeed)
```

*Returns the link/usd price feed address*

## getTwapInterval

```solidity theme={null}
function getTwapInterval() external view returns (uint24)
```

*Returns the twap interval in seconds*

## getMinAnswers

```solidity theme={null}
function getMinAnswers() external view returns (uint8)
```

*Returns the minimum answers to execute an order and take the median*

## getMarketJobId

```solidity theme={null}
function getMarketJobId() external view returns (bytes32)
```

*Returns the market job id*

## getLimitJobId

```solidity theme={null}
function getLimitJobId() external view returns (bytes32)
```

*Returns the limit job id*

## getOracle

```solidity theme={null}
function getOracle(uint256 _index) external view returns (address)
```

*Returns a specific oracle*

### Parameters

| Name    | Type    | Description         |
| ------- | ------- | ------------------- |
| \_index | uint256 | index of the oracle |

## getOracles

```solidity theme={null}
function getOracles() external view returns (address[])
```

*Returns all oracles*

## getCollateralGnsLiquidityPool

```solidity theme={null}
function getCollateralGnsLiquidityPool(uint8 _collateralIndex) external view returns (struct IPriceAggregator.LiquidityPoolInfo)
```

*Returns collateral/gns liquidity pool info*

### Parameters

| Name              | Type  | Description         |
| ----------------- | ----- | ------------------- |
| \_collateralIndex | uint8 | index of collateral |

## getCollateralUsdPriceFeed

```solidity theme={null}
function getCollateralUsdPriceFeed(uint8 _collateralIndex) external view returns (contract IChainlinkFeed)
```

*Returns collateral/usd chainlink price feed*

### Parameters

| Name              | Type  | Description         |
| ----------------- | ----- | ------------------- |
| \_collateralIndex | uint8 | index of collateral |

## getPriceAggregatorOrder

```solidity theme={null}
function getPriceAggregatorOrder(bytes32 _requestId) external view returns (struct IPriceAggregator.Order)
```

*Returns order data*

### Parameters

| Name        | Type    | Description         |
| ----------- | ------- | ------------------- |
| \_requestId | bytes32 | index of collateral |

## getPriceAggregatorOrderAnswers

```solidity theme={null}
function getPriceAggregatorOrderAnswers(struct ITradingStorage.Id _orderId) external view returns (struct IPriceAggregator.OrderAnswer[])
```

*Returns order data*

### Parameters

| Name      | Type                                                                                               | Description |
| --------- | -------------------------------------------------------------------------------------------------- | ----------- |
| \_orderId | [ITradingStorage.Id](/developer/technical-reference/contracts/interfaces/types/itradingstorage#id) | order id    |

## getChainlinkToken

```solidity theme={null}
function getChainlinkToken() external view returns (address)
```

*Returns chainlink token address*

## getRequestCount

```solidity theme={null}
function getRequestCount() external view returns (uint256)
```

*Returns requestCount (used by ChainlinkClientUtils)*

## getPendingRequest

```solidity theme={null}
function getPendingRequest(bytes32 _id) external view returns (address)
```

*Returns pendingRequests mapping entry (used by ChainlinkClientUtils)*
