量化技术图解指南
深入浅出,揭秘大语言模型的压缩之道
所谓大语言模型(LLM),“大”是其最显著的特征之一。这不仅体现在它们能够处理海量信息,更直接地体现在其庞大的体积上。这些模型动辄拥有数十亿的参数,通常需要配备大显存的顶级 GPU 才能流畅运行,这无疑将许多普通用户和开发者拒之门外。
这份学习笔记将Uniswap V2的swap操作进行了深入剖析,涵盖了其核心机制、数学原理和代码实现,以及手续费的计算方式。
UniswapV2Router02合约进行交互,该合约负责寻找并协调UniswapV2Pair合约完成交易,支持单跳和多跳(多级路由)交换。swap函数:
swapExactTokensForTokens:用户指定精确的输入代币数量,系统计算并返回尽可能多的输出代币。swapTokensForExactTokens:用户指定精确的输出代币数量,系统计算所需的最小输入代币数量。swap操作都会对输入代币收取0.3%(千分之三)的手续费。这意味着实际用于AMM计算的输入量是用户提供量的99.7%。多跳交易会累积手续费。UniswapV2Library中的getAmountOut和getAmountIn函数是核心计算逻辑,它们基于恒定乘积做市商(AMM)公式,并融入了0.3%的手续费计算,确保了交易的准确性。amountOutMin(最小输出量)来控制滑点。然而,这种机制也可能被MEV(矿工可提取价值)套利者利用,通过三明治攻击(Front-running + Back-running)来捕获用户设定的最小输出与实际可能输出之间的差价。Uniswap V2 的代码主要存在于两个仓库:
K 值不断增大。K 增长时,LP Token 的总份额不变,因此每个 LP Token 所代表的实际资产价值会提升,LP 在撤出流动性时能获得更多资产。UniswapV2Factory 合约的 feeTo 地址是否为零,可以验证其开启状态。X * Y = K 的公式进行资产交换,其中 X 和 Y 分别代表池中两种资产的数量,K 是一个常数(在无手续费和无流动性增减的情况下)。L 通常指 sqrt(K)。
S1:在 T1 时刻,LP Token 的总数量。DX 数量的 X 资产购买 Y 资产,池子实际上只收到 (1 - 0.003) * DX = 0.997 * DX。X 和 Y 资产总量会随着交易量的增加而缓慢增长。
DX 购买 Y,池子收到 0.997 * DX。这 0.997 * DX 增加了池子里的 X 资产。DY 购买 X,池子收到 0.997 * DY。这 0.997 * DY 增加了池子里的 Y 资产。X 和 Y 资产总量就会增加,从而导致 K 值(即 X * Y)不断增大。
为了更好地理解流动性增长和套利机制,我们以 DAI/USDT 稳定币交易对为例:
create2 预测交易对地址、对代币地址进行排序以确保交易对的唯一性、以及设置 minimum liquidity 机制以增强安全性和稳定性。本节课主要围绕 Uniswap V2 中的添加流动性、移除流动性和无常损失(本节课不深入讲解)三个核心概念。目标是清晰梳理前两个概念的数学原理和合约实现流程。
无常损失 (Impermanent Loss, 简称 IL) 是指当您作为流动性提供者 (LP) 将资金存入一个流动性池后,由于池中代币的相对价格发生变化,导致您撤出资金时的总价值低于您从一开始就选择单纯持有 (HODL) 这些代币的价值。