区块链
文章平均质量分 83
子易予
富贵有定数,学问则无定数,求一分,便得一分!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
aave v3 用户借贷详情计算(calculateUserAccountData)合约代码解析
AaveV3的calculateUserAccountData方法用于计算用户账户数据,包括抵押品总价值、债务总额、平均LTV、平均清算阈值、健康因子等核心指标。该方法首先检查用户配置是否为空,然后处理效率模式(E-Mode)下的特殊参数。通过遍历用户配置中的抵押和借贷资产,计算各项指标:抵押品价值基于aToken余额和资产价格,债务总额同理;LTV和清算阈值根据是否为E-Mode采用不同参数,并计算加权平均值;健康因子由平均清算阈值与债务总额的比值决定。该方法为Aave协议的借贷安全监控提供核心数据支持,原创 2025-11-16 20:15:03 · 681 阅读 · 0 评论 -
aave v3 合约解析1 存款
这篇文章详细解析了Aave V3协议中的存款功能实现逻辑。文章首先分析了supply()函数的参数和入口方法,然后深入讲解了核心的executeSupply()执行流程,包括数据缓存、资产状态更新、利率计算、资产转移等关键步骤。重点解释了抵押品设置的复杂验证逻辑,涉及隔离资产检查、LTV判断、隔离模式状态验证等。文章还通过流程图直观展示了抵押品设置的决策过程,帮助理解Aave协议中存款与抵押品设置的安全机制和风险控制设计。原创 2025-09-21 22:07:54 · 1322 阅读 · 0 评论 -
aave v3.4 利率计算详解
Aave V3.4利率计算机制解析:新版将利率策略地址从资产储备配置移至Pool合约统一管理,所有资产共享同一策略但参数各异。利率计算基于借款使用率动态调整:当使用率超过最佳值时,利率=基础利率+第一斜率+按比例的第二斜率;否则仅按比例计入第一斜率。存款利率则通过借款利率×供应使用率×(1-储备因子)计算得出,其中储备因子为协议费用比例。该机制通过optimalUsageRatio、variableRateSlope等参数实现资金池使用率与利率的动态平衡。原创 2025-09-19 19:58:09 · 1032 阅读 · 0 评论 -
aave v3 合约解析 状态存储
该摘要介绍了Aave V3协议中PoolStorage合约的存储结构设计。主要内容包括:1) 核心数据结构如_reserves(资产数据映射)、_usersConfig(用户配置映射)和_reservesList(资产ID映射);2) ReserveData结构体详细解析,包含资产配置位图、利率参数、代币地址等;3) 关键功能设计如隔离模式、清算机制和利率计算原理;4) 特殊参数如虚拟余额(virtualUnderlyingBalance)的实现考量;5) 存储优化策略,如使用位图压缩用户配置数据。这些设计原创 2025-08-19 16:42:48 · 875 阅读 · 0 评论 -
aave v3 存款与借款利息的计算方式
摘要:AAVE采用流动性指数(liquidityIndex)和标准化余额(scaledBalance)机制优化动态利率计算。流动性指数记录资产累积增长率,通过(currentLiquidityRate,lastUpdateTimestamp,liquidityIndex)三个参数实时更新。用户存款时按当前指数将本金转换为scaledBalance,提款时用scaledBalance×最新指数计算本息,避免记录每次利率变动。该方案将计算复杂度从O(n)降至O(1),显著降低链上存储和计算成本。示例显示三个用户原创 2025-08-13 21:36:53 · 1107 阅读 · 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 · 1165 阅读 · 0 评论 -
solidity中sar和>>的区别
SAR和>>都是右移操作,主要区别在于符号位处理。SAR(算术右移)用于有符号数,右移时会保留符号位(高位补0或1),适用于int128/int256等类型。>>(逻辑右移)用于无符号数,右移时高位一律补0,适用于uint128/uint256等类型。以int8为例,-5(11111011)通过SAR右移2位得到-2(11111110),而通过>>右移则得到62(00111110)。有符号数右移时应选择SAR以保持符号信息,无符号数则使用>>即可。原创 2025-06-06 21:32:52 · 373 阅读 · 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 评论 -
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 · 1025 阅读 · 0 评论 -
uniswap v4 hooks详解
hooks的代码位置在这,它是是组织校验,调用用户创建钩子的类库。我们知道IHooks这些标志位直接对应IHooks接口中的方法,用于标识 Hook 合约是否支持这些方法。除了上述 10 个标志位,还有 4 个额外的标志位用于标识扩展功能。这些标志位与返回int256这几个RETURNS_DELTA标志位用于标识 Hook 合约是否支持在特定操作后返回一个 Delta 值。Delta 值通常表示某种状态的变化,例如交易金额的调整、流动性变化或其他相关的数值。原创 2025-05-04 16:36:44 · 1203 阅读 · 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 评论 -
entities of type `XXX` can not be updated since they are immutable. Entity ids are [1] 问题排查
Error: Failed to transact block operations: internal constraint violated: entities of type `Gravatar` can not be updated since they are immutable. Entity ids are [1]原创 2023-01-14 18:50:11 · 179 阅读 · 0 评论 -
关于cannot estimate gas; transaction may fail or may require manual gas limit错误的排查
今天在hardhat环境中使用etherjs调用智能合约出现了cannot estimate gas;transaction may fail or may require manual gas limit这样的错误排查了一天,这里记录一下排查的步骤。网络环境是georli测试网在网上搜索关键字很多人说是手续费的设置问题。于是增加了gasLimit和gasPrices的配置。没有报错,看似问题是解决了!但是通过返回的交易hash,在etherscan上找不到这笔交易!好像这笔交易丢失了一样!原创 2023-01-11 12:59:59 · 5478 阅读 · 0 评论 -
通过修改mateMask的nonce值修复replacement transaction underpriced的问题
mateMask钱包设置原创 2023-01-11 12:43:54 · 2106 阅读 · 2 评论
分享