Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
hookmate — (实验性)用于 Uniswap v4 Hook 开发的 Solidity 组件和实用工具 | Kitploit
工具/GitHubGitHub/gmh5225/hookmate
通用工具密码学实用工具与框架
GitHubgmh5225/hookmate

hookmate

(实验性)用于 Uniswap v4 Hook 开发的 Solidity 组件和实用工具

查看仓库
202年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

hookmate

用于 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() (calculated live)
        | 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); // likely will be 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);

下载工具