剖析DeFi交易产品之UniswapV4:概述篇

news2024/11/18 21:25:32

本文首发于公众号:Keegan小钢


UniswapV4UniswapV3 相比,算法上并没有什么改变,依然还是采用集中流动性模型,但架构上变化很大,包括功能架构,也包括技术架构。相比之前的版本,UniswapV4 最大的创新主要包括四点:

  1. 引入 Hooks
  2. 改用单例模式
  3. 采用闪电记账
  4. 支持原生 ETH

Hooks

引入 Hooks 机制是最核心的变动点,也大大扩展了其灵活性,使得定制化池成为了可能。

Hooks 本质上就是一个定制化的合约,当初始化一个交易池的时候,需要指定该池子所用的 Hooks 合约地址。Hooks 合约需要实现一系列回调函数:

  • beforeInitialize / afterInitialize
  • beforeModifyPosition / afterModifyPosition
  • beforeSwap / afterSwap
  • beforeDonate / afterDonate

其实就是分别在 initialize、modifyPosition、swap、donate 这几个关键操作执行前和执行后都可以添加自定义逻辑。

以 swap 操作为例,加上 Hooks 的 swap 流程如下图所示:

image.png

其他操作流程也是同理。

V4 的白皮书中有列举出了可以使用 Hooks 实现的一些示例功能:

  • 通过 TWAMM 随时间执行大额订单
  • 按指定价格成交的链上限价单
  • 随波动率变化的动态费用
  • 为流动性提供者内化 MEV 的机制
  • 中位数、截断或其他自定义预言机实现

目前,UniswapV4 官方也已经提供了几个参考实现,包括 TWAMM、LimitOrder、FullRange、VolatilityOracle、GeomeanOracle。之后的文章我们会一一剖析讲解这几个示例实现。

Hooks 除了可以实现这些功能之外,还可以管理池的 swap 费用,以及还可以向流动性提供者收取提款费用。

对于费用的管理,不只是可以设置为静态费用,还可以设置为动态费用。支持动态费用的话,那就可以实现和中心化交易所一样,按用户的不同等级设置不同的费率。还可以把费用分配给不同的人,比如添加邀请分佣机制,手续费部分分配给邀请人。

总而言之,Hooks 大大提高了 Uniswap 的可扩展性。

单例和闪电记账

Uniswap 以前的版本,每个池子都是单独的合约,是通过工厂合约来创建每个池子合约的。而 UniswapV4 改为了使用单例模式,所有池子全都由单个合约进行管理,即 PoolManager 合约进行统一管理。

使用单例模式,那新建池子时,就不再需要部署新合约实例,可以大大降低创建池子的成本。

另外,单例模式还结合了另一个机制叫闪电记账,以及结合使用了 EIP-1153 中提议的瞬态存储操作码。EIP-1153 会在坎昆升级中支持,这就是 UniswapV4 到目前还没有发布上线的主要原因,在等坎昆升级完成。

在以前的版本中,每次交易都需要计算所有相关仓位的余额,尤其涉及跨池交易,还需要在多个池子间多次执行 transfer,交易成本其实挺高的。而闪电记账机制,每个操作前会先做一个锁定,锁定期间只会更新一个称为 delta 的内部净余额,仅在锁定结束时才进行外部转账,这就大大节省了交易成本。

image.png

不过,在当前执行环境中,闪电记账架构其实是挺昂贵的,因为需要在每次余额变化时进行存储更新。但是,由于余额必须在事务结束时为 0,因此可以使用瞬态存储实现对这些余额的记账,从而减少 gas 消耗。

瞬态存储操作码是专门用来解决区块内部通讯的解决方案。瞬态存储不改变现有操作的语义,瞬态存储的数据在每次交易后会被丢弃,不会访问服务器磁盘,使用后也无需清除存储槽,客户端也不需要加载原始数据。因此,相对来说,使用瞬态存储解决区块内部之间通讯问题的优势在于 Gas 较低,且未来的以太坊数据存储设计中不需要考虑因临时存储而产生的操作费用退费的情况。

简而言之,使用瞬态存储,可以用低 gas 解决临时存储的问题。

原生 ETH 和其他

支持原生 ETH 是说,在底层池子里就支持原生 ETH 和其他代币之间的直接交易。

