自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

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

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

2025-05-20 21:00:02 22

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

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

2025-05-12 16:16:55 415

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

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

2025-05-05 16:01:36 811

原创 uniswap v4 hooks详解

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

2025-05-04 16:36:44 852

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

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

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

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

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

2025-01-04 22:03:52 819

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

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

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

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

Cannot resolve org.pentaho:mondrian

2024-03-13 16:11:38 548

原创 javacc 教程7 LOOKAHEAD

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

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

原创 javacc 教程6 jjtree

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

2024-01-02 16:41:31 1337

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

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

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

2023-11-27 22:14:31 1735 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 3666

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

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

2023-11-06 18:24:45 165

原创 javacc 教程4 Token Manager

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

2023-09-26 17:45:58 271

原创 javacc 教程3 TOKEN和SKIP

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

2023-09-22 18:08:43 336

原创 javacc教程2 入门示例

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

2023-09-13 17:43:04 291

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

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

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

原创 运行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 2249

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

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

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

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

原创 Polygon 1 架构概述

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

2023-02-12 21:50:49 425

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

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

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

2023-02-06 16:15:12 291

原创 The Graph 4 Data Source Templates

以太坊智能合约的常见模式是使用注册表或工厂合约,其中一个合约创建、管理或引用任意数量的其他合约,每个合约都有自己的状态和事件。这些下级合约的地址可能事先就知道,也可能不知道,其中许多合约可能会随着时间的推移而创建或添加。这就是为什么在这种情况下,不可能定义单个数据源或固定数量的数据源,而需要一种更动态的方法:数据源模板。

2023-01-31 17:04:22 300

原创 The Graph 3 subGraph的callHandler,blockhandler,实体关系和全文索引

上一节我们基于官方示例构建了一个具有基本功能的subgraph,这一节我们介绍其他的一些特性。

2023-01-29 23:22:23 306

原创 The Graph 2 构建一个基本的subgraph

这一节我们按照官方示例构建一个简单的subGraph。

2023-01-14 19:30:04 686

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

原创 The Graph 1 概述

The Graph 是一个去中心化的协议,用于索引和查询区块链的数据,首先是从以太坊开始的。 它使查询那些难以直接查询的数据成为可能。

2023-01-13 13:05:47 367

原创 关于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 5216

原创 通过修改mateMask的nonce值修复replacement transaction underpriced的问题

mateMask钱包设置

2023-01-11 12:43:54 2024 3

空空如也

空空如也

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

TA关注的人

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