核心关键词:Uniswap v2 实现、DeFi 流动性、WETH 原理、Impermanent Loss、智能合约、交易对、去中心化交易所
代码结构速览:一份了解就去开撸
在开始动手之前,先把官方仓库的结构拆给你看,找人找函数都省时间:
- Factory / UniswapV2Factory.sol
核心工厂:部署新的交易对,查地址与数量;设置协议手续费接收方。 - Pair(ERC-20) / UniswapV2ERC20.sol
流动性代币的 ERC-20 标准排版——转账、授权都在这。 - Pair / UniswapV2Pair.sol
真正的交易对逻辑:添加/提取流动性、代币互换、价格预言机接口。 - Router / UniswapV2Router01.sol
最忙的文件:把 ETH/ERC-20 路由到正确的 Pair;对外暴露容易理解的高级函数。 Oracle 范例与工具库
- ExampleOracleSimple.sol:滑动窗口价格的简化演示
- UniswapV2Library.sol:内部用的
getAmountOut、getAmountIn计算函数
把架构放进脑子里,就能在调试时精准定位 流动性 或 价格计算 的 bug。
1 秒懂 WETH:为什么必须「包一层」
以太坊原生币 ETH 并非 ERC-20,而 DeFi 协议(包括 Uniswap)又只认 ERC-20,于是出现了 Wrapped Ether(WETH):把 ETH 打进合约,合约给你 1:1 的 WETH;想换回原币,执行 withdraw() 即可。
一句话总结:ETH → 合约 → WETH → DeFi;再反向赎回,流程干净、无需额外授权,体验跟选钱包转账差不多。
Impermanent Loss:你必须面对的幽灵
当你同时为交易对提供 流动性,却遭遇两种资产价格波动,就会产生 暂时性损失(Impermanent Loss)。一旦你选择撤池,它就正式变成 永久性亏损。
举个人话例子:
- 你投入 1 ETH + 100 Dai,ETH = 100 Dai,总价值 200 Dai;
- 市场涨到 ETH = 200 Dai,套利者把资金池价格打到 0.75 ETH : 133 Dai;
- 若此时你退池,拿到 0.75 ETH + 133 Dai ≈ 283 Dai;
- 但如果你是 单纯持有 1 ETH + 100 Dai,此时等于 300 Dai;
- 差额的 17 Dai 就是 Impermanent Loss,俗称 无常的痛。
因此,考虑是否提供日元稳定币/ETH 这类 波动大 的组合时,一定要把 潜在损失 与 手续费收益 一起算。
实战:三步把 ETH 换成 Dai,再投入 Compound 赚息
下方示例基于 Remix & Etherscan,无需本地节点。
1. 创建交易对
- 打开 Remix,导入
UniswapV2Factory.sol部署者地址。 - 传入 Dai 与 WETH 地址,调用
createPair(tokenA, tokenB)。 - 工厂会自动返回新的
Pair合约地址并记录PairCreated事件。
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint allPairsLength
);2. 路由兑换:ETH → Dai
用户向
Router02调用swapExactETHForTokens{value: msg.value}( amountOutMin, path, // => [WETH, Dai] to, deadline )- Router 内部先把 ETH 包装成 WETH,再经 Pair 成交,最后把 Dai 打给
to。
具体操作举例:
👉 零基础也能看懂的单页交互教程
3. 把 Dai 投入 Compound 生息
- 在 Etherscan 找到
cDai合约地址,调用mint(uint mintAmount)。 - 签名后 Dai → cDai,供应利率按区块实时调整。
- 收益可在 Compound Dashboard 查看,也可随时
redeem提取本息。
这在概念上即形成 “三部曲”映射:Uniswap 提供流动性 → 赚取手续费;套利者拉高波动 → 无损退出后,折现自由 Dai 再投 Compound 收息,实现 一级流动性 与 二级收益 的叠加策略。
维护流动性时常见问题速解
Q1: 没有足够 ETH 启动双币做市怎么办?
A: 可以先在 少量测试网 锻造小面额 WETH 与测试 Dai,完成全链路验证;主网部署时,用闪电贷一次性配平。
Q2: 如何减少 Impermanent Loss?
A: 优选 相关资产比例超低波动 的池子,如 USDT/USDC;再者,仅在择高手续费时期做市,收益可对冲部分损失。
Q3: Router02 和 Router01 区别大吗?
A: Router02 修复少量回调安全检查,功能保持一致,建议新项目直接用 Router02。
Q4: 如何查看实时手续费收入?
A: 监听 Mint/Burn/Swap 事件的 Pair 地址,链下累加流动性份额即可计算 手续费分成。
Q5: Compound 利息可否立即复利?
A: 可以手动通过 reinvest() 循环铸造,或者用 第三方协议 全自动复投。需注意 gas > 利息时反而不划算。
小结:把碎片拼成收益闭环
- Uniswap v2 实现 的核心就是 Pair + Router + Factory 三件套;
- WETH 充当桥梁把原生 ETH 无缝接入 ERC-20 世界;
- 意识到 Impermanent Loss 后,再评估 手续费年化 VS 价差损失 才算完整;
- 通过 交易对→DEX 兑换→Compound 生息,你将拥有 链上资产闭环管理 的第一桶金。
下一步想要深挖?
👉 探索 Layer2 下的超低滑点战术指南