PythOracle:if price.expo is less than 0, wrong prices will be recorded
Here is PythOracle#_recordPrice function:\\n```\\n    function _recordPrice(uint256 oracleVersion, PythStructs.Price memory price) private {\\n        _prices[oracleVersion] = Fixed6Lib.from(price.price).mul(\\n            Fixed6Lib.from(SafeCast.toInt256(10 ** SafeCast.toUint256(price.expo > 0 ? price.expo : -price.expo)))\\n        );\\n        _publishTimes[oracleVersion] = price.publishTime;\\n    }\\n```\\n\\nIf price is 5e-5 for example, it will be recorded as 5e5 If price is 5e-6, it will be recorded as 5e6.\\nAs we can see, there is a massive deviation in recorded price from actual price whenever price's exponent is negative
In PythOracle.sol, `_prices` mapping should not be `mapping(uint256 => Fixed6) private _prices;` Instead, it should be `mapping(uint256 => Price) private _prices;`, where Price is a struct that stores the price and expo:\\n```\\nstruct Price{\\n    Fixed6 price,\\n    int256 expo\\n}\\n```\\n\\nThis way, the price exponents will be preserved, and can be used to scale the prices correctly wherever it is used.
Wrong prices will be recorded. For example, If priceA is 5e-5, and priceB is 5e-6. But due to the wrong conversion,\\nThere is a massive change in price(5e5 against 5e-5)\\nwe know that priceA is ten times larger than priceB, but priceA will be recorded as ten times smaller than priceB. Unfortunately, current payoff functions may not be able to take care of these discrepancies
```\\n    function _recordPrice(uint256 oracleVersion, PythStructs.Price memory price) private {\\n        _prices[oracleVersion] = Fixed6Lib.from(price.price).mul(\\n            Fixed6Lib.from(SafeCast.toInt256(10 ** SafeCast.toUint256(price.expo > 0 ? price.expo : -price.expo)))\\n        );\\n        _publishTimes[oracleVersion] = price.publishTime;\\n    }\\n```\\n