其实在 UniswapV1 版本也是支持原生 ETH 的,但那时候的池子严格限制了只能是 ETH 和另一个 ERC20 代币配对组成的,ERC20 代币之间是通过跨池交易的。但从 UniswapV2 开始,支持任意 ERC20 代币配对,但由于实施的复杂性,以及在 WETH 和 ETH 配对之间的流动性碎片化的担忧,底层池子统一只支持 ERC20 代币,只在上层合约里实现 ETH 和 WETH 的自动互换。增加了 ETH 和 WETH 互换的逻辑,其实增加了交易成本。如果只用原生 ETH 转账的话,gas 成本只约为 ERC20 转账的一半(ETH 为 21k gas,ERC20 约为 40k gas)。

现在,UniswapV4 因为使用了单例和闪电记账模式,又能很好地支持原生 ETH 了,而且还允许同时支持 ETH 和 WETH 的配对。

UniswapV4 还引入了 ERC1155 代币用于额外的代币记账。用户可以将代币保留在单例合约中,避免 ERC20 频繁转入和转出合约。这一点对于频繁交易者或流动性提供者非常有价值,因为他们会在多个区块或交易中连续使用相同的代币。

引入了 Hooks 机制之后,像 UniswapV2 和 UniswapV3 内嵌的价格预言机也变得不再必要了,因此,在 PoolManager 中再见不到价格预言机相关的数据存储和逻辑处理了。因为预言机可以通过 Hooks 合约定制化实现了。

donate() 函数是 V4 新增的操作,允许用户、集成者和 Hooks 直接支付给特定范围内的流动性提供者,支付的方式可以是池中的任意一种或两种代币。

总结一下,UniswapV4 算法上并没有改变,依然还是采用集中流动性,但通过 Hooks 实现了可定制的池,单例合约和闪电记账大幅度降低了 gas 成本,对原生 ETH 的支持也同样减少了 gas,还有对动态费用的支持、ERC1155 的支持等,都大大提高了 Uniswap 的灵活性、可扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1882344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光扩散微球市场增长空间大 我国已实现其产业化

光扩散微球市场增长空间大 我国已实现其产业化 光扩散微球是一种高性能微球材料,具有优异的光学和力学性能,且不含杂质,将其涂抹在光扩散膜(板)上,可以将点光源变成面光源,使显示面板的布光更加…

大型语言模型能否生成可信的事实核查解释?——通过多智能体辩论实现可信可解释的事实核查

Can LLMs Produce Faithful Explanations For Fact-checking? Towards Faithful Explainable Fact-Checking via Multi-Agent Debate 论文地址:https://arxiv.org/abs/2402.07401https://arxiv.org/abs/2402.07401 1.概述 在数字化时代,对于迅速传播的错误信息,其核实与明…

达梦数据库系列—19. 动态增加实时备库

目录 动态增加实时备库 1、数据准备 2 、配置新备库 2.1配置 dm.ini 2.2配置 dmmal.ini 2.3 配置 dmarch.ini 2.4 配置 dmwatcher.ini 2.5 启动备库 2.6 设置 OGUID 2.7 修改数据库模式 3、 动态添加 MAL 配置 4、 动态添加归档配置 5、 修改监视器 dmmonitor.ini…

windows离线安装显卡驱动解决方案

前言 我们说这个离线泛指计算机无公网环境,而我们需要将显卡驱动打上,既然没有公网,我们就无法使用联网的方式(傻瓜式安装),受各种原因限制,也不可以把主机搬走连上互联网进行安装。总之…

导入tidb时将数据库表导出为多张csv格式

DBeaver: 步骤: 确定目标库——>工具——>创建新任务 NEXT Navicat:

AQS同步队列、条件队列源码解析

AQS详解 前言AQS几个重要的内部属性字段内部类 Node同步队列 | 阻塞队列等待队列 | 条件队列 重要方法执行链同步队列的获取、阻塞、唤醒加锁代码流程解锁 条件队列的获取、阻塞、唤醒大体流程 调用await()方法1. 将节点加入到条件队列2. 完全释放独占锁3. 等待进入阻塞队列4. …

智慧校园新气象:校园气象站

在数字化、智能化的浪潮下,传统校园正在迎来一场革命性的变革。在这场变革中,校园气象站以其独特的功能和魅力,成为推动校园气象科普教育、提升校园品质的重要力量。 一、校园气象站:智慧校园的“气象眼” 校园气象站&#xff0c…

UVa1321/LA2925 Dice contest

