自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 新版chrome Edge浏览器不再支持手动添加cookie

摘要:最新版Chrome等浏览器取消了手动添加Cookie的功能,仅保留查看、删除等基础操作。调试时可通过控制台输入document.cookie脚本或安装EditThisCookie扩展插件来添加Cookie。但控制台方法可能失效,推荐使用插件方式,添加后需勾选确认。该改动给前端调试带来不便。

2025-12-11 23:20:17 342 1

原创 aave v3 用户借贷详情计算(calculateUserAccountData)合约代码解析

AaveV3的calculateUserAccountData方法用于计算用户账户数据,包括抵押品总价值、债务总额、平均LTV、平均清算阈值、健康因子等核心指标。该方法首先检查用户配置是否为空,然后处理效率模式(E-Mode)下的特殊参数。通过遍历用户配置中的抵押和借贷资产,计算各项指标:抵押品价值基于aToken余额和资产价格,债务总额同理;LTV和清算阈值根据是否为E-Mode采用不同参数,并计算加权平均值;健康因子由平均清算阈值与债务总额的比值决定。该方法为Aave协议的借贷安全监控提供核心数据支持,

2025-11-16 20:15:03 660

原创 aave v3 资产状态更新(updateState)合约代码解析

Aave V3通过_updateState函数实时更新借贷状态,核心机制包含利息计算和协议收入分配。_accrueToTreasury函数负责将借款利息按储备因子比例分配给协议金库:先计算当前产生的利息差额(新借款指数-旧借款指数)×缩放债务总量,再乘以reserveFactor确定协议收入份额,最后经流动性指数缩放后累加至金库。这种设计确保协议在每次借贷操作前都能准确更新状态并获取相应收益,同时保持系统资金平衡。

2025-11-15 19:15:01 365

原创 aave v3 合约解析2 借款

摘要: Aave V3的borrow函数实现了用户借款功能,核心流程包括参数验证、债务代币铸造、利率更新和资金转账。借款时需指定资产地址、金额、利率模式(仅支持可变利率)等参数,系统会校验资产状态、借款上限、隔离模式限制等条件。借款后更新用户债务状态,计算健康因子(抵押品价值×清算阈值/总债务)确保不低于清算阈值。关键特性包括:1)效率模式(E-Mode)允许同类资产更高借贷比例;2)隔离借款限制单一资产风险;3)动态利率基于市场供需调整。最终通过aToken合约完成资金转账,并触发借款事件。

2025-11-08 16:50:13 881

原创 aave v3 合约解析1 存款

这篇文章详细解析了Aave V3协议中的存款功能实现逻辑。文章首先分析了supply()函数的参数和入口方法,然后深入讲解了核心的executeSupply()执行流程,包括数据缓存、资产状态更新、利率计算、资产转移等关键步骤。重点解释了抵押品设置的复杂验证逻辑,涉及隔离资产检查、LTV判断、隔离模式状态验证等。文章还通过流程图直观展示了抵押品设置的决策过程,帮助理解Aave协议中存款与抵押品设置的安全机制和风险控制设计。

2025-09-21 22:07:54 1269

原创 aave v3.4 利率计算详解

Aave V3.4利率计算机制解析:新版将利率策略地址从资产储备配置移至Pool合约统一管理,所有资产共享同一策略但参数各异。利率计算基于借款使用率动态调整:当使用率超过最佳值时,利率=基础利率+第一斜率+按比例的第二斜率;否则仅按比例计入第一斜率。存款利率则通过借款利率×供应使用率×(1-储备因子)计算得出,其中储备因子为协议费用比例。该机制通过optimalUsageRatio、variableRateSlope等参数实现资金池使用率与利率的动态平衡。

2025-09-19 19:58:09 1018

原创 aave v3 合约解析 状态存储

