Polkadot Solidity开发-课程笔记11
uniswap是什么,谁设计的
简单来说,Uniswap 是目前全球最大的去中心化交易所(DEX)。它不像币安(Binance)或 Coinbase 那样由一家公司控制资产和撮合交易,而是通过运行在以太坊(Ethereum)区块链上的智能合约自动完成交易。
以下是关于它的核心信息:
1. 谁设计的?
Uniswap 的创始人是 海登·亚当斯(Hayden Adams)。
- 背景故事:Hayden 原本是西门子(Siemens)的一名机械工程师。2017 年他被裁员后,在他的朋友 Karl Floersch(以太坊核心开发者)的建议下,开始学习 Solidity 编程。
- 灵感来源:Uniswap 的数学核心理念其实最早由以太坊创始人 Vitalik Buterin(V神) 在 Reddit 和博客上提出。Hayden 将这些理论变成了现实。
- 发布时间:他在 2018 年 11 月正式发布了 Uniswap V1。
2. Uniswap 到底是什么?
如果你习惯了传统的炒股或中心化交易所,可以从以下三个维度理解 Uniswap 的不同:
- 没有“订单簿”:传统交易所通过买单和卖单撮合(Order Book)。Uniswap 使用的是 AMM(自动做市商) 模型,交易者是直接和“资金池”做交易。
- 无需许可(Permissionless):任何人都可以在上面挂单、提供流动性,或者把任何 ERC-20 代币上架,不需要经过任何机构审核。
- 恒定乘积公式:这是它最天才的设计,公式极其简单:
其中 和 是池子里两种代币的数量, 是常数。这个公式确保了无论交易规模多大,池子里总会有流动性(虽然价格会变动)。
3. 它的核心成员和组织
虽然它是去中心化的,但背后有几个关键实体在推动:
- Uniswap Labs:由 Hayden 创立的开发公司,负责开发协议核心代码和网页端界面。
- Uniswap Foundation:支持生态发展的非营利组织。
- UNI 代币持有人:2020 年 Uniswap 发行了治理代币 UNI,持有者可以对协议的升级、财库使用等进行投票。
为什么它很重要?
在 Uniswap 出现之前,很多人认为去中心化交易所是不可能的,因为以太坊的性能无法支持高频的订单撮合。Uniswap 证明了通过巧妙的数学公式,可以在低性能的区块链上实现高效、自动化的资产交易。它开启了所谓的 DeFi Summer(去中心化金融盛夏)。
既然你对金库协议和代付服务有深入研究,你会发现 Uniswap 的设计哲学也是极简且抗审查的。你想深入了解它最新的 V4 版本(挂钩机制 Hooks)如何改变交易逻辑吗?
课程作业解决思路
题目要求
一个miniSwap,包含addLiquidity, removeLiquidity, swap三个接口。 以下是miniSwap的实现要求:
包含一个UI界面,可以进行addLiquidity, removeLiquidity, swap操作。
可以连接Metamask钱包
可以部署到Polkadot Test Hub或者本地
以下是miniSwap的简化实现:
所有的Token之间兑换比例为1:1
没有手续费
没有对Liquidity的奖励
交易的Token的ERC20合约,可以手工部署,然后配置到前端界面
源代码提交到 https://github.com/papermoonio/2026-h1-building-production-grade-dApps/tree/main/homework/lesson-3
别慌,这个作业看起来像 Uniswap,其实是“教学级减法版 Uniswap”。我们把它拆干净,你会发现它是完全可控、一步一步能做出来的。
我给你一条最低可交付(MVP)路线,先“能跑、能测、能交”,再谈加分。
一句话拆题(非常关键)
你要做的不是 Uniswap V2,而是一个“只有一个池子、1:1 兑换、不收费、不奖励”的 Token 兑换合约 + 一个简单前端
这意味着什么?
- ❌ 不需要复杂数学公式(x*y=k)
- ❌ 不需要 LP token 经济模型
- ❌ 不需要手续费 / TWAP / Factory
- ✅ 只需要:合约能存 token,能转 token
一、整体结构(你先把脑子“装进这个盒子”)
1 | |
你真正要写的核心代码只有:
MiniSwap.solMiniSwap.t.sol- 一个极简前端(按钮 + Metamask)
二、先不管 UI,先把合约想清楚(最重要)
1️⃣ MiniSwap 要解决什么问题?
维护一个「TokenA ↔ TokenB」的池子
我们用最直觉版的状态变量:
1 | |
三、三个接口怎么“傻瓜式”实现
① addLiquidity(加流动性)
逻辑(1:1,超级简单):
1 | |
Solidity 核心代码:
1 | |
⚠️ 注意:
- 用户要提前
approve - 不需要 LP token(作业没要求)
② removeLiquidity(移除流动性)
最简单做法(教学版):
你存多少,就允许你取多少(不考虑比例公平)
1 | |
✅ 是不是“真实 Uniswap”?不是
✅ 能不能交作业?完全可以
③ swap(兑换)
因为比例固定 1:1:
- A → B:给多少 A,就拿多少 B
- B → A:反过来
1 | |
🎉 到这一步,你的 miniSwap 合约已经“功能完成 80%”
四、测试用例怎么写(Foundry,最小可交)
你测试三件事就够了:
1️⃣ addLiquidity 是否成功
1 | |
2️⃣ swap 是否 1:1
1 | |
3️⃣ removeLiquidity 是否返钱
1 | |
📌 这就是“测试报告”的实质内容
五、前端 UI:你只需要「3 个按钮」
技术栈建议(别给自己加难度):
- HTML + JS
- ethers.js
- Metamask
UI 最小版本
1 | |
JS 里:
1 | |
💡 UI 不评分审美,只看“能用”
六、部署到哪里?
推荐顺序:
- ✅ 本地 Anvil / Hardhat(100%够)
- 🔄 Polkadot Test Hub(加分,不是必需)
老师这类作业 一般不会真的跑你的链上地址,只看代码结构 + README。
七、README 怎么写(救命)
1 | |
八、加分项(选一个就够)
你只选 一个:
✅ 最简单加分:手续费
1 | |
UI 上显示:
Swap fee: 1%
九、你现在该怎么做(行动清单)
今天目标(不超过 3 小时):
- ✅ 写
MockERC20.sol - ✅ 写
MiniSwap.sol - ✅ 跑通
forge test
明天目标:
- 简单前端 + Metamask
- README
- push GitHub
最后一句实话
这不是考你会不会 Uniswap
这是考你:能不能把复杂系统“降级成可运行的最小版本”
你现在卡住,不是能力问题,是没被教过“怎么拆题”。
如果你愿意,下一步我可以:
- ✅ 直接给你一份 MiniSwap 完整合约骨架
- ✅ 或者陪你一步步写第一个合约(像结对编程)
你选哪一个?