了解 Uniswap V2(DEX)
Uniswap V2 是一个基于以太坊的去中心化交易所(DEX),它通过流动性池和自动化做市商(AMM)模型来实现去中心化的代币交换。以下是 Uniswap V2 的核心概念:
1. 自动化做市商(AMM)
Uniswap 使用自动化做市商模型(AMM),这意味着交易对通过数学公式而不是订单簿来确定价格。Uniswap V2 使用恒定乘积公式:
[ x \cdot y = k ]
其中, ( x ) 和 ( y ) 是池中两种代币的数量, ( k ) 是一个常数。这个公式确保了流动性池中的代币数量和价格之间的关系。
2. 流动性池(Liquidity Pool)
每个交易对(例如 ETH/DAI)都有一个流动性池。流动性池由流动性提供者(LP)提供的两种代币组成,LP 通过将等值的两种代币存入池中来提供流动性。作为回报,LP 获得流动性代币,这些代币代表他们在池中的份额,并且可以用来赎回原始代币和交易费用的分成。
3. 流动性代币(Liquidity Tokens)
当 LP 向流动性池中提供流动性时,他们会收到流动性代币(也称为 LP 代币),这些代币表示 LP 在池中的份额。LP 代币可以被转让、交易或赎回以取回池中的原始代币和累计的交易费用。
4. 交易和费用
当用户在 Uniswap 上进行代币交换时,他们实际上是在与流动性池进行交易。每次交易都会支付一定的交易费用(通常为 0.3%),这笔费用会按比例分配给所有流动性提供者,以奖励他们提供的流动性。
5. 任意 ERC-20 代币对
Uniswap V2 支持任意两个 ERC-20 代币之间的交易对。这与 Uniswap V1 不同,V1 只能使用 ETH 作为其中一种交易对。V2 允许更灵活的交易对组合,例如 DAI/USDC、LINK/WBTC 等。
6. 预言机(Oracles)
Uniswap V2 引入了时间加权平均价格(TWAP)预言机。这种预言机利用过去一段时间内的价格数据来计算平均价格,增强了价格的可靠性和安全性,避免了闪电贷攻击等操纵行为。
7. 闪电交换(Flash Swaps)
Uniswap V2 引入了闪电交换功能,允许用户借用池中的代币并在同一交易中偿还。这为去中心化金融(DeFi)应用提供了更多的灵活性和可能性,例如套利、再融资等。
8. 交易对的创建和初始化
新的交易对可以通过工厂合约创建。工厂合约负责管理所有交易对的创建,并维护一个交易对地址的映射。当一个新的交易对创建时,工厂合约会部署一个新的交易对合约,并初始化该交易对。
9. 无常损失(Impermanent Loss)
无常损失是指在流动性提供者撤回流动性时,由于价格波动导致的潜在损失。尽管流动性提供者通过交易费用可以获得回报,但价格波动可能导致的无常损失需要被考虑。
Uniswap V2 的合约结构