该摘要介绍了Aave V3协议中PoolStorage合约的存储结构设计。主要内容包括:1) 核心数据结构如_reserves(资产数据映射)、_usersConfig(用户配置映射)和_reservesList(资产ID映射);2) ReserveData结构体详细解析,包含资产配置位图、利率参数、代币地址等;3) 关键功能设计如隔离模式、清算机制和利率计算原理;4) 特殊参数如虚拟余额(virtualUnderlyingBalance)的实现考量;5) 存储优化策略,如使用位图压缩用户配置数据。这些设计

2025-08-19 16:42:48 839

原创 aave v3 存款与借款利息的计算方式

摘要:AAVE采用流动性指数(liquidityIndex)和标准化余额(scaledBalance)机制优化动态利率计算。流动性指数记录资产累积增长率,通过(currentLiquidityRate,lastUpdateTimestamp,liquidityIndex)三个参数实时更新。用户存款时按当前指数将本金转换为scaledBalance,提款时用scaledBalance×最新指数计算本息,避免记录每次利率变动。该方案将计算复杂度从O(n)降至O(1),显著降低链上存储和计算成本。示例显示三个用户

2025-08-13 21:36:53 1085

原创 uniswap v4 合约解析3 swap

本文深入解析了Uniswap V4 Pool的核心swap函数实现。首先介绍了swap方法的参数结构,包括兑换方向、数量和价格限制。然后详细剖析了swap过程的五个关键步骤:参数校验、beforeSwap钩子、核心swap逻辑、afterSwap钩子和资产结算。重点分析了swap的核心撮合循环,包括单步计算、手续费处理、流动性变化和价格更新。特别强调了协议费率的计算逻辑和安全性考量,指出在exactInput模式下需注意恶意钩子可能提高手续费的风险。最后说明了如何通过账本机制记录资产变化,完成用户与池子的结

2025-06-21 16:21:45 905

原创 uniswap v4 账本式结算与账户余额管理机制解析

Uniswap V4采用创新账本机制优化交易流程:所有swap和流动性操作先在"CurrencyDelta"账本上记录余额变化(支持多币种批量处理),用户主动结算时才实际转账。通过transient storage技术实现高效低gas的账本存储,利用地址+币种组合生成唯一slot作为键值。相比V3的实时转账模式,V4的延迟结算设计为批量操作、钩子扩展等功能奠定基础,同时显著降低gas成本。架构图示展示了账本结构及余额变更的记账流程,核心采用tload/tstore指令实现快速读写。

2025-06-21 16:18:17 794

原创 Uniswap v4/v3 computeSwapStep 方法解析

Uniswap V4/V3的computeSwapStep函数是交易撮合的核心算法,用于计算单个价格区间内的兑换过程。该函数接受当前价格、目标价格、流动性、剩余兑换量和手续费参数,通过精确数学运算确定:1)兑换后的新价格;2)实际输入输出量;3)手续费。核心逻辑分为指定输入(exactIn)和指定输出(exactOut)两种模式,通过sqrtPrice数学公式计算价格变化路径。特别地,在指定输入模式下,系统会先扣除手续费,再根据剩余金额计算可执行的最大兑

2025-06-16 14:16:01 771

原创 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 1152

原创 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 367

原创 uniswap v4 合约解析2 更新pool流动性

这一章我们分析pool中流动性的修改过程。代码位置如下:这个方法提供增加或减少流动性的功能,并计算用户应得的手续费()和流动性变化(),同时支持钩子(Hooks)机制,允许在流动性修改前后执行自定义逻辑。

2025-05-20 21:00:02 240

原创 uniswap v3/v4 ​getSqrtRatioAtTick將tick转换为价格

Uniswap在智能合约中通过getSqrtRatioAtTick函数计算价格P时,直接使用tick值(如887272)会导致计算量庞大。该函数通过将tick的绝对值分解为二进制形式,并利用预计算的魔数进行有限次乘法运算,从而简化计算过程。具体步骤包括:根据tick的二进制位选择相应的魔数进行乘法运算,并右移128位以保持精度。若tick为正数,则通过求倒数避免溢出,并将结果从Q128.128格式转换为Q128.96格式。这种方法有效控制了计算量,确保了高效的价格计算。