UVa1321/LA2925 Dice contest 题目链接题意分析测试数据AC 代码 题目链接 本题是2003年icpc欧洲区域赛中欧赛区的D题 题意 骰子的六面展开图如下,现在把骰子的六个面赋予一套权重 w i ( 1 ≤ w i ≤ 50 , 1 ≤ i ≤ 6 ) w_i(1\le w_i \le 50,1\le i\le 6) wi​(1≤…

如何选择适合您业务需求的多语言跨境电商系统源码

随着互联网技术的飞速发展和全球市场的日益融合,多语言跨境电商已经成为许多企业进军国际市场的重要战略。在这个竞争激烈的时代,拥有一个适合自己业务需求的多语言跨境电商系统源码至关重要。本篇文章将为您揭秘如何选择适合您业务需求的多语言跨境电商…

奥威BI零售数据分析的小心机:多维动态分析

多维动态分析,顾名思义,就是在多个维度上对数据进行灵活的、动态的分析。在零售业务中,这些维度可能包括商品、时间、地区、顾客群体等。奥威BI数据可视化工具凭借强大的数据处理和数据可视化能力,将这些维度巧妙地融合在一起&…

【Python画图-驯化01】一文叫你搭建python画图最优环境配置

【Python画图-循环01】一文叫你搭建python画图最优环境配置 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注&#…

一文get懂kwai短视频助力巴西博弈slots游戏广告优势

一文get懂kwai短视频助力巴西博弈slots游戏广告优势 在数字化时代,短视频广告凭借其独特的魅力和高效的传播方式,成为了各大品牌进行营销推广的重要手段。特别是在巴西这个充满活力的国家,kwai短视频广告以其独特的方式,为博弈游…

交友系统定制版源码| 相亲交友小程序源码全开源可二开_打造独特的社交交友系统

交友系统源码的实现涉及到多个方面,包括前端页面设计、后端逻辑处理、数据库设计以及用户交互等。以下是一个简单的交友系统源码实现的基本框架和关键步骤: 1.数据库设计:用户表:存储用户基本信息,如用户ID、用户名、密码、头像、性别、年龄、地理位置等…

探索NVIDIA A100 显卡 如何手搓A100显卡

NVIDIA A100 显卡(GPU)是基于NVIDIA的Ampere架构设计的高性能计算和人工智能任务的处理器。 A100显卡主要由以下几种关键芯片和组件组成: 1. GPU芯片 NVIDIA GA100 GPU: 核心组件,是整个显卡的核心处理单元。GA100芯…

数字IC设计-VCS和Verdi的使用

#学习记录# 前言:本文以一个简单的计数器来说明vcs和verdi的使用 1 代码文件 1.1 计数器代码 //Engineer:Mr-pn-junction module counter(input clk,input rst,output reg [5:0] count); always(posedge clk or negedge rst)beginif(!rst)coun…

【鸿蒙学习笔记】Image迭代完备

Image Image($r(app.media.zhibo)).width(96) // 图片宽度.height(96) // 图片高度.borderRadius(12) // 图片圆曲度.objectFit(ImageFit.Fill) // 不明objectFit Column({ space: 20 }) {Row() {Image($r(app.media.startIcon)).width(66).height(66).borderRadius(12)}.bac…

Qt入门小项目 | WPS tab页面(无边框窗口综合应用)

文章目录 一、手写代码实现WPS tab页面 一、手写代码实现WPS tab页面 实现类似WPS tab效果,具体包含: 自定义标题栏:最大、最小、关闭在QTabWidget的tab上增加控件在QTabWidget的tab上右键菜单可拖拽移动可拉伸窗口双击标题栏在最大与正常间…

14-10 AIGC 项目生命周期——第一阶段

生成式 AI 项目生命周期的整个过程类似于从范围、选择、调整和对齐/协调模型以及应用程序集成开始的顺序依赖过程。流程表明每个步骤都建立在前一步的基础上。有必要了解每个阶段对于项目的成功都至关重要。 下面的流程图重点介绍了生成式 AI 项目生命周期的第一阶段 1 — “范…

vue项目创建+eslint+Prettier+git提交规范(commitizen+hooks+husk)

# 步骤 1、使用 vue-cli 创建项目 这一小节我们需要创建一个 vue3 的项目,而创建项目的方式依然是通过 vue-cli 进行创建。 不过这里有一点大家需要注意,因为我们需要使用最新的模板,所以请保证你的 vue-cli 的版本在 4.5.13 以上&#xff…

Android 添加LBS辅助定位

1.软件需求: 某Android设备没有sim卡但其支持定位,客户需求为在已有的Android中添加LBS网络定位,用以辅助gps定位。 2.思路分析 首先看到这个需求笔者是比较懵逼的,秉持着客户是上帝的原则,笔者首先先了解了一下什么…