<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gambool的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gambool</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gambool]]></copyright><item><title><![CDATA[新版chrome Edge浏览器不再支持手动添加cookie]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/155828730</link><guid>https://blog.youkuaiyun.com/gambool/article/details/155828730</guid><author>gambool</author><pubDate>Thu, 11 Dec 2025 23:20:17 +0800</pubDate><description><![CDATA[摘要：最新版Chrome等浏览器取消了手动添加Cookie的功能，仅保留查看、删除等基础操作。调试时可通过控制台输入document.cookie脚本或安装EditThisCookie扩展插件来添加Cookie。但控制台方法可能失效，推荐使用插件方式，添加后需勾选确认。该改动给前端调试带来不便。]]></description><category></category></item><item><title><![CDATA[aave v3 用户借贷详情计算(calculateUserAccountData)合约代码解析]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/154916481</link><guid>https://blog.youkuaiyun.com/gambool/article/details/154916481</guid><author>gambool</author><pubDate>Sun, 16 Nov 2025 20:15:03 +0800</pubDate><description><![CDATA[AaveV3的calculateUserAccountData方法用于计算用户账户数据，包括抵押品总价值、债务总额、平均LTV、平均清算阈值、健康因子等核心指标。该方法首先检查用户配置是否为空，然后处理效率模式（E-Mode）下的特殊参数。通过遍历用户配置中的抵押和借贷资产，计算各项指标：抵押品价值基于aToken余额和资产价格，债务总额同理；LTV和清算阈值根据是否为E-Mode采用不同参数，并计算加权平均值；健康因子由平均清算阈值与债务总额的比值决定。该方法为Aave协议的借贷安全监控提供核心数据支持，]]></description><category></category></item><item><title><![CDATA[aave v3 资产状态更新(updateState)合约代码解析]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/154878348</link><guid>https://blog.youkuaiyun.com/gambool/article/details/154878348</guid><author>gambool</author><pubDate>Sat, 15 Nov 2025 19:15:01 +0800</pubDate><description><![CDATA[Aave V3通过_updateState函数实时更新借贷状态，核心机制包含利息计算和协议收入分配。_accrueToTreasury函数负责将借款利息按储备因子比例分配给协议金库：先计算当前产生的利息差额(新借款指数-旧借款指数)×缩放债务总量，再乘以reserveFactor确定协议收入份额，最后经流动性指数缩放后累加至金库。这种设计确保协议在每次借贷操作前都能准确更新状态并获取相应收益，同时保持系统资金平衡。]]></description><category></category></item><item><title><![CDATA[aave v3 合约解析2 借款]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/153136466</link><guid>https://blog.youkuaiyun.com/gambool/article/details/153136466</guid><author>gambool</author><pubDate>Sat, 08 Nov 2025 16:50:13 +0800</pubDate><description><![CDATA[摘要： Aave V3的borrow函数实现了用户借款功能，核心流程包括参数验证、债务代币铸造、利率更新和资金转账。借款时需指定资产地址、金额、利率模式（仅支持可变利率）等参数，系统会校验资产状态、借款上限、隔离模式限制等条件。借款后更新用户债务状态，计算健康因子（抵押品价值×清算阈值/总债务）确保不低于清算阈值。关键特性包括：1）效率模式（E-Mode）允许同类资产更高借贷比例；2）隔离借款限制单一资产风险；3）动态利率基于市场供需调整。最终通过aToken合约完成资金转账，并触发借款事件。]]></description><category></category></item><item><title><![CDATA[aave v3 合约解析1 存款]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/150215389</link><guid>https://blog.youkuaiyun.com/gambool/article/details/150215389</guid><author>gambool</author><pubDate>Sun, 21 Sep 2025 22:07:54 +0800</pubDate><description><![CDATA[这篇文章详细解析了Aave V3协议中的存款功能实现逻辑。文章首先分析了supply()函数的参数和入口方法，然后深入讲解了核心的executeSupply()执行流程，包括数据缓存、资产状态更新、利率计算、资产转移等关键步骤。重点解释了抵押品设置的复杂验证逻辑，涉及隔离资产检查、LTV判断、隔离模式状态验证等。文章还通过流程图直观展示了抵押品设置的决策过程，帮助理解Aave协议中存款与抵押品设置的安全机制和风险控制设计。]]></description><category></category></item><item><title><![CDATA[aave v3.4 利率计算详解]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/151868794</link><guid>https://blog.youkuaiyun.com/gambool/article/details/151868794</guid><author>gambool</author><pubDate>Fri, 19 Sep 2025 19:58:09 +0800</pubDate><description><![CDATA[Aave V3.4利率计算机制解析：新版将利率策略地址从资产储备配置移至Pool合约统一管理，所有资产共享同一策略但参数各异。利率计算基于借款使用率动态调整：当使用率超过最佳值时，利率=基础利率+第一斜率+按比例的第二斜率；否则仅按比例计入第一斜率。存款利率则通过借款利率×供应使用率×(1-储备因子)计算得出，其中储备因子为协议费用比例。该机制通过optimalUsageRatio、variableRateSlope等参数实现资金池使用率与利率的动态平衡。]]></description><category></category></item><item><title><![CDATA[aave v3 合约解析 状态存储]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/150218298</link><guid>https://blog.youkuaiyun.com/gambool/article/details/150218298</guid><author>gambool</author><pubDate>Tue, 19 Aug 2025 16:42:48 +0800</pubDate><description><![CDATA[该摘要介绍了Aave V3协议中PoolStorage合约的存储结构设计。主要内容包括：1) 核心数据结构如_reserves(资产数据映射)、_usersConfig(用户配置映射)和_reservesList(资产ID映射)；2) ReserveData结构体详细解析，包含资产配置位图、利率参数、代币地址等；3) 关键功能设计如隔离模式、清算机制和利率计算原理；4) 特殊参数如虚拟余额(virtualUnderlyingBalance)的实现考量；5) 存储优化策略，如使用位图压缩用户配置数据。这些设计]]></description><category></category></item><item><title><![CDATA[aave v3 存款与借款利息的计算方式]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/150348200</link><guid>https://blog.youkuaiyun.com/gambool/article/details/150348200</guid><author>gambool</author><pubDate>Wed, 13 Aug 2025 21:36:53 +0800</pubDate><description><![CDATA[摘要：AAVE采用流动性指数(liquidityIndex)和标准化余额(scaledBalance)机制优化动态利率计算。流动性指数记录资产累积增长率，通过(currentLiquidityRate,lastUpdateTimestamp,liquidityIndex)三个参数实时更新。用户存款时按当前指数将本金转换为scaledBalance，提款时用scaledBalance×最新指数计算本息，避免记录每次利率变动。该方案将计算复杂度从O(n)降至O(1)，显著降低链上存储和计算成本。示例显示三个用户]]></description><category></category></item><item><title><![CDATA[uniswap v4 合约解析3 swap]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/148435746</link><guid>https://blog.youkuaiyun.com/gambool/article/details/148435746</guid><author>gambool</author><pubDate>Sat, 21 Jun 2025 16:21:45 +0800</pubDate><description><![CDATA[本文深入解析了Uniswap V4 Pool的核心swap函数实现。首先介绍了swap方法的参数结构，包括兑换方向、数量和价格限制。然后详细剖析了swap过程的五个关键步骤：参数校验、beforeSwap钩子、核心swap逻辑、afterSwap钩子和资产结算。重点分析了swap的核心撮合循环，包括单步计算、手续费处理、流动性变化和价格更新。特别强调了协议费率的计算逻辑和安全性考量，指出在exactInput模式下需注意恶意钩子可能提高手续费的风险。最后说明了如何通过账本机制记录资产变化，完成用户与池子的结]]></description><category></category></item><item><title><![CDATA[uniswap v4 账本式结算与账户余额管理机制解析]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/148811274</link><guid>https://blog.youkuaiyun.com/gambool/article/details/148811274</guid><author>gambool</author><pubDate>Sat, 21 Jun 2025 16:18:17 +0800</pubDate><description><![CDATA[Uniswap V4采用创新账本机制优化交易流程：所有swap和流动性操作先在&quot;CurrencyDelta&quot;账本上记录余额变化（支持多币种批量处理），用户主动结算时才实际转账。通过transient storage技术实现高效低gas的账本存储，利用地址+币种组合生成唯一slot作为键值。相比V3的实时转账模式，V4的延迟结算设计为批量操作、钩子扩展等功能奠定基础，同时显著降低gas成本。架构图示展示了账本结构及余额变更的记账流程，核心采用tload/tstore指令实现快速读写。]]></description><category></category></item><item><title><![CDATA[Uniswap v4/v3 computeSwapStep 方法解析]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/148640458</link><guid>https://blog.youkuaiyun.com/gambool/article/details/148640458</guid><author>gambool</author><pubDate>Mon, 16 Jun 2025 14:16:01 +0800</pubDate><description><![CDATA[Uniswap V4/V3的computeSwapStep函数是交易撮合的核心算法，用于计算单个价格区间内的兑换过程。该函数接受当前价格、目标价格、流动性、剩余兑换量和手续费参数，通过精确数学运算确定：1）兑换后的新价格；2）实际输入输出量；3）手续费。核心逻辑分为指定输入(exactIn)和指定输出(exactOut)两种模式，通过sqrtPrice数学公式计算价格变化路径。特别地，在指定输入模式下，系统会先扣除手续费，再根据剩余金额计算可执行的最大兑]]></description><category></category></item><item><title><![CDATA[uniswap v4 TickBitmap库函数解析]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/148567283</link><guid>https://blog.youkuaiyun.com/gambool/article/details/148567283</guid><author>gambool</author><pubDate>Thu, 12 Jun 2025 20:08:02 +0800</pubDate><description><![CDATA[Uniswap V3/V4使用位图结构高效管理大量tick状态。核心机制是将tick压缩为高16位wordPos和低8位bitPos，其中uint256作为value值，每个bit代表一个tick的初始化状态。通过位运算实现了tick状态的快速查找和翻转：1）compress()方法处理tick对齐和负数取整；2）flipTick()使用位异或操作翻转状态位；3）nextInitializedTickWithinOneWord()通过位掩码和MSB/LSB算法高效查找相邻的初始化tick。这种设计大幅降低了]]></description><category></category></item><item><title><![CDATA[solidity中sar和＞＞的区别]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/148482313</link><guid>https://blog.youkuaiyun.com/gambool/article/details/148482313</guid><author>gambool</author><pubDate>Fri, 06 Jun 2025 21:32:52 +0800</pubDate><description><![CDATA[SAR和>>都是右移操作，主要区别在于符号位处理。SAR（算术右移）用于有符号数，右移时会保留符号位（高位补0或1），适用于int128/int256等类型。>>（逻辑右移）用于无符号数，右移时高位一律补0，适用于uint128/uint256等类型。以int8为例，-5（11111011）通过SAR右移2位得到-2（11111110），而通过>>右移则得到62（00111110）。有符号数右移时应选择SAR以保持符号信息，无符号数则使用>>即可。]]></description><category></category></item><item><title><![CDATA[uniswap v4 合约解析2 更新pool流动性]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/148098145</link><guid>https://blog.youkuaiyun.com/gambool/article/details/148098145</guid><author>gambool</author><pubDate>Tue, 20 May 2025 21:00:02 +0800</pubDate><description><![CDATA[这一章我们分析pool中流动性的修改过程。代码位置如下：这个方法提供增加或减少流动性的功能，并计算用户应得的手续费（）和流动性变化（），同时支持钩子（Hooks）机制，允许在流动性修改前后执行自定义逻辑。]]></description><category></category></item><item><title><![CDATA[uniswap v3/v4 ​getSqrtRatioAtTick將tick转换为价格]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/147898834</link><guid>https://blog.youkuaiyun.com/gambool/article/details/147898834</guid><author>gambool</author><pubDate>Mon, 12 May 2025 16:16:55 +0800</pubDate><description><![CDATA[Uniswap在智能合约中通过getSqrtRatioAtTick函数计算价格P时，直接使用tick值（如887272）会导致计算量庞大。该函数通过将tick的绝对值分解为二进制形式，并利用预计算的魔数进行有限次乘法运算，从而简化计算过程。具体步骤包括：根据tick的二进制位选择相应的魔数进行乘法运算，并右移128位以保持精度。若tick为正数，则通过求倒数避免溢出，并将结果从Q128.128格式转换为Q128.96格式。这种方法有效控制了计算量，确保了高效的价格计算。]]></description><category></category></item><item><title><![CDATA[uniswap v4 合约解析1 pool初始化]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/147714045</link><guid>https://blog.youkuaiyun.com/gambool/article/details/147714045</guid><author>gambool</author><pubDate>Mon, 05 May 2025 16:01:36 +0800</pubDate><description><![CDATA[当我们创建一个pool时，其入口函数位PoolManager合约的initialize方法: 代码如下：


校验

第一步是校验


根据MAX_TICK_SPACING和MIN_TICK_SPACING的定义，tickSpacing的范围是此提供了足够的灵活性，允许开发者根据需求选择适合的。较小的 刻度间距更密集，允许更精细的价格范围。适合高精度的交易场景，但会增加存储和计算成本。较大的 刻度间距更稀疏，减少存储和计算成本。适合低精度的交易场景，但可能限制流动性提供者的灵活性。


这段代码的作用是对 ]]></description><category></category></item><item><title><![CDATA[uniswap v4 hooks详解]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/147699864</link><guid>https://blog.youkuaiyun.com/gambool/article/details/147699864</guid><author>gambool</author><pubDate>Sun, 04 May 2025 16:36:44 +0800</pubDate><description><![CDATA[hooks的代码位置在这，它是是组织校验，调用用户创建钩子的类库。我们知道IHooks这些标志位直接对应IHooks接口中的方法，用于标识 Hook 合约是否支持这些方法。除了上述 10 个标志位，还有 4 个额外的标志位用于标识扩展功能。这些标志位与返回int256这几个RETURNS_DELTA标志位用于标识 Hook 合约是否支持在特定操作后返回一个 Delta 值。Delta 值通常表示某种状态的变化，例如交易金额的调整、流动性变化或其他相关的数值。]]></description><category></category></item><item><title><![CDATA[uniswap getTickAtSqrtPrice 方法解析]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/147462932</link><guid>https://blog.youkuaiyun.com/gambool/article/details/147462932</guid><author>gambool</author><pubDate>Mon, 28 Apr 2025 18:06:22 +0800</pubDate><description><![CDATA[TickMath这个文件里面还有一个方法getSqrtPriceAtTick，通过tick计算sqrtPrice，我们把每个tick都通过getSqrtPriceAtTick方法计算出sqrtPrice，再通过getTickAtSqrtPrice方法计算出tick，这里记为tick1，我们统计每一个tick和tick1之间的误差，最终统计出log_sqrt10001 的上限误差和下限误差。两个64位小数的二进制数相乘会得到一个128位小数的数字,将128位的小数去除掉就是真正的tick值。]]></description><category></category></item><item><title><![CDATA[逐位逼近法计算对数的小数部分]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/147427581</link><guid>https://blog.youkuaiyun.com/gambool/article/details/147427581</guid><author>gambool</author><pubDate>Tue, 22 Apr 2025 18:33:15 +0800</pubDate><description><![CDATA[逐位逼近法（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=]]></description><category></category></item><item><title><![CDATA[使用mybatis-generator-maven-plugin生成的实体会自动覆盖rootClass定义的字段]]></title><link>https://blog.youkuaiyun.com/gambool/article/details/144935220</link><guid>https://blog.youkuaiyun.com/gambool/article/details/144935220</guid><author>gambool</author><pubDate>Sat, 04 Jan 2025 22:03:52 +0800</pubDate><description><![CDATA[使用编程的方式调用mybatis-generator-core的功能生成代码则不会出现上面的问题，因为在idea中运行代码的时候会先自动进行编译，生成target/class目录以及编译后的文件，并且自动加载其中的class，但是用插件的方式则需要先编译成功后在添加./target/classes的classPath到generatorConfig.xml中.]]></description><category></category></item></channel></rss>