2025-05-12 16:16:55 583

原创 uniswap v4 合约解析1 pool初始化

当我们创建一个pool时,其入口函数位PoolManager合约的initialize方法: 代码如下:校验第一步是校验根据MAX_TICK_SPACING和MIN_TICK_SPACING的定义,tickSpacing的范围是此提供了足够的灵活性,允许开发者根据需求选择适合的。较小的 刻度间距更密集,允许更精细的价格范围。适合高精度的交易场景,但会增加存储和计算成本。较大的 刻度间距更稀疏,减少存储和计算成本。适合低精度的交易场景,但可能限制流动性提供者的灵活性。这段代码的作用是对

2025-05-05 16:01:36 1016

原创 uniswap v4 hooks详解

hooks的代码位置在这,它是是组织校验,调用用户创建钩子的类库。我们知道IHooks这些标志位直接对应IHooks接口中的方法,用于标识 Hook 合约是否支持这些方法。除了上述 10 个标志位,还有 4 个额外的标志位用于标识扩展功能。这些标志位与返回int256这几个RETURNS_DELTA标志位用于标识 Hook 合约是否支持在特定操作后返回一个 Delta 值。Delta 值通常表示某种状态的变化,例如交易金额的调整、流动性变化或其他相关的数值。

2025-05-04 16:36:44 1172

原创 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 834

原创 逐位逼近法计算对数的小数部分

