
(प्रायोगिक) Uniswap v4 Hook विकास के लिए Solidity घटक और उपयोगिताएँ
Uniswap v4 Hook विकास के लिए प्रायोगिक solidity उपयोगिताएँ, लाइब्रेरीज़, और घटक
आवश्यक है foundry
forge install uniswapfoundation/hookmate
PoolStateLibrary.sol⚠️ उत्पादन के लिए तैयार नहीं। भविष्य में ब्रेकिंग परिवर्तन होंगे ⚠️
जब तक v4-core कोड-फ्रीज़ नहीं होता, इंटरफ़ेस में परिवर्तन हो सकते हैं
Pool.State जानकारी तक पहुँचने के लिए एक solidity लाइब्रेरी -- यहाँ तक कि नेस्टेड मैपिंग्स भी। यह PoolManager.extsload के माध्यम से उजागर मनमाने स्टोरेज स्लॉट रीड्स पर निर्भर करती है
mapping(PoolId id => Pool.State) public pools; में प्रत्येक मान PoolStateLibrary के माध्यम से उपलब्ध है:
// PoolManager.sol
mapping(PoolId id => Pool.State) public pools;
// Pool.sol
struct State {
Slot0 slot0; // getSlot0()
| uint160 sqrtPriceX96;
| int24 tick;
| uint16 protocolFee;
| uint24 swapFee;
uint256 feeGrowthGlobal0X128; // getFeeGrowthGlobal()
uint256 feeGrowthGlobal1X128; // ..
uint128 liquidity; // getLiquidity()
mapping(int24 => TickInfo) ticks; // getTickInfo()
| uint128 liquidityGross; // getTickLiquidity()
| int128 liquidityNet; // ..
| uint256 feeGrowthOutside0X128; // getTickFeeGrowthOutside()
| uint256 feeGrowthOutside1X128; // ..
mapping(int16 => uint256) tickBitmap; // getTickBitmap()
mapping(bytes32 => Position.Info) positions; // getPositionInfo()
| uint128 liquidity; // getPositionLiquidity()
| uint256 feeGrowthInside0LastX128; // getFeeGrowthInside() (लाइव गणना)
| uint256 feeGrowthInside1LastX128; // ..
}
उदाहरण उपयोग: पोज़िशन शुल्क प्राप्त करें
import {PoolStateLibrary} from "hookmate/libraries/PoolStateLibrary.sol";
import {PoolId, PoolIdLibrary} from "v4-core/src/types/PoolId.sol";
...
using PoolIdLibrary for PoolKey;
...
IPoolManager manager = address(0xABC);
address liquidityOwner = address(0x123); // संभवतः PoolModifyLiquidityTest होगा
int24 tickLower = -60;
int24 tickUpper = 60;
PoolKey memory key = PoolKey(...);
bytes32 positionId = keccak256(abi.encodePacked(address(liquidityOwner), tickLower, tickUpper));
(uint128 liquidity, uint256 feeGrowthInside0X128, uint256 feeGrowthInside1X128) =
PoolStateLibrary.getPositionInfo(manager, key.toId(), positionId);