uniswap
文章平均质量分 86
子易予
富贵有定数,学问则无定数,求一分,便得一分!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
uniswap v4 合约解析3 swap
本文深入解析了Uniswap V4 Pool的核心swap函数实现。首先介绍了swap方法的参数结构,包括兑换方向、数量和价格限制。然后详细剖析了swap过程的五个关键步骤:参数校验、beforeSwap钩子、核心swap逻辑、afterSwap钩子和资产结算。重点分析了swap的核心撮合循环,包括单步计算、手续费处理、流动性变化和价格更新。特别强调了协议费率的计算逻辑和安全性考量,指出在exactInput模式下需注意恶意钩子可能提高手续费的风险。最后说明了如何通过账本机制记录资产变化,完成用户与池子的结原创 2025-06-21 16:21:45 · 933 阅读 · 0 评论 -
uniswap v4 账本式结算与账户余额管理机制解析
Uniswap V4采用创新账本机制优化交易流程:所有swap和流动性操作先在"CurrencyDelta"账本上记录余额变化(支持多币种批量处理),用户主动结算时才实际转账。通过transient storage技术实现高效低gas的账本存储,利用地址+币种组合生成唯一slot作为键值。相比V3的实时转账模式,V4的延迟结算设计为批量操作、钩子扩展等功能奠定基础,同时显著降低gas成本。架构图示展示了账本结构及余额变更的记账流程,核心采用tload/tstore指令实现快速读写。原创 2025-06-21 16:18:17 · 803 阅读 · 0 评论 -
Uniswap v4/v3 computeSwapStep 方法解析
Uniswap V4/V3的computeSwapStep函数是交易撮合的核心算法,用于计算单个价格区间内的兑换过程。该函数接受当前价格、目标价格、流动性、剩余兑换量和手续费参数,通过精确数学运算确定:1)兑换后的新价格;2)实际输入输出量;3)手续费。核心逻辑分为指定输入(exactIn)和指定输出(exactOut)两种模式,通过sqrtPrice数学公式计算价格变化路径。特别地,在指定输入模式下,系统会先扣除手续费,再根据剩余金额计算可执行的最大兑原创 2025-06-16 14:16:01 · 786 阅读 · 0 评论 -
uniswap v4 TickBitmap库函数解析
Uniswap V3/V4使用位图结构高效管理大量tick状态。核心机制是将tick压缩为高16位wordPos和低8位bitPos,其中uint256作为value值,每个bit代表一个tick的初始化状态。通过位运算实现了tick状态的快速查找和翻转:1)compress()方法处理tick对齐和负数取整;2)flipTick()使用位异或操作翻转状态位;3)nextInitializedTickWithinOneWord()通过位掩码和MSB/LSB算法高效查找相邻的初始化tick。这种设计大幅降低了原创 2025-06-12 20:08:02 · 1166 阅读 · 0 评论 -
uniswap v3/v4 getSqrtRatioAtTick將tick转换为价格
Uniswap在智能合约中通过getSqrtRatioAtTick函数计算价格P时,直接使用tick值(如887272)会导致计算量庞大。该函数通过将tick的绝对值分解为二进制形式,并利用预计算的魔数进行有限次乘法运算,从而简化计算过程。具体步骤包括:根据tick的二进制位选择相应的魔数进行乘法运算,并右移128位以保持精度。若tick为正数,则通过求倒数避免溢出,并将结果从Q128.128格式转换为Q128.96格式。这种方法有效控制了计算量,确保了高效的价格计算。原创 2025-05-12 16:16:55 · 599 阅读 · 0 评论 -
uniswap v4 合约解析1 pool初始化
当我们创建一个pool时,其入口函数位PoolManager合约的initialize方法: 代码如下:校验第一步是校验根据MAX_TICK_SPACING和MIN_TICK_SPACING的定义,tickSpacing的范围是此提供了足够的灵活性,允许开发者根据需求选择适合的。较小的 刻度间距更密集,允许更精细的价格范围。适合高精度的交易场景,但会增加存储和计算成本。较大的 刻度间距更稀疏,减少存储和计算成本。适合低精度的交易场景,但可能限制流动性提供者的灵活性。这段代码的作用是对原创 2025-05-05 16:01:36 · 1026 阅读 · 0 评论 -
uniswap v4 hooks详解
hooks的代码位置在这,它是是组织校验,调用用户创建钩子的类库。我们知道IHooks这些标志位直接对应IHooks接口中的方法,用于标识 Hook 合约是否支持这些方法。除了上述 10 个标志位,还有 4 个额外的标志位用于标识扩展功能。这些标志位与返回int256这几个RETURNS_DELTA标志位用于标识 Hook 合约是否支持在特定操作后返回一个 Delta 值。Delta 值通常表示某种状态的变化,例如交易金额的调整、流动性变化或其他相关的数值。原创 2025-05-04 16:36:44 · 1204 阅读 · 0 评论 -
uniswap getTickAtSqrtPrice 方法解析
TickMath这个文件里面还有一个方法getSqrtPriceAtTick,通过tick计算sqrtPrice,我们把每个tick都通过getSqrtPriceAtTick方法计算出sqrtPrice,再通过getTickAtSqrtPrice方法计算出tick,这里记为tick1,我们统计每一个tick和tick1之间的误差,最终统计出log_sqrt10001 的上限误差和下限误差。两个64位小数的二进制数相乘会得到一个128位小数的数字,将128位的小数去除掉就是真正的tick值。原创 2025-04-28 18:06:22 · 844 阅读 · 0 评论 -
逐位逼近法计算对数的小数部分
逐位逼近法(Bit-by-Bit Approximation)是一种通过 迭代和位操作 高效计算数学函数(如对数、平方根等)的方法。,这里的0.b1b2b3b4是一个二进制的数字也就是说。,显然其结果是小于1的,接下来我们来推导其结算过程。<2.0736所以b2.b3b4>1,得出b2=1。的结果约为二进制的0.01也就是十进制的0.25。, 所以b1.b2b3b4<1,得出b1=0。继续两边同时乘以2得出:b2.b3b4=两边同时乘以2得到b1.b2b3b4=也就是说b1.b2b3b4=原创 2025-04-22 18:33:15 · 404 阅读 · 0 评论 -
uniswap v3/v4 中pool的状态管理
Uniswap V4 的 State 结构体用于管理流动性池的状态,包含多个关键字段和映射。Slot0 是一个紧凑的结构体,使用 bytes32 类型存储多个字段,如 sqrtPriceX96、tick、protocolFee 和 lpFee,以节省存储成本。State 结构体还包括全局手续费增长值 feeGrowthGlobal0X128 和 feeGrowthGlobal1X128,流动性 liquidity,以及多个映射用于管理 ticks、原创 2023-02-17 20:12:58 · 1796 阅读 · 1 评论
分享