逐位逼近法(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 398

原创 使用mybatis-generator-maven-plugin生成的实体会自动覆盖rootClass定义的字段

使用编程的方式调用mybatis-generator-core的功能生成代码则不会出现上面的问题,因为在idea中运行代码的时候会先自动进行编译,生成target/class目录以及编译后的文件,并且自动加载其中的class,但是用插件的方式则需要先编译成功后在添加./target/classes的classPath到generatorConfig.xml中.

2025-01-04 22:03:52 933

原创 iframe里的请求无法携带cookie问题解决(纯前端)

现在有两个页面,A通过iframe的方式嵌入B,当在A页面点击B页面的按钮发送网络请求时,发现请求并没有携带cookie信息,导致后端无法获取相应的信息。但是直接通过B页面发起亲求则可以正常携带cookie找了好几个解决方案,均是要修改后端返回或者更改nginx配置,然而在企业的开发环境中往往这么做的沟通成本是比较高的,这里分享一个纯前端的坚决方案。

2024-10-09 14:22:24 7840 3

原创 Cannot resolve org.pentaho:mondrian:4.5.0.7-258

Cannot resolve org.pentaho:mondrian

2024-03-13 16:11:38 617

原创 javacc 教程7 LOOKAHEAD

在输入流中进一步探索令牌的过程被称为“向前看”输入流——因此使用了“LOOKAHEAD”这个词。我们可以通过命令行选项或语法文件开头中的选项部分设置全局的LOOKAHEAD值。 这个值是一个整数,表示在做出选择决策时要提前查看的token数。LOOKAHEAD选项的默认值为1,也就是上面描述的默认的前瞻算法。

2024-03-01 18:21:24 1185 1

原创 javacc 教程6 jjtree

我们知道JavaCC是一种编译器开发工具,主要用于解析输入文本并生成与其语法结构相对应的语法树。JavaCC生成的语法树是一种较低级别的抽象,需要开发人员自行定义和实现对其的处理和操作。而JJTree是JavaCC的一个扩展,提供了一种更高级别的抽象,允许开发人员更方便地处理和操作语法树。JJTree生成的语法树节点包含属性和方法,可以更方便地遍历和操作语法树。因此,相对于JavaCC,JJTree可以更方便地构建和处理语法树,尤其是对于复杂的语法结构和语法树节点操作需求。

2024-01-02 16:41:31 1420

原创 nodejs 服务linux上启动出现Port 3000 is already in use

今天把一直以来开发的nodejs项目部署到linux服务器上出现了Port 3000 is already in use的错误,接着程序就退出了,紧接着运行netstat -anop |grep 3000,发现并没有任何进程占用3000端口,这让人很疑惑,因为一直以来在windows上开发从来没有出现过这样的问题。事实确实如此,在Linux系统上,内核对端口的监听是独占的,即同一个端口只能被一个进程监听。而我们的应用程序中使用了。用于我改动了启动文件的监听端口于是整个服务变成了监听两个不同的端口。

2023-12-25 17:48:33 1085

原创 nodejs 日志框架 winston 详细配置 1

最近要把手上项目的日志打印规范一下,需要引入一个日志框架,经过多方调研,最终选择了winston。由于本人主要的开发语言是java,springboot那一套,日志打印的规范也力求按照之前使用log4j的格式靠拢,然而在真正使用对比下来,发现此框架虽然号称nodejs上功能最强大的日志框架,对比java任有一些基本的要求实现起来非常麻烦。经过多方尝试,算是基本实现了所需的功能,这里做一个记录。这些功能在java中属于非常基础的功能,而换到nodejs则需要费一些周折。

2023-11-27 22:14:31 2939 1

原创 TypeError: Do not know how to serialize a BigInt

这种对于直接序列化BigInt固然是可以的,但是当我们需要进行json序列化的情况往往是相对复杂的结构,比如一个object里面嵌套了一个BigInt类型的字段,使用上述方法进行序列化依旧会报出同样的错误。JSON.stringify(arg)这个方法可以传递一个自定义的replacer函数,用以定义json序列化的过程。JavaScript 不允许修改内置类型的原型方法,因此,不能在 BigInt 上直接定义。遇到其他类型的序列化问题,也可以按如上方式解决!如果有同学完成了此方法的定义,希望可以留言!

2023-11-22 22:02:38 4277

原创 javacc 教程5 词法状态的示例

首先我们需要抓取这几封往来邮件的摘要,也就是“MESSAGE SUMMARY”部分,这里我们选择抓取邮件的“Subject”部分作为SUMMARY,我们观察到每封邮件都是以“*** EOOH ***”字符串作为起始位置,而tokenManager的初始状态为DEFAULT,在此状态下tokenManager只是简单的吃掉扫描的字符,于是我们在DEFAULT状态下定义,当遇到“*** EOOH ***”时进行状态切换,然后在切换后的状态,再继续抓取我们需要匹配的字段。} else {

2023-11-06 18:24:45 200

原创 javacc 教程4 Token Manager

从上图可以看出javacc在解析数据流的核心是token manager,它涵盖了词法状态(Lexical States)和词法动作(Lexical Actions)。

2023-09-26 17:45:58 316

原创 javacc 教程3 TOKEN和SKIP

上节的实例用的了TOKEN和SKIP,本节写一个较为详细的用法。

2023-09-22 18:08:43 375

原创 javacc教程2 入门示例

第一个例子,我们做一个花括号的匹配,控制台输入一组左大括号,后面跟着相同数量的右大括号,最后是零个或多个行结束符(回车),最后是文件结束符(ctrl+d)。

2023-09-13 17:43:04 343

原创 javacc教程1 环境准备

由于引用了JAVACC_HOME和JAVACC_TUTORIAL_HOME的环境变量,所以务必保持前面环境变量的生效。获取javacc-tutorial的源码,本教程中的所有示例均维护在此项目中,将源码所在路径维护到环境变量 JAVACC_TUTORIAL_HOME。idea导入javacc-tutorial项目后需得开启ant工具窗口。将javacc的路径添加到环境变量JAVACC_HOME。:运行javacc命令,生成的java代码到指定的位置.:删除生成的java代码所在的路径。

2023-09-11 17:59:23 742

原创 on prisma.updateManytickInfo. Provided Json, expected DateTimeNullableFilter or DateTime or Null.

Argument updatedAt: Got invalid value{ lt: '2023-06-10 19:04:18'}on prisma.updateManytickInfo. Provided Json, expected DateTimeNullableFilter or DateTime or Null.

2023-06-11 11:09:00 345

原创 suiswap空投教程

据SuiSwap团队的说法,1个zealy XP相当于0.25个SuiSwap点,对于11级以上的玩家,1个zealy XP相当于0.5个SuiSwap点。目前获取suiswap-points的途径主要有两个,一个是在zealy上组任务,还有一个就是参与discord上的讨论。这里面有很多的任务,大部分都比较简单,关注,转发twitter浏览网页之类的。,注册成功后可以在其中找到获取suiswap-points的活动。,这是一个web3的任务平台,以前叫作Crew3。接下来点击quests。

2023-04-21 12:11:05 951

原创 运行flutter项目时出现D:..\android.dart_tool\package_config.json does not exist.

android.dart_tool\package_config.json does not exist. Did you run this command from the same directory as your pubspec.yaml file?

2023-03-22 20:22:32 2403

原创 vscode中的js文件提示 找不到名称 “require“

找不到名称 "require"。是否需要为节点安装类型定义?请尝试使用 `npm i --save-dev @types/node`。由于我的文件是js文件,所以通过在根目录下添加jsconfig.json的方法解决。尝试过npm i --save-dev @types/node命令,未能解决问题。网上还有很多通过修改tsconfig.json的方法,尝试过,也不曾解决问题。

2023-03-07 12:47:07 2846

原创 uniswap v3/v4 中pool的状态管理

Uniswap V4 的 State 结构体用于管理流动性池的状态,包含多个关键字段和映射。Slot0 是一个紧凑的结构体,使用 bytes32 类型存储多个字段,如 sqrtPriceX96、tick、protocolFee 和 lpFee,以节省存储成本。State 结构体还包括全局手续费增长值 feeGrowthGlobal0X128 和 feeGrowthGlobal1X128,流动性 liquidity,以及多个映射用于管理 ticks、

2023-02-17 20:12:58 1771 1

原创 Polygon 1 架构概述

阅读本文之前推荐读者先去了解一下pos共识机制的相关文章的相关概念,有助于快速理解本文。Polygon是Layer 2的扩容方案,它通过侧链进行链下计算以及去中心化的权益证明(PoS)的验证器组成的网络来达到扩容的目的。利用现有的开发者社区和生态系统,在不牺牲去中心化的情况下,解决公链的可伸缩性和可用性问题。在更快的交易速度和更便宜的手续费的情况下支持以太坊上现有的所有应用。

2023-02-12 21:50:49 647

原创 The Graph 6 subgraph的发布并在dapp中查询

当subgraph被发布到去中心化的网络中,策展人就可以对其进行策展,索引人可以开始对其进行索引。目前有几个比较流行的几个客户端来访问subgraph,Graph client,Apollo client和URQL,三种客户端都可以适应各类应用环境,如nodejs,react,vue,但是,如果你选择使用其他客户端将无法使用跨链subgraph处理或自动分页,这是the graph查询的核心功能。官方建议使用10,000 GRT来策展自己的subgraph,以确保它被索引,并可尽快用于查询。

2023-02-08 20:37:29 373

原创 The Graph 5 Indexer,Delegator和Curators 简介

索引人投入机器设备和质押金,吸引委托人投资,从而索引更多的subgraph,以获取更多的查询收益。委托人通过投资靠谱的索引人,获取subgraph的查询收益。策展人通过投资靠谱的subgraph,获取subgraph的查询收益。个角色对比如下:技术要求时间投入资金投入风险等级索引人高高高高委托人低低低->中低策展人中低->高无高实际上每个角色所包含的操作细节还有很多,官方也提供了一系列工具,从而协助我们做出正确的决策。

2023-02-06 16:15:12 363

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除