2023-06-19 00:08:10 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< html lang = "en" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
< title > LCOV - lcov.info - v2/libraries/UniswapV2OracleLibrary.sol< / title >
< link rel = "stylesheet" type = "text/css" href = "../../gcov.css" >
< / head >
< body >
< table width = "100%" border = 0 cellspacing = 0 cellpadding = 0 >
< tr > < td class = "title" > LCOV - code coverage report< / td > < / tr >
< tr > < td class = "ruler" > < img src = "../../glass.png" width = 3 height = 3 alt = "" > < / td > < / tr >
< tr >
< td width = "100%" >
< table cellpadding = 1 border = 0 width = "100%" >
< tr >
< td width = "10%" class = "headerItem" > Current view:< / td >
< td width = "35%" class = "headerValue" > < a href = "../../index.html" > top level< / a > - < a href = "index.html" > v2/libraries< / a > - UniswapV2OracleLibrary.sol< span style = "font-size: 80%;" > (source / < a href = "UniswapV2OracleLibrary.sol.func-sort-c.html" > functions< / a > )< / span > < / td >
< td width = "5%" > < / td >
< td width = "15%" > < / td >
< td width = "10%" class = "headerCovTableHead" > Hit< / td >
< td width = "10%" class = "headerCovTableHead" > Total< / td >
< td width = "15%" class = "headerCovTableHead" > Coverage< / td >
< / tr >
< tr >
< td class = "headerItem" > Test:< / td >
< td class = "headerValue" > lcov.info< / td >
< td > < / td >
< td class = "headerItem" > Lines:< / td >
< td class = "headerCovTableEntry" > 9< / td >
< td class = "headerCovTableEntry" > 9< / td >
< td class = "headerCovTableEntryHi" > 100.0 %< / td >
< / tr >
< tr >
< td class = "headerItem" > Date:< / td >
2023-06-20 21:04:29 +00:00
< td class = "headerValue" > 2023-06-20 21:04:08< / td >
2023-06-19 00:08:10 +00:00
< td > < / td >
< td class = "headerItem" > Functions:< / td >
< td class = "headerCovTableEntry" > 2< / td >
< td class = "headerCovTableEntry" > 2< / td >
< td class = "headerCovTableEntryHi" > 100.0 %< / td >
< / tr >
< tr >
< td class = "headerItem" > Legend:< / td >
< td class = "headerValueLeg" > Lines:
< span class = "coverLegendCov" > hit< / span >
< span class = "coverLegendNoCov" > not hit< / span >
< / td >
< td > < / td >
< / tr >
< tr > < td > < img src = "../../glass.png" width = 3 height = 3 alt = "" > < / td > < / tr >
< / table >
< / td >
< / tr >
< tr > < td class = "ruler" > < img src = "../../glass.png" width = 3 height = 3 alt = "" > < / td > < / tr >
< / table >
< table cellpadding = 0 cellspacing = 0 border = 0 >
< tr >
< td > < br > < / td >
< / tr >
< tr >
< td >
< pre class = "sourceHeading" > Line data Source code< / pre >
< pre class = "source" >
< a name = "1" > < span class = "lineNum" > 1 < / span > : // SPDX-License-Identifier: MIT< / a >
< a name = "2" > < span class = "lineNum" > 2 < / span > : < / a >
< a name = "3" > < span class = "lineNum" > 3 < / span > : pragma solidity ^0.6.12;< / a >
< a name = "4" > < span class = "lineNum" > 4 < / span > : pragma experimental ABIEncoderV2;< / a >
< a name = "5" > < span class = "lineNum" > 5 < / span > : < / a >
< a name = "6" > < span class = "lineNum" > 6 < / span > : // Local imports< / a >
< a name = "7" > < span class = "lineNum" > 7 < / span > : < / a >
< a name = "8" > < span class = "lineNum" > 8 < / span > : import { IUniswapV2Pair } from " ../interfaces/IUniswapV2Pair.sol" ;< / a >
< a name = "9" > < span class = "lineNum" > 9 < / span > : < / a >
< a name = "10" > < span class = "lineNum" > 10 < / span > : import { FixedPoint } from " ./FixedPoint.sol" ;< / a >
< a name = "11" > < span class = "lineNum" > 11 < / span > : < / a >
< a name = "12" > < span class = "lineNum" > 12 < / span > : library UniswapV2OracleLibrary {< / a >
< a name = "13" > < span class = "lineNum" > 13 < / span > : using FixedPoint for *;< / a >
< a name = "14" > < span class = "lineNum" > 14 < / span > : < / a >
< a name = "15" > < span class = "lineNum" > 15 < / span > : // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 -< / a >
< a name = "16" > < span class = "lineNum" > 16 < / span > : // 1]< / a >
< a name = "17" > < span class = "lineNum" > 17 < / span > : function currentBlockTimestamp() internal view returns (uint32) {< / a >
< a name = "18" > < span class = "lineNum" > 18 < / span > < span class = "lineCov" > 85 : return uint32(block.timestamp % 2 ** 32);< / span > < / a >
< a name = "19" > < span class = "lineNum" > 19 < / span > : }< / a >
< a name = "20" > < span class = "lineNum" > 20 < / span > : < / a >
< a name = "21" > < span class = "lineNum" > 21 < / span > : // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.< / a >
< a name = "22" > < span class = "lineNum" > 22 < / span > : function currentCumulativePrices(address pair)< / a >
< a name = "23" > < span class = "lineNum" > 23 < / span > : internal< / a >
< a name = "24" > < span class = "lineNum" > 24 < / span > : view< / a >
< a name = "25" > < span class = "lineNum" > 25 < / span > : returns (uint256 price0Cumulative, uint256 price1Cumulative, uint32 blockTimestamp)< / a >
< a name = "26" > < span class = "lineNum" > 26 < / span > : {< / a >
< a name = "27" > < span class = "lineNum" > 27 < / span > < span class = "lineCov" > 8 : blockTimestamp = currentBlockTimestamp();< / span > < / a >
< a name = "28" > < span class = "lineNum" > 28 < / span > < span class = "lineCov" > 8 : price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();< / span > < / a >
< a name = "29" > < span class = "lineNum" > 29 < / span > < span class = "lineCov" > 8 : price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();< / span > < / a >
< a name = "30" > < span class = "lineNum" > 30 < / span > : < / a >
< a name = "31" > < span class = "lineNum" > 31 < / span > : // if time has elapsed since the last update on the pair, mock the accumulated price values< / a >
< a name = "32" > < span class = "lineNum" > 32 < / span > < span class = "lineCov" > 8 : (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();< / span > < / a >
< a name = "33" > < span class = "lineNum" > 33 < / span > < span class = "lineCov" > 8 : if (blockTimestampLast != blockTimestamp) {< / span > < / a >
< a name = "34" > < span class = "lineNum" > 34 < / span > : // subtraction overflow is desired< / a >
< a name = "35" > < span class = "lineNum" > 35 < / span > < span class = "lineCov" > 5 : uint32 timeElapsed = blockTimestamp - blockTimestampLast;< / span > < / a >
< a name = "36" > < span class = "lineNum" > 36 < / span > : // addition overflow is desired< / a >
< a name = "37" > < span class = "lineNum" > 37 < / span > : // counterfactual< / a >
< a name = "38" > < span class = "lineNum" > 38 < / span > < span class = "lineCov" > 5 : price0Cumulative += uint256(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;< / span > < / a >
< a name = "39" > < span class = "lineNum" > 39 < / span > : // counterfactual< / a >
< a name = "40" > < span class = "lineNum" > 40 < / span > < span class = "lineCov" > 5 : price1Cumulative += uint256(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;< / span > < / a >
< a name = "41" > < span class = "lineNum" > 41 < / span > : }< / a >
< a name = "42" > < span class = "lineNum" > 42 < / span > : }< / a >
< a name = "43" > < span class = "lineNum" > 43 < / span > : }< / a >
< / pre >
< / td >
< / tr >
< / table >
< br >
< table width = "100%" border = 0 cellspacing = 0 cellpadding = 0 >
< tr > < td class = "ruler" > < img src = "../../glass.png" width = 3 height = 3 alt = "" > < / td > < / tr >
< tr > < td class = "versionInfo" > Generated by: < a href = "https://github.com/linux-test-project/lcov" target = "_parent" > LCOV version 1.16< / a > < / td > < / tr >
< / table >
< br >
< / body >
< / html >