Commit before cuna

This commit is contained in:
2025-09-04 02:48:34 +02:00
parent 7e55515063
commit 8ef7f0b9f1
32 changed files with 4668 additions and 17 deletions

View File

@@ -0,0 +1,58 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@uniswap/v3-core/contracts/libraries/FullMath.sol";
/// @notice Minimal interface for a Uniswap V3 pool (to access slot0)
interface IUniswapV3Pool {
function safelyGetStateOfAMM()
external
view
returns (
uint160 sqrtPrice, // The current sqrt(price) as a Q64.96 value
int24 tick,
uint16 lastFee,
uint8 pluginConfig,
uint128 activeLiquidity,
uint24 nextTick,
uint24 previousTick
);
}
/// @title USDC Quote for SWAPx
/// @notice Returns the USDC price (scaled to 18 decimals) of 1 token,
/// assuming a pool where token0 is USDC and token1 is the token of interest.
/// The pool is hardcoded as well as the token addresses.
contract UsdcQuoteV3 {
// Hardcoded addresses
address public constant POOL_ADDRESS = 0x467865E7Ce29E7ED8f362D51Fd7141117B234b44;
// token0 is USDC
address public constant USDC = 0x29219dd400f2Bf60E5a23d13Be72B486D4038894;
// token1 is the token to be priced (assumed to have 18 decimals)
address public constant TOKEN = 0xA04BC7140c26fc9BB1F36B1A604C7A5a88fb0E70;
// Constant representing 2^192 used for fixedpoint math
uint256 public constant Q192 = 2**192;
function getSqrtPrice() public view returns (uint256 price) {
IUniswapV3Pool pool = IUniswapV3Pool(POOL_ADDRESS);
(uint160 sqrtPrice,,,,,,) = pool.safelyGetStateOfAMM();
price = sqrtPrice;
}
/**
* @notice Returns the USDC price (scaled to 18 decimals) for exactly 1 TOKEN.
*
* @return amount18 The USDC amount (scaled to 18 decimals) per 1 TOKEN.
*/
function getLatestPrice(address token) external view returns (uint256 amount18) {
uint256 sqrtPrice = getSqrtPrice();
uint256 numerator1 = uint256(sqrtPrice) * uint256(sqrtPrice);
uint256 directPrice = FullMath.mulDiv(numerator1, 10**6, 1 << 192);
require(directPrice > 0, "Direct price is zero");
amount18 = 1e36 / directPrice;
}
}