ACE 中文站

去中心化交易系统Uniswap基本原理
ACE 中文站
栏目分类
ACE 中文站
UIBT中文网
你的位置:ACE 中文站 > UIBT中文网 >
去中心化交易系统Uniswap基本原理
发布日期:2025-01-04 17:04    点击次数:199
本文目录: 一、Uniswap介绍 Uniswap是一个基于以太坊的交易所协议,允许任何人交换ERC20代币,从而促进ETH和ERC20 代币数字资产之间的自动兑换交易。Uniswap完全部署在链上,任何个人用户,只要安装了去中心化钱包软件,都可以使用这个协议。 (1)Uniswap设计的特点 易用性 在 Uniswap 交易所上买卖币时,你只要决定好卖出的币种、买入什么币、买或卖的数量是多少,按下 Swap 送出交易,在交易上链后就能立即取得你应得的币。而且就算是 Token A 换 Token B,在 Uniswap 也只要发出一笔交易就能完成兑换,在其它交易所中可能需要发两笔交易(第一笔将 Token A 换成某种中介货币(如 ETH, DAI)再发第二笔交易换成 Token B)才能完成。 费用低 根据白皮书中的资料,Uniswap 交易消耗的 gas 量是以太坊上的几家主流交易所之中最低的,也就代表在 Uniswap 交易要付的矿工费最少。 这主要得益于它相对简单的做市机制: Uniswap 不是采用挂单搓合机制来完成交易,而是根据合约中储备的资金量算出当下的交易价格,并立刻从资金池中取出对应的金额传给使用者,整体的运算量相对较少。 抗审查性 抗审查性体现在 Uniswap 上架新币的门槛: 就是没有门槛,任何使用者都能在 Uniswap 上架任何 Token。这点即使在众多去中心化交易所之中也是少见的,大多数的去中心化交易所虽然不会像中心化交易所那样向你收取上币费 ,但还是要申请上币、通过审查后,运营团队才会让你的 Token 可以在他们的交易所上交易。 但在 Uniswap,任何使用者只要发起一个 createExchange 的交易,就能让一个 Token 上架到 Uniswap 的交易对中,上架后也没有人能迫使它下架。 (2)Uniswap基础概念 流动性提供者(liquidity provider) 「流动性提供者,也称为做市商」是一个金融术语,指的是帮助一个金融市场提高流动性的个体。一个拥有越高流动性(市场深度越大)的交易所,其使用者就越能在短时间内以稳定的价格完成大额资产的交换,使用者的交易体验当然就越好。反之,在一个流动性不足的交易所,就有可能因为一笔大额的交易导致币价剧烈波动。 在 Uniswap,流动性提供者要做的事情是:替一个 ETH - Token 交易对增加 ETH 与 Token 的储备资金,储备金越多,ETH ⇄ Token 的交易价格就越稳定,该 Token 的流动性就越高。 但如果「替一个交易对增加流动性」这件事不能带来利益,应该很少人会自愿这么做,所以 Uniswap 的做法是从每一笔 ETH ⇄ Token 交易中抽取「流动性提供者费用」0.3% 分给流动性提供者们,逐利的人们就会自愿为 Uniswap 增加流动性以赚取被动收入,交易者们也能享受到更好的交易体验,达成双赢。 资产流动性(流动性资产池) Uniswap协议的设计结构体系与传统数字资产交易所中的交易模型完全不同。大多数传统交易所都是通过维护一个“订单簿”,来匹配一种数字资产的买卖双方。Uniswap则完全不同,它是利用储备金流动性来实现协议上的数字资产交易兑换。 交易合约中的储备金是由众多“流动性提供者”来提供的。这些流动性提供者将等值的ETH以及ERC20代币充值到这个交易合约中。 流动性代币 流动性代币也符合ERC20标准,代表流动性提供者对这个交易合约的贡献,用来追踪每个流动性提供者贡献的储备金占总储备的比例。而流动性提供者可以选择在任何时间销毁自己持有的流动性代币,然后就可以把对应比例份额的ETH和该种ERC20代币从交易合约中赎回出来。 (3)Uniswap主要功能 兑换/发送(Swap/Send) 「兑换(Swap)」可以进行任意两种币的兑换。选定好兑换的输入、输出币种后,可以选择在「输入」或「输出」其中一栏输入数字,另一栏会立刻计算出对应的数字。 「发送(Send)」可以在兑换完成的同时立刻发送这些币给另一人,显示出来的数字都是已经扣除手续费 的。 增加/领出流动性资金(Add/Remove Liquidity) ​ 做市商机制。 创建交易所(Create Exchange) (4)Uniswap的优缺点 不能自行决定买卖价格 你只能被动接受 Uniswap 给你的价格,不能挂单在你想要的价格。 Front Running(超前交易) 从你发出交易到交易上链之前,其他人有机会赶在你的交易完成之前执行另一笔交易,使得你的成交价格偏离预期,你因此吃亏,对方因此得益。 交易价格保护机制 成交价格大幅偏离预期: 从发出交易到交易上链之前,交易价格有可能因为别人的交易而改变,有可能导致我们的成交价格大幅偏离预期,那么这笔交易就会失败。为了避免这样的憾事发生,Uniswap 在合约中就设计了这样的机制:我们可以在发出的交易中规定我们至少应换得多少 ETH 或 Token。 交易时间限制 可以指定一个时刻作为最后期限,如果交易上链的时刻超过这个 最后期限则交易会失败。Uniswap 网页会自动设定最后期限为当下的时间加 15 分钟,换句话说,如果你发出的「兑换」或「发送」交易没有在 15 分钟内上链,交易就会失败,所以请避免设定太低的 gas price 以防交易迟迟不上链最终失败。 二、Uniswap设计结构 (1)Uniswap两大核心智能合约 交易合约 一个交易合约支持一种ERC20代币,每一个交易合约都储备持有一定量的ETH以及支持的这种ERC20代币。 工厂合约 工厂合约可用于部署新的交易合约,因此,任何还没有在Uniswap上面有交易合约的ERC20代币,都可以使用工厂合约来部署一个交易合约。任何以太坊的用户都可以通过‘createExchange()’函数实现这一点。工厂合约扮演了Uniswap中交易合约“注册中心”的角色,工厂合约可以用来查找所有已经被添加进Uniswap系统里面ERC20代币和交易地址。 (2)Uniswap交易类型 ETH ⇄ ERC20 交易 ERC20 ⇄ ERC20 交易 交易汇率是由Uniswap的恒定乘积公式来决定的:ETH 池 * token 池 = 恒定乘积值 在Uniswap上执行任何交易,此恒定乘积值都保持不变。只有当此交易合约中的流动性池发生变化的时候,此恒定乘积值才会发生变化。 (3)Uniswap交易流程 1. 恒定乘积公式 Uniswap遵循的是AMM(Automated Market Maker,自动化做市机制),AMM机制由算法构成,Uniswap的机制是恒定乘积: 图示公式: x * y = k k 表示一个不变的常数 x 和 y 表示特定交易对中ETH和ERC20代币的可用数量。 使用此公式,如果以Uniswap中的交易合约举例,则代表该交易合约储备有 x 数量的A代币和 y 数量的B代币。这个合约将始终保持乘积恒定,也就是说 x * y 得到的 k 值不变。任何人都可以通过有效改变做市商在 x* y 曲线上的位置来进行买入或者卖出代币。横轴代表卖出的A代币的数量,纵轴代表买入的B代币的数量。 2. 流程图 ​ 官网图 ​ 示例流程图 3. 流程举例 流动性提供者一共存了10ETH和500BAT到交易合约中,因此,基础的恒定乘积值为: 500 * 10 = 5000 ​ ⬇ 路人甲想要发起交易来用自己的1个ETH兑换成代币BAT,此时,交易金额的0.3%也就是0.003ETH将被扣除作为给流动性提供者的报酬。剩余的0.997ETH则被添加到了ETH池里面。 ​ ⬇ 根据公式,恒定乘积值不变,还是5000,除以ETH池中新的ETH数量,来得到BAT池中应该有的数量,那么多出来的BAT就是路人甲兑换的数量 计算过程: ETH 池 = 10 + (1–0.003) = 10.997 BAT 池 = 5000/10.997 = 454.67 Bob 将兑换得到 : 500–454.67 = 45.33 BAT ​ ⬇ 兑换交易结束后,路人甲发起交易的手续费0.003 ETH将会加回到ETH流动池里面,因此在交易合约上每执行一次交易,恒定乘积值就会增加一点。 计算过程: ETH 池 = 10.997 + 0.003 = 11 BAT 池 = 454.67 新的恒定乘积值 = 5,001.37 ​ ⬇ 在这次交易中,路人甲兑换的汇率为 45.33 BAT/ETH 计算过程: 1 ETH 入 45.33 BAT 出 汇率 = 45.33 BAT/ETH ​ ⬇ 本次交易,流动性提供者获得报酬0.003 ETH,使得流动性提供者为交易合约提供流动性这件事儿,成为一种有利可图的行为,会吸引更多其他人加入。 三、Uniswap V2新特性 (1)多智能合约组成 包括 Factory 、Router V2、Pair 和 Pari ERC20,还有一个负责功能的 Library 。 (2)闪电互换 从 Uniswap 流动性池中 “借出” 代币、用于与任意的外部服务交互、然后 还清 的初始贷款,所有操作都要放在一笔交易内,并且这样的交易是原子化的,意思是说,交易中的任何一个操作失败,都是导致整笔交易失败、被改动的状态完全回复。 (3)去除ETH 作为中介代币 Pari ERC20,还有一个负责功能的 Library 。 (2)闪电互换 从 Uniswap 流动性池中 “借出” 代币、用于与任意的外部服务交互、然后 还清 的初始贷款,所有操作都要放在一笔交易内,并且这样的交易是原子化的,意思是说,交易中的任何一个操作失败,都是导致整笔交易失败、被改动的状态完全回复。 (3)去除ETH 作为中介代币 移除这个硬性要求可以减少一半的交易数量,也能节约交易的 Gas 费。