核心合约
- UniswapV2Factory:工厂合约,用于创建和管理交易对。
- UniswapV2Pair:每个交易对的合约,负责管理流动性池和处理代币交换。
- UniswapV2ERC20:实现了流动性代币的 ERC-20 标准。
- UniswapV2Router: 实现一些接口
相关库
- SafeMath:用于安全的数学运算,防止溢出和下溢。
- UQ112x112:用于固定点数运算的库,保证高精度的计算。
- Math:提供了一些基本的数学运算函数。
交易流程示例
- 提供流动性:LP 将等值的两种代币存入流动性池,获得 LP 代币。
- 执行交易:用户将一种代币发送到池中,按照恒定乘积公式计算出可以得到的另一种代币的数量,并支付交易费用。
- 赎回流动性:LP 可以随时赎回他们的流动性代币,并获得相应的两种代币和累计的交易费用。
通过理解这些核心概念,用户和开发者可以更好地利用 Uniswap V2 进行去中心化金融交易和应用开发。
了解 Uniswap V2(DEX)的更多相关文章
- Uniswap V2 — 从代码解释 DeFi 协议
Uniswap V2 - 从代码解释 DeFi 协议 为了理解我们在分析代码时将要经历的不同组件,首先了解哪些是主要概念以及它们的作用是很重要的.所以,和我一起裸露吧,因为这是值得的. 我在 5 个段 ...
- 剖析Defi之Uinswap_1
学习UniswapERC20,它是交易对的父合约.UniswapV2ERC20 是流动性代币合约,也称为 LP Token.功能主要实习ERC20代币功能以及对线下签名授权. 1 pragma sol ...
- 如何搭建自己的SPRING INITIALIZR server
这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...
- Android Dex文件格式(二)
第三块: 数据区 索引区中的最终数据偏移以及文件头中描述的map_off偏移都指向数据区, 还包括了即将要解析的class_def_item, 这个结构非常重要,下面就开始解析 c ...
- Uniswap详解之一(概览)
一.Uniswap简介 Uniswap是以太坊上的DEX实现,基于"恒定乘积自动做市"模型,与传统的中心化和DEX具有很大的差别. 主要特点: 无订单簿,无做市商 兑换币具有很低的 ...
- Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ... 这个错误是因为有两个相 ...
- Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结
Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码 用户操作 ,比如 ...
- [Android]Android端ORM框架——RapidORM(v2.1)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...
随机推荐
- [题解] [ABC221H] Count Multiset - DP
[ABC221H] Count Multiset 题面翻译 输入两个正整数 \(N,M\),并存在一个集合,问你一个长度为 \(k\) 的合法集合存在多少个?你需要回答 \(k\) 的值为 \(1\) ...
- RabbitMq高级特性之死信队列 通俗易懂 超详细 【内含案例】
RabbitMq高级特性之死信队列 又称 死信交换机 DLX 介绍 当消息成为 Dead message 后,会重新发送到另一个交换机,这个交换机就是 DLX(死信交换机) 消息成为死信的情况公有三种 ...
- PHP转Go系列 | ThinkPHP与Gin框架之打造基于WebSocket技术的消息推送中心
大家好,我是码农先森. 在早些年前客户端想要实时获取到最新消息,都是使用定时长轮询的方式,不断的从服务器上获取数据,这种粗暴的骚操作实属不雅.不过现如今我也还见有人还在一些场景下使用,比如在 PC 端 ...
- 2023 CCPC 女生题解
gym B. 终焉之茧 \(\star\) 显然两个维度分别做 单谷函数,起始点 \(A\) 是一个端点.一个 naive 的想法是三分目标点 \(B\),但交互次数会超.二分关于 \(B\) 对称点 ...
- 异常处理,内置方法(__new__,__init__,__del__析构方法,单例模式,item系列)
__new__ 创建一个对象 class A: def __init__(self): print('in init') def __new__(cls): print('in new') self= ...
- 使用 Docker 部署 FRP
服务端 编写配置文件 vim ~/.config/frp/frps.toml bindPort = 7000 # Web Dashboard [webServer] addr = "0.0. ...
- Java基础12
抽象类与抽象方法 abstract : 抽象的 abstract可以用来修饰:类.方法 abstract修饰类 > 此类称为抽象类 > 抽象类不能实例化 > 抽象类中是包含构造器的, ...
- 用Python实现阿拉伯数字转换成中国汉字
要将阿拉伯数字转换成中国汉字表示的数字,我们需要一个映射表来转换每个数字,并且处理不同位数的数字(如十.百.千.万等). 1. Python实现阿拉伯数字转换成中国汉字 下面是一个完整的Python代 ...
- sharepoint 打开rdl报表,报表服务器数据库内出错。此错误可能是因连接失败、超时或数据库中磁盘空间不足而导致的
最近在做reporting services报表的时候,部署到sharepoint后,打开rdl报表,经常遇到一个问题: 报表服务器数据库内出错.此错误可能是因连接失败.超时或数据库中磁盘空间不足而导 ...
- IDEA 换了电脑,如何导入和导出配置?
前言 我们在使用IDEA开发时,经常会设置各种各样的配置,时间一长,就会有很多个性化的东西.用起来也越来越顺手. 不过这里可能会有个问题,那就是哪一天我们要换个电脑了,或者想安装新版本的IDEA时 ...