tokenpocket钱包怎么下载|uniswap怎么下载

作者: tokenpocket钱包怎么下载
2024-03-08 22:08:55

uniswap交易所怎么使用?uniswap交易所下载教程 - 知乎

uniswap交易所怎么使用?uniswap交易所下载教程 - 知乎切换模式写文章登录/注册uniswap交易所怎么使用?uniswap交易所下载教程独角兽Uniswap交易所怎么交易?根据区块链数据显示,Uniswap交易所资产2.62亿美元,共有币种916个,同时拥有1024个交易对,24小时成交额7.61亿美元,由此数据可以看出,Uniswap交易所在市面上还是比较受欢迎的,而对于刚了解Uniswap交易所的投资者来说,想要在Uniswap交易所进行投资,第一步就是了解Uniswap交易所怎么交易?那么,Uniswap交易所到底怎么交易呢?下面小编给大家整理了Uniswap交易所交易教程,以供投资者参考。Uniswap交易所怎么交易?我们可以通过多链钱包 TokenPocket 来连接 Uniswap 进行交易。1、打开TP钱包,点击【发现】进入发现界面后,找到 Uniswap 并点击进入。Uniswap主要分为三个功能,分别是【兑换】【发送】【资金池】。2、【兑换功能】,在兑换界面中,输入表示的是拿来用于兑换的币种,而输出表示的是兑换后的币种,输入完成后点击兑换即可。3、【发送】功能,既可以作为一个普通的代币转账工具,又可以实现从兑换到转账的功能。选择好代币,输入数量,输入接受地址,点击【send】即可完成转账功能。这里需要提一下发送的另一个功能:添加兑换发送。点击发送界面的【添加兑换】添加一条兑换的选项,设置输入和输出的参数后点击【发送】授权后即可发送。4、【资金池】功能,在 Uniswap 中,除了可以用于代币兑换之外,还可以加入 Uniswap 的资金池,通过为 Uniswap 提供流动性而赚取收益。Uniswap交易所基本介绍:Uniswap是以太坊上的一种协议,用于交易ERC20代币,与大多数收取费用的交易所不同,Uniswap旨在充当公共平台,这是无需平台费用或中间商的区块链社区交易代币的工具,Uniswap使用数学方式以及ERC-20代币资金池和ETH资金池来完成相应的工作。目前Uniswap已发平台币UNI,上线了币安交易所。Uniswap是一个基于以太坊的交易所协议,允许任何人交换ERC20代币。普遍上讲,交易代币要求买卖双方创造委托订单,而Uniswap则是自动创建一个交易市场。 Uniswap旨在帮助解决去中心化交易所的流动性问题。去中心化交易所解决了中心化交易所的许多问题,包括被黑客入侵,管理不善和任意收费的风险,但是,去中心化交易所也有其自身的问题,主要是缺乏流动性,这意味着去中心化交易所缺乏大量资金,这使得交易比较慢。这就是Uniswap要解决的问题,它试图通过允许交易所交易代币而不依靠买卖双方创造这种流动性的方式来解决去中心化交易所的流动性问题。通过以上介绍,相信大家对于Uniswap交易所怎么交易这个问题已经有所了解,投资者在确定在交易所进行数字货币交易之前,一定要了解清楚该交易所的收费标准,也就是该交易所手续费的收取情况,只有了解清楚了,投资者才能确定自己最终能获利多少。发布于 2021-03-03 10:26Uniswap交易所区块链(Blockchain)​赞同 35​​6 条评论​分享​喜欢​收藏​申请

DeFi工具—UNISWAP使用教程 - 知乎

DeFi工具—UNISWAP使用教程 - 知乎首发于DeFi挖矿教程大全切换模式写文章登录/注册DeFi工具—UNISWAP使用教程派派什么是Uniswap?Uniswap是 2018 年 11 月发布在以太坊主网上的去中心化交易所协议,它的创建者是 Hayden Adams。当前Uniswap在DeFi Pluses上拍名第11位,较之前有下降。不同于其它挂单式去中心化交易所,Uniswap采用了全新的AMM自动做市商算法来执行交易的设计。相比于其他交易所,Uniswap 交易所的智能合约设计能够大幅减少 gas 的用量。如何理解Uniswap的自动做市机制?传统的交易所一般是提供一个挂单平台,通过程序(撮合引擎)撮合买卖双方达成交易。它是一个自由买卖的市场,具有买卖意愿的人们自行挂出“买单”和“卖单”,通过交易所“中介”实现双方订单的成交。传统交易所有以下特点:市场上必须要有用户进行挂单,要有一定量的订单(市场深度)。订单必须重叠才能成交,即买价高于或等于卖价。需要将资产存储在交易所。而Uniswap的模型却完全不同。简单来讲,Uniswap的撮合机制基于一个最基本的公式:K=X*Y。其中,X代表一种资产,Y代表与X等值的另一种资产, 而K则是它俩相乘后的一个函数。当K值不变的情况下,X与Y的值就成反比,即X增加,Y就会减小(反之亦然)。而因为资产Y的较少会导致相对市场的溢价,则会吸引用户来进行搬砖套利,从而抹平价差,使系统重归平衡。下面我们就以ETH与MakerDAO的算法稳定币DAI为例,来为大家解释下这个模型(不考虑手续费)。假设当前ETH价格为150USD,DAI的价格与美金挂钩,等于1USD。现在往系统里注入100ETH与15,000 DAI,则K=100*15,000=1,500,000。当用户将2个ETH兑换成DAI后,ETH总量减少为98,则此时DAI的总量=1,500,000/98=15,306。而因此增加的306个DAI就等于2个ETH的价格,即1ETH=153USD。此时,ETH就会相对市场有溢价,会吸引用户来进行搬砖套利。用户将自己的ETH卖给系统,补充资金池里的ETH,使系统再次回到最初的稳定状态。Uniswap有什么不足之处?在挂单机制下,如果价格达不到挂单者的设置价格,系统是不会成交的。但是在Uniswap的模式下,用户要注意当前资金池的流动性,以免滑点太多,造成资产损失。这里给大家进行了一个简单计算,从表中我们可以看出,随着系统内ETH数量的增加,用户购买单个DAI相对于ETH的成本就会增高。当数量为10ETH时,点差可以达到9.89%。而前段时间UMA上线Uniswap,价格从0.26一路走高到1.2美金的事情也印证了这一点。针对这一点,Balancer做了进一步的修改。但是总体来看,这类AMM机制的DEXes难免会因为流动性问题而出现滑点。不过,对于初创企业来说,此类的DEXes是它们为Token定价并进行销售的福音,Uniswap为他们省去了一大笔要支付给交易所跟做市商的钱。如何在比特派里使用Uniswap?第一步,打开比特派并找到Uniswap安卓版本可以在发现页下的推荐/热门DApp里找到Uniswap。iOS版请更新到bitpie PRO 版本,在发现页的搜索框里输入:https://uniswap.bitpie.com/* Uniswap因为使用的是新加坡域名,所以经常会遇到加载缓慢或者访问出错的情况,而比特派则对此做了优化,当前使用比特派访问Uniswap的体验十分顺畅。第二步,进入DApp主页面,选择要使用的功能图为改版后的Uniswap页面,个人感觉比之前更简洁了。第三步,选择兑换,输入兑换金额及币种,选择浮点后进行兑换这里以ETH兑换DAI为例,并选择接受增加最多0.5%的偏差。设定完毕后,点击“兑换”。待订单确认后,你的钱包地址里就会收到DAI了。从主页面我们可以看到,除了兑换还有“发送”与“资金池”功能。这两个功能都属于V2版本,因为使用时系统会自动切换到V2下。其中,发送与兑换功能大同小异,只是增加了一个收款地址,让你在兑换完成后可以将币发到自己/他人的指定地址,或者ENS域名。而资金池功能,是允许用户通过为系统注入ETH增加系统流动性而获取收益的。下图则展示了如何使用资金池功能为系统注入流动性。以上就是对Uniswap的简介及使用体验了。DeFi市场最近因为Compound的借贷挖矿又火了一把,引来的市场的广泛关注,这对DeFi市场来说是一件好事。同时,DeFi产品因其自身具有去中心化、抗审查、公开透明等特性也正逐渐受到市场的青睐。比特派也会持续关注DeFi生态,为大家带来更多的DeFi产品介绍及体验。本文仅为第三个工具在钱包端的操作教程,不构成任何投资建议。投资有风险,请您谨慎评估。安全、强大钱包就用比特派发布于 2020-09-02 17:08交易所智能合约​赞同 24​​3 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录DeFi挖矿教程大全持续更新各类 DeFi 工具使用,微博@比特

小白课堂 | 一文读懂Uniswap,附Uniswap使用教程 - 知乎

小白课堂 | 一文读懂Uniswap,附Uniswap使用教程 - 知乎首发于数字货币切换模式写文章登录/注册小白课堂 | 一文读懂Uniswap,附Uniswap使用教程书匠火火玄学一、加密货币交易形式 当我们要进行加密货币交易时,使用最早也是目前使用最多的形式还是中心化交易所,在中心化交易所,我们首先需要注册,然后加密货币也需要存入到交易所,由交易所进行托管,如果要提现加密货币出来,也需要经过交易所审核同意。虽然中心化交易所有诸多优势,例如交易速度较快、用户不需要管理私钥,降低了用户的使用门槛,但是它的弊端也是显而易见的,用户的加密货币由交易所托管,交易所是有跑路风险的。也确实发生过多起交易所跑路的事件,几乎每年都有发生。那么,有没有更好的加密货币交易形式呢? 随着区块链技术的不断发展,加密货币交易形式也变得越来越多样化,我们不但可以使用中心化交易所进行交易,也可以使用去中心化交易所进行交易。在去中心化交易所进行交易时,不需要注册,只需要使用数字钱包连接去中心化交易所就可以进行加密货币的交易了,交易完成后,相应的加密货币会自动转入到用户的数字钱包中,用户的资产始终在自己的钱包中,并非像中心化交易所那样托管在交易所,所以,在去中心化交易所进行交易,安全性大大提高了。 目前,去中心化交易所主要有两种形式,一种是交易所撮合买方用户和卖方用户的订单,只不过操作过程发生在链上,典型代表有 EOS 去中心化交易所 Newdex,Newdex 依旧承担了中心化交易所的订单撮合模式。在 Newdex 交易,用户无需注册、资产无需托管,撮合发生在 EOS 链上,数据公开透明。 去中心化交易所的另一种形式是基于兑换池,而非基于买方和卖方订单所构成的订单簿,它类似于人机交易,采取的是柜台模式,就像我们去银行兑换不同国家的法币。典型的代表是 Uniswap。二、Uniswap 是什么Uniswap 是基于以太坊的代币交换协议,是基于兑换池,而不是订单簿的去中心化交易协议。而所谓的兑换池,指的则是一个资金池,用户在 Uniswap 中交易的价格则由这个资金池中的代币比例和算法来决定。Uniswap 是去中心化的,不仅跟传统的加密货币交易所不同,也跟普通的去中心化代币交易所不同。Uniswap 是一组部署到以太坊网络的合约,所有的交易都在链上进行。Uniswap 的交易对手并不是其他交易用户,而是跟代币池进行交易,且有自动做市的模型来计算交易价格,代币兑换价格与代币兑换池中代币的比例有关。三、Uniswap 的功能和优势 在 Uniswap 中,使用最多的功能就是代币之间的币币兑换交易了,由于 Uniswap 是基于以太坊的,所以在 Uniswap 中只能交易以太坊上的加密货币资产。目前 Uniswap 支持的币种大概在150种左右,以太坊上的主流资产基本上都可以在上面进行交易了。当然了,用户也可以自行添加交易对,也就是做市商,这样可以赚取一定的手续费。 使用 Uniswap 这种交易形式,比订单撮合模式速度更快,因为它是基于兑换池的人机交易,节省了撮合时间。而且 Uniswap 支持的币种间可以实现两两兑换交易,交易对明显比中心化交易所更丰富。 例如: LRC 和 KNC 之间的交易,在 Uniswap 是可以一步完成交易(虽然系统可能需要转换,但在用户看来就是一步交易)的。而在中心化交易所,LRC 和 KNC 没有直接的交易对,用户最少需要两次交易,即把 LRC 兑换成 ETH ,再用 ETH 和 KNC 交易。很显然,对于用户来说,Uniswap 更便捷。四、如何使用 Uniswap 进行币币兑换交易 我们可以通过多链钱包 TokenPocket 来连接 Uniswap 进行交易。在 TP 钱包的发现界面的 DeFi 区,找到 Uniswap 并点击进入。1、兑换我们可以选择 V2 版本。在兑换界面中,输入表示的是拿来用于兑换的币种,而输出表示的是兑换后的币种。例如:拿 LRC 兑换 KNC,输入部分要选择 LRC,而输出部分要选择 KNC。在选择好输入输出币种后,输入输填写数量,即用于兑换 KNC 的 LRC 数量,可以收到的 KNC 数量就会根据 LRC/KNC 当前的汇率自动计算出来并填充。输入完成后,点击"授权 LRC"按钮,然后点击右侧的"兑换"就可以完成 LRC 和 KNC 之间的兑换了。2、发送 在 Uniswap 的发送界面中,主要有两个功能。一个是转账功能。选择要转出的币种,输入转账数量以及接收地址,然后点击"send"就可以转账了,这和一般的钱包转账也没什么区别。另外一个功能是"兑换+转账",挺有意思的一个功能。 例如我们要把 LRC 兑换为 KNC,并转账到另外一个 ETH 地址中,就可以使用该功能,还是挺方便的。首先,在发送界面中点击"添加兑换"按钮。 然后选择兑换的两个币种和用于兑换 KNC 的 LRC 数量,并输入接收地址。最后,点击"授权LRC"按钮后,点击 "Send"按钮就可以完成代币的兑换以及转账了。3、资金池 在 Uniswap 中,除了可以用于代币兑换之外,还可以加入 Uniswap 的资金池,通过为 Uniswap 提供流动性而赚取收益。首先在"资金池"界面中点击"加入一个资金池"按钮,然后选择一个流动性池,例如选择 ETH/USDT,在选择了流动性池后,输入要存入资金池的币种数量。注意,交易对是成比例存入资金池的,例如上例中,如果存入 0.091216 ETH 到资金池,那么USDT就要存入21.751个。 输入完成后,点击下面的"授权 USDT",然后点击"供应"就可以加入资金池了。总之,通过 Uniswap 进行以太坊上数字资产之间的交易,还是非常方便的,不需要注册,也不需要托管在交易所,通过钱包连接到 Uniswap 就可以进行交易了,交易完成后,相应的数字资产也会自动转入到用户的 ETH 钱包中,而且在兑换时还可以选择转到其他地址中。如果要使用 Uniswap 进行交易,可以到多链钱包 TokenPocket 中体验和使用。源自公众号:库尔班区块链发布于 2020-12-15 18:58Uniswap去中心化交易所(DEX)​赞同 83​​31 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录数字货币在这里,读懂

Uniswap Wallet on iOS and Android

Uniswap Wallet on iOS and Android

Uniswap in your pocket.A wallet built for swappingLearn moreJoin the waitlist for the Uniswap ExtensionJoin the waitlist for the Uniswap ExtensionJoin the waitlist for the Uniswap ExtensionClaim your uni.eth username in the Uniswap mobile app to join the waitlist for the Uniswap Extension.Claim your uni.eth username in the Uniswap mobile app to join the waitlist for the Uniswap Extension.Claim your uni.eth username in the Uniswap mobile app to join the waitlist for the Uniswap Extension.Learn MoreSwap on multiple chains.Supports Ethereum, Optimism, Polygon, Arbitrum, Base, and BNBOne simple wallet.All your NFTs, tokens, and wallets in one placeSafe and secure by design.Built by the most trusted team in DeFi.Swap on multiple chains.Supports Ethereum, Optimism, Polygon, Arbitrum, Base, and BNBOne simple wallet.All your NFTs, tokens, and wallets in one placeSafe and secure by design.Built by the most trusted team in DeFi.Swap on multiple chains.Supports Ethereum, Optimism, Polygon, Arbitrum, Base, and BNBOne simple wallet.All your NFTs, tokens, and wallets in one placeSafe and secure.Built by the most trusted team in DeFi.ResourcesDownload SupportOther ProductsSwap TokensExplore NFTsLearn moreBlogDiscordTwitter© 2024 – Uniswap Privacy PolicyTrademark PolicyResourcesDownload SupportOther ProductsSwap TokensExplore NFTsLearn moreBlogDiscordTwitter© 2024 – Uniswap Privacy PolicyTrademark PolicyResourcesDownload SupportOther ProductsSwap TokensExplore NFTsLearn moreBlogDiscordTwitter© 2024 – Uniswap Privacy PolicyTrademark Policy

Uniswap Wallet

Uniswap Wallet

Uniswap in your pocket.

Safe, simple swapping & self-custody.

Uniswap in your pocket.

Safe, simple swapping & self-custody.

Uniswap in your pocket.

Safe, simple swapping & self-custody.

Learn more

Swap on multiple chains

Supports Ethereum, Polygon, Optimism, and Arbitrum.

One simple wallet

All your NFTs, tokens, and wallets in one place

Safe and secure by design

Built by the most trusted team in DeFi.

Swap on multiple chains

Supports Ethereum, Polygon, Optimism, and Arbitrum.

One simple wallet

All your NFTs, tokens, and wallets in one place

Safe and secure by design

Built by the most trusted team in DeFi.

Swap onmultiple chains

Supports Ethereum, Polygon, Optimism, and Arbitrum.

One simple wallet

All your NFTs, tokens, and wallets in one place

Safe and secure

Built by the most trusted team in DeFi.

Resources

Download

Support

Other Products

Swap Tokens

Explore NFTs

Learn more

Blog

Discord

Twitter

© Universal Navigation Inc.

Resources

Download

Support

Other Products

Swap Tokens

Explore NFTs

Learn more

Blog

Discord

Twitter

© Universal Navigation Inc.

Resources

Download

Support

Other Products

Swap Tokens

Explore NFTs

Learn more

Blog

Discord

Twitter

© Universal Navigation Inc.

新手指南 | Uniswap 是什么? | 登链社区 | 区块链技术社区

新手指南 | Uniswap 是什么? | 登链社区 | 区块链技术社区

文章

问答

讲堂

专栏

集市

更多

提问

发表文章

活动

文档

招聘

发现

Toggle navigation

首页 (current)

文章

问答

讲堂

专栏

活动

招聘

文档

集市

搜索

登录/注册

新手指南 | Uniswap 是什么?

Bisade Asolo

更新于 2019-12-23 10:55

阅读 14887

Uniswap 是一个基于以太坊的协议,旨在实现 ETH 和 ERC20 代币数字资产之间的自动兑换。Uniswap 是一个完全的链上协议,个人只要安装了 MetaMask 就可以使用该协议。Uniswap 也可以被认为是一个 DeFi(去中心化金融)项目,因为它寻求利用其去中心化协议,消除参与数字资产交易流程的中间人。

Uniswap 是一个基于以太坊的协议,旨在实现 ETH 和 ERC20 代币数字资产之间的自动兑换。Uniswap 是一个完全的链上协议,个人只要安装了 MetaMask 就可以使用该协议。Uniswap 也可以被认为是一个 [DeFi(去中心化金融)](https://www.mycryptopedia.com/what-are-decentralized-finance-defi-applications/ "DeFi(去中心化金融)")项目,因为它寻求利用其去中心化协议,消除参与数字资产交易流程的中间人。

Uniswap 由两种类型的[智能合约](https://www.mycryptopedia.com/3-ethereum-smart-contract-use-cases/ "智能合约")组成:

- 一个交易合约 (exchange contract)

- 一个工厂合约 (factory contract)

这些合约都由 Vyper 智能合约编程语言所编写,而且它们是 Uniswap 协议功能的核心。**一个交易合约只支持一种 ERC20 代币,而且每个交易合约都储备了 ETH 和所支持的 ERC20 代币**。这意味着在一个特定交易合约上执行的交易,是基于合约中存储的 ETH 和 ERC20 代币的相对供应量。在交易合约中执行的交易,也可以是通过将 ETH 作为中介来实现 ERC20 与 ERC20 之间的直接交易。

**工厂合约**可用于部署一个新的交易合约,因此,**尚未拥有交易合约的 ERC20 代币都可以通过工厂合约来创建一个交易合约。**createExchange() 函数允许任何以太坊用户利用工厂合约部署一个交易合约。还需要注意的是,工厂合约被用作 Uniswap 交易合约的注册表,这意味着工厂合约可用于查询被添加进系统中的**所有代币和交易地址**。当一个交易合约发布时,工厂合约不会对代币进行检查(除了需要检查每个交易合约只支持一种代币的约束意外),因此,**用户应该只与他们完全信任的交易合约进行交互。**

## Uniswap 的流动性

Uniswap 协议的设计架构不同于传统数字资产交易所中的模型。大多数传统交易所会维护一个订单簿并用于匹配特定资产的买家和卖家。而 Uniswap 利用**流动性储备 (liquidity reserves) **来在协议中实现数字资产的交易。

交易合约的流动性储备由网络中的流动性提供者 (liquidity providers) 提供。这些流动性提供者将等价的 ETH 和 ERC20 代币存入特定的 ERC20 代币交易合约之中。**第一个向某个交易合约提供流动性的流动性提供者将首先设定 ETH 和该交易合约中相应的 ERC20 代币之间的兑换率**。流动性提供者通过存入他们认为等价的 ETH 和该合约支持的 ERC20 代币来设定这个兑换率的。**如果流动性提供者设定的兑换率与更广泛的加密货币交易市场不一致,那么套利的交易者会把 ETH 和 ERC20 代币间的兑换率引向市场上所认为的正确兑换率上。因此,所有后续的流动性提供者将会使用自己存入资产时的兑换率来存入流动性。**

Uniswap 还使用所谓的**“流动性代币” (liquidity tokens)**,这些代币本身符合 ERC20 标准。这些代币可以视为流动性提供者对交易合约贡献的一种表示。Uniswap 限制每个交易合约只能支持一种 ERC20 代币的背后原理是为了**鼓励流动性提供者将他们的流动性资产集中到单一的储备中**。Uniswap 通过铸造流动性代币来追踪每个流动性提供者贡献给总储备的相对比例。**流动性提供者能够在他们选择的时间对他们的流动性代币进行销毁,从而他们可以从交易合约中取出他们的 ETH 和 ERC20 代币的比例份额。**

流动性提供者可以选择出售或者转让其流动性代币,而不必从交易合约中移除流动性。然而,Uniswap的流动性代币被严格地指定于一个交易合约。**与 Uniswap 协议相关联的单一原生数字资产是不存在的**。流动性提供者还可以通过调用 addLiquidity() 函数往交易合约存入流动性。**作为提供流动性的奖励,流动性提供者在交易执行时会获得一定比例的交易手续费。**

## 在 Uniswap 进行交易:ETH ⇄ ERC20 交易

**能在 Uniswap 协议中执行的其中一类交易是将 ETH 与任何特定的 ERC20 代币进行兑换。**如前文所述,**ETH 和某种 ERC20 代币之间的兑换率基于交易合约中各资产流动性池的相对大小。**兑换率是建立这个在 Uniswap 的不变式之上:**ETH pool * token pool = invariant (不变量)**。在执行 Uniswap 协议上的任何交易期间,invariant (不变量)会保持不变。此外,**只有当交易合约中的流动性增加或减少时,不变量才会发生变化。**

**例子 ETH ⇄ BAT:**Bob 希望发起一笔交易,用于把 1 ETH 兑换为 ERC20 代币 BAT。Bob 将使用一个 Uniswap 协议上现有的交易合约来执行此交易。流动性提供者已将一定数量的 ETH 和 BAT 存入该交易合约,就本例而言,假设为 10 ETH 和 500 BAT。底层的不变式被设置为:ETH pool * BAT pool = invariant (不变量),也即:

- ETH pool = 10

- BAT pool = 500

- Invariant = 10 * 500 = 5,000

Bob 通过发送 1 ETH 到交易合约的 ETH 池中来发起他交易,在此基础上扣除 0.3% 作为给流动性提供者的费用。**剩下的 0.997 ETH 被添加到 ETH 池子中。然后,用不变量除以新的 ETH 总量以确定 BAT 池子的最新大小**。然后,剩余的 BAT 代币会被发送给买家,在本例中买家为 Bob。也即:

- Bob 发送:1 ETH

- 手续费:0.003 ETH

- ETH pool = 10 + (1 – 0.003) = 10.997

- BAT pool = 5000/10.997 = 454.67

- Bob 收到:500 – 454.67 = 45.33 BAT

**支付给流动性提供者的手续费在先前 Bob 发起交易时被扣除,现在这笔手续费又被加入到流动性池子中 (这意味着不变量会增加)。**这起到了向流动性提供者支付费用的作用,**当这些提供者从市场中移除他们的流动性贡献时,他们就可以获取这些费用。**由于这笔费用在价格计算后重新被加入,**随着在交易合约上的每笔交易被执行,不变量逐渐增大,**使得把流动性存入一个交易合约的行为对于流动性提供者来说是一种有利可图的行为。此时:

- ETH pool = 10.997 + 0.003 = 11

- BAT pool = 454.67

- 新的不变量 (invariant) = 5,001.37

在这次交易中,Bob 获取 BAT 的兑换率为 45.33 BAT/ETH。

- 输入:1 ETH

- 输出:45.33 BAT

- 兑换率 = 45.33 BAT/ETH

## 在 Uniswap 进行交易:ERC20 ⇄ ERC20 交易

**能在 Uniswap 协议中执行的另一类交易是将某种 ERC20 代币与另一种 ERC20 代币进行兑换。**由于 ETH 用作所有 ERC20 代币的公共交易对,Uniswap 将 ETH 用作 ERC20 和 ERC20 之间直接交易的**中介资产**。比如,Uniswap 可以在某个交易合约中将 BAT 代币兑换成 ETH,然后在另一个交易合约中将这部分 ETH 兑换成 OMG,所有这些都是在一笔交易种完成的,从而使得任何两种 ERC20 代币之间得兑换成为可能。。

这个公式的作用非常类似于一个普通的市场,原因是你购买的代币越多时,为了购买多一个单元的代币,你所要支付的边际兑换率就会越高。

## 交易费用构成

在协议上执行交易的 Uniswap 费用的构成如下:

- ETH 兑换为 ERC20:支付 0.3% 的 ETH。

- ERC20 兑换为 ETH:支付 0.3% 的 ERC20 代币。

- ERC20 兑换为 ERC20:支付 0.3% 的 ERC20 代币 (针对将某种 ERC20 代币兑换为 ETH) 和 0.3% 的 ETH (针对将 ETH 再兑换为另一种 ERC20 代币)。

## 代币兑换率

Uniswap 采用的用于确定代币间兑换率的不变式取自于 Vitalik Buterin 在2018年3月发表的[一篇文章](https://ethresear.ch/t/improving-front-running-resistance-of-x-y-k-market-makers/1281)。在该文章中,ERC20 代币的兑换率按照一下公式计算:

x * y = k

k 是一个不变的常量,x和y表示在特定的交易中可用的 ETH 和 ERC20 代币的数量,在 Uniswap 的情况下,x 和 y 就是在特定交易合约中可用的 ETH 和 ERC20 代币的数量。**利用这个公式,代币的兑换率将始终是上述公式产生的曲线上的某个点**。见下图。

x*y=k 公式是 Uniswap 协议中不可分割的一部分,而且 Vitalik Buterin 使用下面所示的图,以如下方式进行描述:

![null](https://img.learnblockchain.cn/2020/02/08_/723842887.png)

根据该公式,一个合约 (在本例中为 Uniswap 的交易合约) 将会持有x个**代币A**和y个**代币B**。**这个合约将维持不变量使得 x * y = k 始终成立**。任何个人都可以通过有效地改变做市商在 x * y 曲线上的头寸 (position) 来买卖该合约中的代币。将做市商的头寸向右移动意味着,一笔交易向右移动的金额就是交易员必须输入的**代币A**的量 (即通过输入代币A来兑换代币B)。相应地,做市商的头寸向下移动的量是交易者应该买入多少**代币B**。

假设代币B是 ETH,代币A是任何特定的 ERC20 代币,我们可以看到它们是如何利用公式x * y = k进行运转的。如果 Alice 决定购买一大批特定的 ERC20 代币,这将使得交易合约中的 ERC20 代币的短缺以及 ETH 的增加。Alice 的购买结果是把兑换率移动到 x * y = k 曲线上的一个不同的点。也即红点将会向左移动,这意味着购买更多 ERC20 代币会变得更加昂贵。ETH 和 ERC20 代币的相对供应量可以被认为是 ERC20 代币供需的反映,这最终会决定兑换率价值。

如前文所述,流动性往交易合约的首次存入并非由兑换率所决定。相反,流动性提供者将会存入一定数量的 ETH 和 ERC20 代币,这反映了他们心中 ETH 和 ERC20 代币间的兑换率值。**如果 ETH 和 ERC20 代币被认为是太便宜或者太贵,那么套利交易者就会受到激励去把价格带到市场认为正确的价格上。**

## Uniswap 和套利交易

值得主要的是,虽然 Uniswap 是一个去中心化的链上数字资产交易所,但是它不是为了替代中心化交易所而存在的。当 Uniswap 上的交易机制出现偏差时(笔者注:这里的意思是 Uniswap 上兑换率偏高或偏低),那么必须存在一个纠正错误的机制。这个机制以套利交易的形式存在。

套利交易 (arbitrage trading) 可以被很好地理解为交易者利用两个市场之间存在的价格差进行交易获利的策略。在加密货币的情况下,这种价格差可以在[加密货币交易所](https://www.mycryptopedia.com/cryptocurrency-exchanges-complete-beginners-guide/ "加密货币交易所")之间的数字资产价格差异中找到。如果交易者发现了套利的机会,那么他们会在一个交易所中购买数字资产,然后在另一个加密货币交易所中出售。**套利交易对于 Uniswap 的运作至关重要,这是因为交易者可以利用其他加密货币交易所的兑换率来纠正 Uniswap 上可能出现的价格偏差。**

## Uniswap 和 Gas

使用 Uniswap 协议进行数字资产兑换的其中一个优点是它十分节约 gas。**在 Uniswap 上进行交易时所产生的 gas 成本相对来说比其他去中心化交易所更加便宜。**正如下面展示的 gas 基准:ETH 至 ERC20,ERC20 至 ETH 以及 ERC20 至 ERC20 的转换明显比 Bancor,EtherDelta 等交易所更加便宜。

![null](https://img.learnblockchain.cn/2020/02/08_/422127116.jpeg)

节约 gas 只是 Uniswap 协议的其中一个优点,更多的**优点**包括:

- Uniswap 是去中心化的,因此它的运作不依赖于第三方。此外,希望连接到该协议的任何人都可以自由访问 Uniswap。

- 与其他数字资产交易所相比,在 Uniswap 上进行交易的成本相对较低。

- Uniswap 允许任何用户为任何特定的 ERC20 代币创建交易合约。

然而,Uniswap 确实有它的**局限性**:

- Uniswap 确实依靠套利交易来控制协议中代币的交易价格。这意味着 Uniswap 依靠其他数字资产交易所的存在来保持兑换率的平衡。

- Uniswap 仍处于试验阶段,仍需要对协议进行更多的改进以了解它在促进数字资产交易方面的有效性。

## 结论

总之,Uniswap 代表了以太坊生态内支持数字资产交易的重要一步,正因它使得资产交易得的流程变得更加有效。Uniswap 仍然处于初期阶段,但是,看着这一创新的协议在未来如何发展将是一件有趣的事情。

Uniswap 是一个基于以太坊的协议,旨在实现 ETH 和 ERC20 代币数字资产之间的自动兑换。Uniswap 是一个完全的链上协议,个人只要安装了 MetaMask 就可以使用该协议。Uniswap 也可以被认为是一个 DeFi(去中心化金融)项目,因为它寻求利用其去中心化协议,消除参与数字资产交易流程的中间人。

Uniswap 由两种类型的智能合约组成:

一个交易合约 (exchange contract)

一个工厂合约 (factory contract)

这些合约都由 Vyper 智能合约编程语言所编写,而且它们是 Uniswap 协议功能的核心。一个交易合约只支持一种 ERC20 代币,而且每个交易合约都储备了 ETH 和所支持的 ERC20 代币。这意味着在一个特定交易合约上执行的交易,是基于合约中存储的 ETH 和 ERC20 代币的相对供应量。在交易合约中执行的交易,也可以是通过将 ETH 作为中介来实现 ERC20 与 ERC20 之间的直接交易。

工厂合约可用于部署一个新的交易合约,因此,尚未拥有交易合约的 ERC20 代币都可以通过工厂合约来创建一个交易合约。createExchange() 函数允许任何以太坊用户利用工厂合约部署一个交易合约。还需要注意的是,工厂合约被用作 Uniswap 交易合约的注册表,这意味着工厂合约可用于查询被添加进系统中的所有代币和交易地址。当一个交易合约发布时,工厂合约不会对代币进行检查(除了需要检查每个交易合约只支持一种代币的约束意外),因此,用户应该只与他们完全信任的交易合约进行交互。

Uniswap 的流动性

Uniswap 协议的设计架构不同于传统数字资产交易所中的模型。大多数传统交易所会维护一个订单簿并用于匹配特定资产的买家和卖家。而 Uniswap 利用流动性储备 (liquidity reserves) 来在协议中实现数字资产的交易。

交易合约的流动性储备由网络中的流动性提供者 (liquidity providers) 提供。这些流动性提供者将等价的 ETH 和 ERC20 代币存入特定的 ERC20 代币交易合约之中。第一个向某个交易合约提供流动性的流动性提供者将首先设定 ETH 和该交易合约中相应的 ERC20 代币之间的兑换率。流动性提供者通过存入他们认为等价的 ETH 和该合约支持的 ERC20 代币来设定这个兑换率的。如果流动性提供者设定的兑换率与更广泛的加密货币交易市场不一致,那么套利的交易者会把 ETH 和 ERC20 代币间的兑换率引向市场上所认为的正确兑换率上。因此,所有后续的流动性提供者将会使用自己存入资产时的兑换率来存入流动性。

Uniswap 还使用所谓的“流动性代币” (liquidity tokens),这些代币本身符合 ERC20 标准。这些代币可以视为流动性提供者对交易合约贡献的一种表示。Uniswap 限制每个交易合约只能支持一种 ERC20 代币的背后原理是为了鼓励流动性提供者将他们的流动性资产集中到单一的储备中。Uniswap 通过铸造流动性代币来追踪每个流动性提供者贡献给总储备的相对比例。流动性提供者能够在他们选择的时间对他们的流动性代币进行销毁,从而他们可以从交易合约中取出他们的 ETH 和 ERC20 代币的比例份额。

流动性提供者可以选择出售或者转让其流动性代币,而不必从交易合约中移除流动性。然而,Uniswap的流动性代币被严格地指定于一个交易合约。与 Uniswap 协议相关联的单一原生数字资产是不存在的。流动性提供者还可以通过调用 addLiquidity() 函数往交易合约存入流动性。作为提供流动性的奖励,流动性提供者在交易执行时会获得一定比例的交易手续费。

在 Uniswap 进行交易:ETH ⇄ ERC20 交易

能在 Uniswap 协议中执行的其中一类交易是将 ETH 与任何特定的 ERC20 代币进行兑换。如前文所述,ETH 和某种 ERC20 代币之间的兑换率基于交易合约中各资产流动性池的相对大小。兑换率是建立这个在 Uniswap 的不变式之上:*ETH pool token pool = invariant (不变量)。在执行 Uniswap 协议上的任何交易期间,invariant (不变量)会保持不变。此外,只有当交易合约中的流动性增加或减少时,不变量才会发生变化。**

例子 ETH ⇄ BAT:Bob 希望发起一笔交易,用于把 1 ETH 兑换为 ERC20 代币 BAT。Bob 将使用一个 Uniswap 协议上现有的交易合约来执行此交易。流动性提供者已将一定数量的 ETH 和 BAT 存入该交易合约,就本例而言,假设为 10 ETH 和 500 BAT。底层的不变式被设置为:ETH pool * BAT pool = invariant (不变量),也即:

ETH pool = 10

BAT pool = 500

Invariant = 10 * 500 = 5,000

Bob 通过发送 1 ETH 到交易合约的 ETH 池中来发起他交易,在此基础上扣除 0.3% 作为给流动性提供者的费用。剩下的 0.997 ETH 被添加到 ETH 池子中。然后,用不变量除以新的 ETH 总量以确定 BAT 池子的最新大小。然后,剩余的 BAT 代币会被发送给买家,在本例中买家为 Bob。也即:

Bob 发送:1 ETH

手续费:0.003 ETH

ETH pool = 10 + (1 – 0.003) = 10.997

BAT pool = 5000/10.997 = 454.67

Bob 收到:500 – 454.67 = 45.33 BAT

支付给流动性提供者的手续费在先前 Bob 发起交易时被扣除,现在这笔手续费又被加入到流动性池子中 (这意味着不变量会增加)。这起到了向流动性提供者支付费用的作用,当这些提供者从市场中移除他们的流动性贡献时,他们就可以获取这些费用。由于这笔费用在价格计算后重新被加入,随着在交易合约上的每笔交易被执行,不变量逐渐增大,使得把流动性存入一个交易合约的行为对于流动性提供者来说是一种有利可图的行为。此时:

ETH pool = 10.997 + 0.003 = 11

BAT pool = 454.67

新的不变量 (invariant) = 5,001.37

在这次交易中,Bob 获取 BAT 的兑换率为 45.33 BAT/ETH。

输入:1 ETH

输出:45.33 BAT

兑换率 = 45.33 BAT/ETH

在 Uniswap 进行交易:ERC20 ⇄ ERC20 交易

能在 Uniswap 协议中执行的另一类交易是将某种 ERC20 代币与另一种 ERC20 代币进行兑换。由于 ETH 用作所有 ERC20 代币的公共交易对,Uniswap 将 ETH 用作 ERC20 和 ERC20 之间直接交易的中介资产。比如,Uniswap 可以在某个交易合约中将 BAT 代币兑换成 ETH,然后在另一个交易合约中将这部分 ETH 兑换成 OMG,所有这些都是在一笔交易种完成的,从而使得任何两种 ERC20 代币之间得兑换成为可能。。

这个公式的作用非常类似于一个普通的市场,原因是你购买的代币越多时,为了购买多一个单元的代币,你所要支付的边际兑换率就会越高。

交易费用构成

在协议上执行交易的 Uniswap 费用的构成如下:

ETH 兑换为 ERC20:支付 0.3% 的 ETH。

ERC20 兑换为 ETH:支付 0.3% 的 ERC20 代币。

ERC20 兑换为 ERC20:支付 0.3% 的 ERC20 代币 (针对将某种 ERC20 代币兑换为 ETH) 和 0.3% 的 ETH (针对将 ETH 再兑换为另一种 ERC20 代币)。

代币兑换率

Uniswap 采用的用于确定代币间兑换率的不变式取自于 Vitalik Buterin 在2018年3月发表的一篇文章。在该文章中,ERC20 代币的兑换率按照一下公式计算:

x * y = k

k 是一个不变的常量,x和y表示在特定的交易中可用的 ETH 和 ERC20 代币的数量,在 Uniswap 的情况下,x 和 y 就是在特定交易合约中可用的 ETH 和 ERC20 代币的数量。利用这个公式,代币的兑换率将始终是上述公式产生的曲线上的某个点。见下图。

x*y=k 公式是 Uniswap 协议中不可分割的一部分,而且 Vitalik Buterin 使用下面所示的图,以如下方式进行描述:

根据该公式,一个合约 (在本例中为 Uniswap 的交易合约) 将会持有x个代币A和y个代币B。这个合约将维持不变量使得 x * y = k 始终成立*。任何个人都可以通过有效地改变做市商在 x y 曲线上的头寸 (position) 来买卖该合约中的代币。将做市商的头寸向右移动意味着,一笔交易向右移动的金额就是交易员必须输入的代币A的量 (即通过输入代币A来兑换代币B)。相应地,做市商的头寸向下移动的量是交易者应该买入多少代币B**。

假设代币B是 ETH,代币A是任何特定的 ERC20 代币,我们可以看到它们是如何利用公式x y = k进行运转的。如果 Alice 决定购买一大批特定的 ERC20 代币,这将使得交易合约中的 ERC20 代币的短缺以及 ETH 的增加。Alice 的购买结果是把兑换率移动到 x y = k 曲线上的一个不同的点。也即红点将会向左移动,这意味着购买更多 ERC20 代币会变得更加昂贵。ETH 和 ERC20 代币的相对供应量可以被认为是 ERC20 代币供需的反映,这最终会决定兑换率价值。

如前文所述,流动性往交易合约的首次存入并非由兑换率所决定。相反,流动性提供者将会存入一定数量的 ETH 和 ERC20 代币,这反映了他们心中 ETH 和 ERC20 代币间的兑换率值。如果 ETH 和 ERC20 代币被认为是太便宜或者太贵,那么套利交易者就会受到激励去把价格带到市场认为正确的价格上。

Uniswap 和套利交易

值得主要的是,虽然 Uniswap 是一个去中心化的链上数字资产交易所,但是它不是为了替代中心化交易所而存在的。当 Uniswap 上的交易机制出现偏差时(笔者注:这里的意思是 Uniswap 上兑换率偏高或偏低),那么必须存在一个纠正错误的机制。这个机制以套利交易的形式存在。

套利交易 (arbitrage trading) 可以被很好地理解为交易者利用两个市场之间存在的价格差进行交易获利的策略。在加密货币的情况下,这种价格差可以在加密货币交易所之间的数字资产价格差异中找到。如果交易者发现了套利的机会,那么他们会在一个交易所中购买数字资产,然后在另一个加密货币交易所中出售。套利交易对于 Uniswap 的运作至关重要,这是因为交易者可以利用其他加密货币交易所的兑换率来纠正 Uniswap 上可能出现的价格偏差。

Uniswap 和 Gas

使用 Uniswap 协议进行数字资产兑换的其中一个优点是它十分节约 gas。在 Uniswap 上进行交易时所产生的 gas 成本相对来说比其他去中心化交易所更加便宜。正如下面展示的 gas 基准:ETH 至 ERC20,ERC20 至 ETH 以及 ERC20 至 ERC20 的转换明显比 Bancor,EtherDelta 等交易所更加便宜。

节约 gas 只是 Uniswap 协议的其中一个优点,更多的优点包括:

Uniswap 是去中心化的,因此它的运作不依赖于第三方。此外,希望连接到该协议的任何人都可以自由访问 Uniswap。

与其他数字资产交易所相比,在 Uniswap 上进行交易的成本相对较低。

Uniswap 允许任何用户为任何特定的 ERC20 代币创建交易合约。

然而,Uniswap 确实有它的局限性:

Uniswap 确实依靠套利交易来控制协议中代币的交易价格。这意味着 Uniswap 依靠其他数字资产交易所的存在来保持兑换率的平衡。

Uniswap 仍处于试验阶段,仍需要对协议进行更多的改进以了解它在促进数字资产交易方面的有效性。

结论

总之,Uniswap 代表了以太坊生态内支持数字资产交易的重要一步,正因它使得资产交易得的流程变得更加有效。Uniswap 仍然处于初期阶段,但是,看着这一创新的协议在未来如何发展将是一件有趣的事情。

学分: 31

分类: Uniswap

标签:

Uniswap 

点赞 5

收藏 7

分享

Twitter分享

微信扫码分享

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

你可能感兴趣的文章

UniswapV3 部署 - - Foundry Edition

174 浏览

uniswap v2

280 浏览

#DEFI# 从 BitShares 到 Uniswap:Dex 发展亲历者的去中心化交易所之旅

528 浏览

对比 Uniswap,一种新的去中心化交易所的流动性算法

949 浏览

以太坊合并一年后的MEV格局

929 浏览

EIP-1153 除了赋能 Uniswap-v4 还能做什么

872 浏览

相关问题

有没有已经部署的合约去查询Uniswap V3 NFT仓位的价值

1 回答

一般在编写套利合约中通过什么能直接读取给定交易对uniswap v2中的价格?

4 回答

uniswap 多跳路由寻找相关

1 回答

Uniswap中的LP token的数值是如何计算出来的(需要详细计算过程)

2 回答

如何获取 Uniswap 代币价格,v2 v3 是否不同

1 回答

复制以太坊钱包地址在 Uniswap 上发生交易的机器人

2 回答

3 条评论

请先 登录 后评论

Bisade Asolo

关注

贡献值: 30

学分: 48

江湖只有他的大名,没有他的介绍。

文章目录

关于

关于我们

社区公约

学分规则

Github

伙伴们

ChainTool

为区块链开发者准备的开源工具箱

合作

广告投放

发布课程

联系我们

友情链接

关注社区

Discord

Twitter

Youtube

B 站

公众号

关注不错过动态

微信群

加入技术圈子

©2024 登链社区 版权所有 |

Powered By Tipask3.5|

粤公网安备 44049102496617号

粤ICP备17140514号

粤B2-20230927

增值电信业务经营许可证

×

发送私信

请将文档链接发给晓娜,我们会尽快安排上架,感谢您的推荐!

发给:

内容:

取消

发送

×

举报此文章

垃圾广告信息:

广告、推广、测试等内容

违规内容:

色情、暴力、血腥、敏感信息等内容

不友善内容:

人身攻击、挑衅辱骂、恶意行为

其他原因:

请补充说明

举报原因:

取消

举报

×

如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!

Uniswap入门 - 廖雪峰的官方网站

Uniswap入门 - 廖雪峰的官方网站

廖雪峰的官方网站

Blog

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

More

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

 

Profile

Passkey

Sign Out

Sign In

English

简体中文

Uniswap入门

廖雪峰 / 文章 / ... / Reads: 30490 Edit

在现货交易中,买卖双方各自报价,然后撮合成交,这是最简单,最直接,也是微观层面可以直接实现的一种交易方式。因此,自世界上第一家证券交易所诞生以来,撮合交易一直是最主流的方式。

随着DeFi的兴起,在以太坊这样的去中心化链上怎么实现买卖双方的交易?最直接的想法是把买卖盘搬到链上。然而,严重的技术问题导致了这种方式既慢又不经济。

对以太坊这种可以运行智能合约的链来说,交易实际上就是执行合约的函数。一个合约部署在链上,实际上相当于一组函数代码存放在链上。任何用户都可以通过钱包软件来调用这些函数,实现与合约的交互。但是,有几个限制:

每次只能调用一个函数,不过这个问题不大,因为合约内部,一个函数又可以调用其他函数;

用户必须主动发起调用,合约自身无法主动调用任何函数,也不存在定时调用机制,这是区块链的确定性计算和可验证性决定的,因此,价格涨到某个位置自动卖出或者价格跌到某个位置自动买入是无法在链上实现的;

买卖订单写入链上非常昂贵,如果一个订单写入是$0.1,那么100万个订单就要$10万,并且,第二天100 万个新订单又需要$10万,这个成本是不可能被用户接受的;

链上极低的TPS(一般在每秒几十到几百),无法支持传统撮合交易高达每秒上百万的性能。

而智能合约有几个独特的技术特性:

智能合约没有私钥,即使是合约部署者,也没有合约的控制权。所谓的合约控制人,只能写到代码逻辑里;

合约可以持有资产,这意味着与合约交互时,既可以把资产转移到合约,也可以从合约转移资产出去。

一句话总结,就是链上的交易,总是交易员与合约交互,这与传统的撮合交易,总是人与人的交互不同。因此,简单照搬撮合模式的链上交易,无一例外都不成功。

直到2018年底,Uniswap上线,一个全新的Swap交易模式诞生了。

需要特别指出的是,此Swap不是指金融衍生品的掉期,它是Uniswap的现货交易模式。

Uniswap首先解决的问题是任何交易员都是在与链上的合约程序交易,由合约本身充当做市商,即自动化做市商 AMM:Automated Market Maker。对于两种资产组成的交易对,例如UNI/ETH,卖出ETH,买入UNI,或者卖出UNI,买入ETH,要与程序完成这笔交易,合约本身首先要持有这两种资产,比如100个ETH和2000个UNI,这样,交易员用1个ETH买入20个UNI后,合约持有资产可能变成101个ETH和1980个UNI。如果另一个交易员稍后卖出40个UNI,合约持有的资产又可能变成2020个UNI和99个ETH。

程序做市的资产从哪来呢?只能由流动性提供者LP(Liquidity Provider)先存入合约。为了鼓励LP将资产作为流动性存入合约,需要以手续费返还的形式作为激励。

和撮合产生市场价不同,和程序交易,需要用算法产生市场价。Uniswap引入了最简单的固定乘积公式x * y = k来由程序决定价格。

还是以UNI/ETH为例,如果初始状态下LP注入2000个UNI和100个ETH到流动性池子里,那么初始价格就是1ETH=20UNI,或者1UNI=0.05ETH,而乘积k = 2000 * 100 = 200000就是固定常数。

假设下一个交易员准备卖1个ETH,他将买入N个UNI,池子里会有100+1个ETH和2000-N个UNI,带入公式(100 + 1) * (2000 - N) = 100 * 2000,计算得知N=19.802,因此,不计手续费的情况下该交易员花费1ETH获得19.802个UNI,买入UNI后价格变为1ETH=19.606UNI,或者1UNI=0.051ETH,即UNI的价格略微上涨。

在Uniswap交易对中,两种资产的地位是等价的,且任何人都可以注入流动性充当做市商。对做市商来说,任何时候,都可以按照当前价格的比例注入两种资产,Uniswap会计算新注入的LP的占比,并返回给做市商一个LP代币作为做市凭证。做市商稍后可以将LP凭证兑换出两种资产,并在兑换时一次性获得累计的手续费。

做市商的风险在于,做市的价格和退出做市的价格很可能不一样,例如做市时注入了100ETH和2000UNI,退出时取出了50ETH和4000UNI,价格变化可能造成做市商损失,这种损失被称为无常损失:Impermanent Loss。

对交易员来说,往一个交易池里扔进去一种资产,就自动获得另一种资产,数量由Uniswap计算后确定,这就是Swap。

每次Swap交易都会改变交易池里两种资产的数量,从而引起价格的变动。那么,影响滑点大小的因素有哪些呢?由Uniswap价格公式可知,如果做Swap交易的数量较少,则滑点较小。如果流动性池子的资产数量越多,则滑点越小。因此,注入到池子里的资产数量至关重要,Uniswap用总锁仓量TVL:Total Value Locked表示池子的大小,可以从Uniswap交易页看到TVL排名靠前的交易池:

如果交易员想要交易UNI/WBTC,但是Uniswap没有这个交易池,或者交易池太小,怎么办?可以找两个较大的交易池,例如UNI/ETH和WBTC/ETH,做两次Swap,完成UNI和WBTC的交易:

┌─────────┐

────>│ UNI/ETH │

└─────────┘

┌─────────┐

<────│WBTC/ETH │

└─────────┘

这种借助中介资产的交易方式会付出更多的手续费,但滑点会大大降低。

由于流动性池子的大小对于滑点有重要影响,而通常价格只会在某个范围波动,为了更好地利用做市商的流动性池子,Uniswap的V3协议允许做市时指定价格区间,超过区间后该做市商的资金就不会被使用。这种改进的目的在于使用更少的资金提供相同的流动性:

除了Uniswap,还有其他基于链上Swap的DEX。

Balancer允许多个资产在同一个池子中交易,它采用的公式如下:

V=\prod_{}B_t^{W_t}

Curve也允许多个资产在同一个池子中交易,它采用的公式如下:

\prod_{}x_i=\left(\frac Dn\right)^n

数学功底过硬的同学可以自行推导价格变化曲线,这里我们就不展开细讲了。

术语

自动化做市商AMM:Automated Market Maker

流动性提供商LP:Liquidity Provider

无常损失:Impermanent Loss

总锁仓量TVL:Total Value Locked

小结

Uniswap开创了自动化做市的AMM机制,使得程序化在链上做市成为可能。

Comments

Make a comment

Sign in to make a comment

Author: 廖雪峰

Publish at: ...

关注公众号不定期领红包:

加入知识星球社群:

关注微博获取实时动态:

廖雪峰的官方网站

©Copyright 2019-2021

Powered by iTranswarp

Feedback

License

手把手教你部署自己的uniswap交易所 - 知乎

手把手教你部署自己的uniswap交易所 - 知乎首发于登链社区切换模式写文章登录/注册手把手教你部署自己的uniswap交易所登链社区区块链技术爱好者的家园本文作者:崔棉大师演示地址: https://fankouzu.github.io/cuiswap/ (请在测试网使用)准备Uniswap合约源码源码结构Uniswap在Github上面开源了全部合约代码,其中包括核心合约,周边合约两部分.Uniswap还开源了前端代码,前端代码使用React开发核心合约周边合约前端代码在Uniswap的核心代码中,主要包含3个合约:工厂合约,配对合约,ERC20合约.其中配对合约继承了ERC20合约,我们可以把它们看作一个合约.工厂合约通过create2方法部署配对合约,所以在部署合约时只需要部署工厂合约.周边合约中包括一些示例代码,例如价格预言机,闪电交换,其中最重要的是路由合约.在周边合约的代码库中,包含两个路由合约:UnsiwapV2Router01,UnsiwapV2Router02.工厂合约和配对合约需要通过路由合约调用才能更好的完成交易所的全部功能,所以我们还要部署路由合约两个合约大部分相同,有小部分不同,如果将两个合约的差异化合并成一个合约,部署的时候将会出现out of gas,所以才被分成了两个合约.常用功能两个合约中都包括,所以我们部署其中任意一个路由合约都可以继承引用调用ERC20合约配对合约工厂合约路由合约从浏览器中下载合约源码如果你对合约代码并不熟悉,也可以跳过上面这部分,接下来我们将从以太坊浏览器中直接拷贝线上版合约源码工厂合约路由合约01[可选]路由合约02部署合约准备部署账户Uniswap的路由合约部署在以太坊的主网和Ropsten,Rinkeby,Goerli,Kovan几个测试网的合约地址都是相同的,这样可以使Uniswap的前端不管切换到任何一个网络,路由地址都不会变.要想实现这个相同地址的部署,我们需要准备一个全新的账户用来部署合约.全新的账户指的是在部署合约之前的nonce值为0.因为合约的地址是根据你的账户地址和nonce值计算出来的,所以在不同网络中,如果nonce值相同,部署出的合约地址也相同.通过助记词生成新账户可以通过我之前录制的视频学习操作方法B站视频油管视频生成好助记词之后,记得用英文助记词,保存好助记词,还有助记词对应的账户地址向新地址转帐ETH部署合约需要的gas费约为0.18个Ether,目前主网可能需要的更多.通过一个已有Ether的账户向新账户转帐.测试网的Ether可以通过每个测试网的水龙头申请到测试币.获取测试币方法转账完成后,将助记词导入到Metamask中准备WETH合约地址在部署路由合约时,构造函数中需要填入工厂合约的地址和WETH合约的地址,由于WETH合约的地址在主网和测试网的地址都不相同,所以需要找到每个网络中WETH合约的地址.WETH合约用于将Eth交换为erc20的Eth,由于Eth不是erc20的token,所以我们必须使用WETH作为交换媒介{

mainnet:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',

ropsten:'0xc778417E063141139Fce010982780140Aa0cD5Ab',

rinkeby:'0xc778417E063141139Fce010982780140Aa0cD5Ab',

goerli:'0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',

kovan:'0xd0A1E359811322d97991E03f863a0C30C2cF029C'

}申请infuraKey在部署合约之前,我们还需要使用infura作为免费节点,所以需要申请一个infuraKey申请地址:infura.io申请方法使用remix部署合约将工厂合约和路由合约的线上版本导入到remix中,在编译合约的选项中,EVM VERSION选择istanbul,COMPILER CONFIGURATION中选择Enable optimization部署顺序和构造函数部署工厂合约构造函数的参数是一个自己常用的账户地址部署路由合约01 [可选], 02构造函数的参数1是工厂合约的地址参数2 是当前网络中WETH合约的地址,参考前文部署Uniswap前端克隆前端代码在项目目录运行命令:$ git clone https://github.com/Uniswap/uniswap-interface.git安装依赖库在项目目录运行命令:$ cd uniswap-interface

$ yarn安装完成后,可以先测试运行一下,在uniswap-interface目录运行命令$ yarn start如果运行成功,将会打开一个浏览器,同时打开Uniswap的前端界面修改路由地址在Uniswap的前端中以常量的形式定义了Uniswap的路由地址,我们只需要修改路由地址就可以让前端链接到你的路由合约中修改文件: 项目目录/uniswap-interface/src/constants/index.ts 第6行import { AbstractConnector } from '@web3-react/abstract-connector'

import { ChainId, JSBI, Percent, Token, WETH } from '@uniswap/sdk'

import { fortmatic, injected, portis, walletconnect, walletlink } from '../connectors'

export const ROUTER_ADDRESS = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D' //修改成你的路由合约地址

......保存后运行yarn start即可看到效果将代码部署到GitHub Pages创建GitHub项目创建项目的方法就不在这里讲了,不会的同学可以去搜索一下将前端代码添加到GitHub项目仓库首先要删除原先Uniswap项目中的.git目录,在项目目录运行命令:$ cd uniswap-interface

$ rm -rf .git然后初始化git,并将Unsiwap前端代码添加到自己的项目仓库中git init

git remote add origin https://github.com/用户名/项目名.git安装并部署gh-pages我们将通过gh-pages模块将前端代码部署到github.io,在前端代码的目录运行:$ yarn add gh-pages接下来要编译react和部署gh-pages,在前端代码的目录运行:$ yarn build修改前端代码目录中的package.json$ vim package.json

{

"name": "@uniswap/interface",

"description": "Uniswap Interface",

"homepage": "https://用户名.github.io/项目名称",//修改这里

......

// 添加部署的脚本,还是在package.json中

......

"scripts": {

......

"deploy": "gh-pages -d build" //添加这一行

},保存退出之后,在前端代码的目录运行:$ git add .

$ git commit -m "first commit"

$ git push

$ yarn deploy现在在浏览器中打开https://用户名.github.io/项目名称/index.html就可以打开自己的交易所啦.如果不输入地址结尾的index.html在项目刚部署之后会报错,过一段时间就可以不输入了.扩展部署自己的weth可以将以太坊浏览器中的weth源码拷贝下来,自己部署一个属于自己的weth合约可信token列表Uniswap有一个自己的可信token列表,同样被设置在项目目录/uniswap-interface/src/constants/index.ts文件中,在最后一行就是.你可以将这个链接地址的文件拷贝下来,设置成自己需要的可信token地址列表,然后上传到github目录中,再修改index.ts文件中的链接地址,这样就可以让你自己的交易所中拥有自己设置的可信token列表了原文链接:https://learnblockchain.cn...作者主页:https://learnblockchain.cn... ,欢迎阅读作者更多好文登链社区-区块链技术爱好者的家园发布于 2020-09-02 15:19交易所区块链技术​赞同 16​​2 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录登链社区高质量区块链技术文

目前大火的去中心化交易所uniswap到底是什么? - 知乎

目前大火的去中心化交易所uniswap到底是什么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册交易所期货交易所去中心化交易所(DEX)Uniswap目前大火的去中心化交易所uniswap到底是什么?关注者122被浏览138,138关注问题​写回答​邀请回答​好问题 7​添加评论​分享​44 个回答默认排序区块浮世绘关注区块链,关注浮世绘​ 关注作者:明观(个人知乎号:区块浮世绘)转载请说明出处。-----------------------------------------------割---------------------------------------------在2020年快要过半的时候,DeFi概念相关的币种直接引爆了行情。DEX (去中心化交易所)——作为DeFi项目最容易捕获价值的细分赛道之一,自然也是备受瞩目。细数一下,DEX的项目还真不少:Bancor、Cruve、Balancer、LRC…但是!如果你要问谁是DEX里最靓的仔,那必然是引领AMM潮流、“Shit Coin大赌场”、 DEX中崛起的独角兽、——Uniswap。2020超新星Uniswap今天的文章将从“引领AMM潮流”、“Shit Coin大赌场”、“DEX中崛起的独角兽”,这三个角度来展开介绍Uniswap,聊聊Uniswap崛起的全过程,还原一个牛市FOMO情绪下的区块链大“赌场”的真面貌。引领AMM潮流Uniswap的诞生充满了偶然与趣味性,据说Uniswap 的创始人Hayden Adams 的灵感来自于V神在reddit上发的一个帖子。灵感有了,Hayden Adams老兄便开始着手学习Solidity编程。是的,他一开始只是抱着学习Solidity编程试试看的想法,然而这个用来练手的项目很快就得到了认可,获得了一笔来自以太坊的资助奖金,这下启动资金的问题也解决了。2018年11月,Uniswap正式上线,其定位是一个基于以太坊的去中心化交易所(DEX)。DEX虽然在用户资产安全性方面有所提升,但是受限于其资金规模,大多数DEX的资产流动性并不好,交易速度也就成了一个硬伤。为了解决这个问题,Uniswap并未采用主流的订单薄交易系统,而是选择了自动化做市商机制。在传统的订单薄交易中,做市商或者交易者会按照不同的价位分别下单,根据价位来提供不同的流动性。而Uniswap的AMM机制则是将所有人的资产汇集到流动池中,并根据一种名为“恒定乘积做市商模型”的算法进行做市商。所谓的“恒定乘积”其实可以看成一个反比例函数“XY=Z”,无论X和Y怎么改变,Z始终是一个定值。放到Uniswap的交易中是指某次交易前后流动池里的两种代币数量的乘积是恒定的,即买前乘积=买后乘积。计算公式举个例子:我在Uniswap中新建一个ETH与X代币的流动池(免费创建,无需费用),创建时ETH和X的数量分别为10和100,这个时候X的价格为0.1ETH,两者数量的乘积为1000。创建完成之后,用户就可以在Uniswap上进行ETH与X的兑换了。假设有人用1个ETH来买X,这个时候1Eth进入流动池,ETH的数量变为11,那么要保持两者乘积不变,X的数量就要减少,这个减少的X的数量即为1个ETH能买到的X数量。根据恒定乘积可得,10*100=(10+1)*(100-X’),计算的X’=9.09,即1个ETH可以买到9.09个X,相对于原来1ETH=10X的价格来说,滑点(价格误差)为(10-9.09)/10*100%=9.09%。将1个ETH改成5个,同样可以算出5个ETH可以买到33.33个X,1个ETH只能够买到6.67个X,滑点为33.33%。从上述例子可以看出,“恒定乘积”算法其实原理一点都不复杂,并且有如下特点:1、根据交易情况反映价格。当有人用A代币兑换B代币(即买入B)时,B的价格就会上涨,反过来(卖出B)则B价格下跌,符合一般交易价格规律。2、流动性保持。无论流动池的资金规模如何,该算法均能提供流动性。3、不适合大额的交易兑换。我们发现在进行大额交易兑换的时候,价格变化很大,且不是线性的。当然,这个大额是相对于流动池的规模来判别的。所谓的“恒定乘积”是指在某次交易前后,乘积不变,也即是说流通池中的两种代币乘积并非是永远一成不变的。那什么时候乘积会改变?对价格有没有影响呢?在Uniswap的AMM机制中,用户也可以往流动池中添加资金来帮助降低交易的滑点。但是如果随意添加代币到流动池中,代币的数量比例会改变,价格会产生较大的波动。为了保持当前的两种代币价格兑换比例不会被改变,用户需要按当前比例数量的两种代币同时注入流动池中。这样一来,乘积会被扩大,但是两种代币的兑换价格并未改变。值得一提的是,Uniswap并没有发行自己的平台代币,为了激励用户往流动池中注入资金,资金池中的用户会按照资金比例平分该交易对的交易总额的0.3%的代币奖励。Uniswap在交易机制上的创新也在DEX领域掀起一股热潮,一大批AMM项目涌现出来,以Curve和Balancer为例,它们都有自己的定价函数,远比Uniswap的“恒定乘积”复杂,作为投资者和交易者,我们乐于看到这些创新和改变,也期待更多有趣有意义的项目。Shit Coin“大赌场”币圈中每一次新的热点之下,都会诞生出一个“大赌场”。所谓”大赌场“即各种项目鱼龙混杂,场子里充满了形形色色的投机者,大家都怀揣着”一夜暴富“的幻想。如今DeFi热潮袭来,Uniwsap的AMM机制助推了牛市的到来,但也成为了各种Shit Coin(没有价值的币)的天堂,上线一夜十倍百倍的币层出不穷。在这些过程中,甚至还产生了一些专业术语:钓鱼:所谓钓鱼,即愿者上钩。作恶者会在Uniswap上发一个毫无价值的币,用心点的做个网站,随便抄个白皮书,简陋点的就什么都没有。去微信群里发公告喊个单,等人来买,收到一些ETH之后,直接撤走币和ETH的流动池。”格局大“的作恶者收到几十个上百个ETH后就跑路,”格局小“的作恶者收到两三个ETH就会跑路。土狗:即上述钓鱼中的那些毫无价值的项目,其代币也就是我所说的Shit Coin。理性地分析一下赌场形成原因:1、作恶成本低。在上一章节中详细解释了Uniswap的“恒定乘积”AMM机制,其中有提到,为了提供更加多样的代币兑换和更好的流动性,用户是可以免费建立流动池的,这也就意味着无需上币费用即可上币,上币成本为0也就意味着作恶成本极大降低。2、AMM滑点。因为很多shit coin的池子流动很小,所以交易兑换时滑点相当大。只要短时间有一批人涌入,很容易买飞,就造成一种价格翻了十多倍的景象。3、FOMO心理。当然DeFi是热点,上线必涨成为共识,只要披着DeFi的外衣,蹭一蹭概念,上线就会遭到投机者哄抢。DEX中崛起的独角兽AMM自动做市商的创新,再加上新一轮DeFi热潮中各种十倍百倍币的推波助澜,Uniswap俨然已经成为DEX中的“独角兽”。而我个人最欣赏的,还是Unswap那令人愉悦的使用体验。在经历过V2的版本迭代之后,Uniswap舍弃众多繁琐的功能,将ERC20 代币之间的兑换功能做到了极致,提升了交易安全性并拥有远超其他DEX的代币兑换体验。毫不夸张地说,Uniswap是我用过的UI界面最好看,使用体验最好的DEX。目前在Token Pocket等主流去中心化钱包APP内,均可以直接登录Uniswap进行操作。在Uniswap内进行交易,你只需要在兑换界面,选择好兑换的币种和数量,页面下方会自动显示兑换的比例和交易滑点(价格误差),如果觉得合理,点击Swap 便可一键进行兑换交易,在交易上链后就能立即取得你应得的币。即使用户需要兑换的代币没有直接的交易对,Uniswap也会自动帮助用户寻找价格最优的途径,在交互界面上,用户还是只需发出一笔交易就能完成兑换,一键Swap就完事了。TokenPocket钱包对Uniswap支持友好,不仅访问速度快,而且还提供了汉化版。此外,很多用过Uniswap的朋友都会抱怨没有k线的问题,看到价格趋势。看不到K线不用慌,TP钱包汉化版本还提供K线和流动池规模查看功能,这点对用户来说真的是很贴心!代币的价格走势一目了然!通过价格走势用户也可以合理地判断出买入价格,心里也更加有底了!丰富的数据查看功能TP钱包最新版本增加了DeFi行情查看功能,各类代币行情一览无余,点击还能直接跳转Uniswap进行交易。根据从DeFiPulse得到数据来看,Uniswap在众多DEX项目中崛起的相当迅速。趁着今年的DeFi热潮,ETH质押量一飞冲天,在众多DEX中杀出一条血路并成功登顶。此外,在USDT与DAI的质押量上,Uniswap也均位列前三。ETH质押量一飞冲天Uniswap勇夺第一除质押量之外,CoinGecko上DEX交易量排行榜上,Uniswap仅次于Compound,屈居第二。多维化的数据显示,Uniswap这只独角兽正在崛起。交易量稳居第二综上所述,Uniswap是一个经过时间检验的、拥有良好体验的DEX项目,特别适合交易规模不大,需要进行代币快速兑换的交易者,也是一些规模较小,技术功底不错的项目团队上币的好去处。小伙伴们如果有对Uniswap有任何疑问,都可在公众号后台留言,我们会及时答复并手把手教会大家使用Uniswap~文章编辑排版: TokenPocket钱包DeFi系列知识科普专题是由TokenPocket发起的有深度、有态度的大型科普性内容专题,旨在科学系统地普及区块链及数字货币、数字钱包等相关知识。TokenPocket是全球领先的数字货币钱包,已为数百万用户提供可信赖的数字货币资产管理服务。专题文章由钱包社区优秀志愿者TP侠或官方撰写,文章版权归作者及TokenPocket所有,转载请注明出处。推荐阅读:你看我现在上车DeFi还有机会吗?快来康康 WalletConnect 都能干点啥~【DeFi科普】Uniswap(汉化版)操作指南编辑于 2021-05-20 09:58​赞同 85​​11 条评论​分享​收藏​喜欢收起​牛老师 Chris知名区块链副主编,曾任职于Coinbase,欢迎咨询问题​ 关注简而言之,有两个原因:(i) 定价权和 (ii) 盈利能力@DeFi_Made_Here 此前发表了一篇关于 Curve Finance 的帖子,对比了 Curve 与 Uniswap。这促使我写了这篇内容来提供很多人在对比 DEXs 时不会考虑的观点。首先,Uniswap v3 推出后,Uniswap 放弃了定价权。那是什么意思?对于在多个交易所之间交易的任何资产,只有一个交易所可以拥有定价权。一个例子就是:股票的 ADR 与主要交易的交易所中的股票。在加密行业中,一个代币可以在多个交易所、CEX 或 DEX 中上市。为什么说 Uniswap 在推出 v3 之后放弃了定价权?这就与 LP 如何在 v3 中提供流动性有关——LP 为提供最多流动性的地方选择了一个价格范围。这称为集中流动性。为什么是集中的?在 Uniswap v2 中,流动性沿着 xy=k 的不变曲线均匀分布,但由于大多数交易活动同时发生在一个范围内,所以 xy=k 曲线其他部分的流动性没有被利用,即资本效率低下。v3 设计就是为了解决这个问题。v3 比 v2 更具资本效率,但它需要 LPs 积极管理他们的头寸,因为交易对的价格范围不时变化(锚定资产除外)。这阻止了新项目在 v3 中为其原生代币建立新的流动资金池。为什么?由于初始流动性较浅,新代币的价格区间波动很大,v3 中有资金池的新项目需要经常调整价格区间。这带来了管理流动性的巨大成本,这是他们无法承受的。因此,大多数新代币都没有在 v3 上列出。由于 v3 上可用的新代币很少,Uniswap 就失去了定价权。怎么回事?要寻找蓝筹代币(例如 $ETH)的价格,人们会参考 Binance 平台上的价格。对于币安未上架的代币,由于在 v3 发布之前 v2 上上架了更多新代币,人们通常参考 v2 获取价格信息。由于管理流动性的巨大成本,v3 上的池子大多是流动性强且不太可能剧烈波动的蓝筹代币,Uniswap 作为价格信息主要来源的地位分崩离析。所以呢?没有定价权的 DEX 中的 LP 会因为被套利而蒙受巨大损失,不知情的订单流远小于有定价权的交易所。套利是对 LP 造成很大伤害的有毒流量的主要来源之一。欲了解更多信息:https://twitter.com/DeFi_Cheetah/status/1608677561919508480为什么 LP 在没有定价权的 DEX 中吃亏更多?ANS:更少的不知情订单流(人们主要在主要交易所进行交易)+ 更多的有毒流(套利者从价格信息的主要来源获取线索,并在其他 AMM 的价格发现过程中利用 LP)正如 @thiccythot_, @0x94305 @0xShitTrader 所指出的,v3 LP 由于巨大的有毒流量而持续亏损 - v3 交易量的约 43% 来自 MEV 机器人!何必呢?这就无法鼓励用户成为 v3 的 LP!这就影响了 v3 的盈利能力。没有定价权的交易所,很难在行业中占据领先地位,进而影响其盈利能力。相比之下,当检查稳定币是否已脱钩时,用户会参考 Curve Finance 而不是 CEX!通过比较,定价权的重要性不言而喻。Curve Finance 从 LP 收取 50% 的费用,Uniswap 将 100% 的费用给 LP;Uniswap 从所有交易中一无所获。没有利润的企业永远不是好企业,无论收入看起来有多大。Uniswap 意识到了这一点,并提议从 LP 中抽成。但事情并没有那么容易。Uniswap 这样做可能会遇到严重的麻烦。如前所述,如果没有定价权,LP 将更容易受到有毒流动的影响,因此提供流动性的动力就会减少。如果 Uniswap 现在抽成,这会进一步打击 LP。这会导致什么?Uni v3 上的大部分交易量都不是「粘性」的,因为超过 70% 的交易量是由算法驱动的。交易量只是跟随定价。因此 LP 的激励更少 -> TVL 和流动性更少 -> 滑点更高且执行价格更糟糕 -> 交易量更低 -> LP 费用更低且 LP 激励更低然后,陷入这个死亡螺旋。提高 LP 的交易费用以维持 TVL 和流动性如何?死亡螺旋不可避免:LP 的激励减少 -> 增加 LP 的交易费用 -> 更糟糕的执行价格 -> 更低的交易量 -> 更低的 LP 费用和 LP 激励这就是 Uniswap 一直不推动费用转换的原因。很多 web2 科技企业在过去几年都没有盈利,但实际上是在构建「护城河」,增强客户粘性。Uniswap 没有利润,但无法培养粘性用户行为,因为只有 <15% 的交易量来自其前端……为什么 Curve Finance 优于 Uniswap?你能想象如果 Uni v3 像 Curve 那样只将 50% 的费用给 LP,它的 TVL 和交易量会发生什么变化?通过 ve 模型 Curve 引导流动性,并赋予 $CRV 实用性。相比之下,$UNI 完全没有任何实用性,与 Uniswap 业务没有相关性。如果 Uni v3 可以从 LP 那里收取 50% 的费用并且仍然保持 TVL 和交易量,那么 Uniswap 胜过 Curve。但事实并非如此,因为它的大部分交易量都不是「粘性」或有机的。Uniswap 不能保证说——「随着时间的流逝,更多的用户习惯了我们的平台,导致更多的费用和更多的流动性。」Uniswap 上的交易量并不忠诚,除非它可以从其前端大幅增加交易量,否则交易量只会随着费用转换的推出而消失。此外,Uniswap TVL 是加过杠杆的:在 $34 亿美元 TVL 中,约 4.35 亿来自 $DAI/$USDC 对,MakerDAO 将其杠杆增加到高达 50 倍,因为它接受 Uni $DAI/$USDC LP 代币作为铸造 $DAI 的抵押品!然后可以将 $DAI 重新存入那里以获得 LP 代币来铸造更多 $DAI!因此,Curve Finance 优于 Uniswap,因为 (i) 它具有定价权,可以成为锚定资产价格信息的主要来源,并且 (ii) 它从 LP 交易费用中抽取 50%,但仍然可以在没有杠杆的情况下通过其卓越的 ve 代币经济学吸引巨大的 TVL!@DeFi_Made_Here 提出了一个很好的反驳论点:如果 Curve Finance TVL 如此依赖 $CRV 释放,一旦 $CRV 大幅下跌,TVL 将由于较低的 APR 而大幅下降。这是真的,但对于以太坊来说也是如此:如果 $ETH 暴跌,它更容易受到攻击并且更不安全。对我来说,web3 之所以如此特别,是因为我们每个人都能够以非托管方式发行数字资产,并通过充分利用代币发行来引导流动性或其他指标。到目前为止,Curve Finance 集中体现了 web3 项目如何做到这一点。最后,为什么 Uni v3 走错了一步?它增加了项目管理链上流动性的成本,从而放弃了其定价权。与其通过引入多条曲线来迎合不同的加密资产来提高 Uni v2 粘性曲线的资本效率,它只是创建了一个新模型,我认为它是订单簿的一个更糟糕的版本。现在,通过与聚合器(NFT 聚合器 或 DEX 聚合器 1 inch)竞争,它已从作为行业的基本效用转变为消费领域的竞争候选者之一。如果它能专注于使所有波动性加密资产的发行成为必然,那就像电和水一样——用户在交换代币时无法避免使用 Uniswap。这是 Uniswap 在我看来应该走的最佳路径,显然它选择了一条不同的路径。就是这样!我希望这能引起一些关于这些蓝筹 DeFI 项目下一步应该做什么的富有成果的讨论。欢迎分享给更多人,发表评论表达你的看法!更多币圈财富密码真干货,请关注公众号:加密前线《后续各种信息和福利通过此公众号发布》发布于 2023-01-10 21:08​赞同 1​​添加评论​分享​收藏​喜欢

手把手教你部署自己的uniswap交易所 | 登链社区 | 区块链技术社区

手把手教你部署自己的uniswap交易所 | 登链社区 | 区块链技术社区

文章

问答

讲堂

专栏

集市

更多

提问

发表文章

活动

文档

招聘

发现

Toggle navigation

首页 (current)

文章

问答

讲堂

专栏

活动

招聘

文档

集市

搜索

登录/注册

手把手教你部署自己的uniswap交易所

崔棉大师

更新于 2020-08-21 13:19

阅读 24673

目前最火的Dex去中心化交易所当属Uniswap了,你可以很容易的将自己发行的Token挂在Uniswap上创建交易对并进行交易.如果有些朋友的需求不是发行Token而是创建一个自己的市场,可以通过本文了解到根据Uniswap开源的合约和前端代码部署自己的去中心化交易所.本文将带着你下载到Uniswap的合约源码,和前端代码,合约重新部署到以太坊主网和测试网,前端部署到GitHub Pages,连服务器都不需要就可以拥有一个自己的去中心化交易所了!

> 演示地址: https://fankouzu.github.io/cuiswap/ (请在测试网使用)

## 准备Uniswap合约源码

### 源码结构

> Uniswap在Github上面开源了全部合约代码,其中包括`核心合约`,`周边合约`两部分.Uniswap还开源了前端代码,前端代码使用React开发

- [核心合约](https://github.com/Uniswap/uniswap-v2-core)

- [周边合约](https://github.com/Uniswap/uniswap-v2-periphery)

- [前端代码](https://github.com/Uniswap/uniswap-interface)

> 在Uniswap的核心代码中,主要包含3个合约:`工厂合约`,`配对合约`,`ERC20合约`.其中配对合约继承了ERC20合约,我们可以把它们看作一个合约.工厂合约通过`create2`方法部署配对合约,所以在部署合约时`只需要部署工厂合约`.

> 周边合约中包括一些示例代码,例如价格预言机,闪电交换,其中最重要的是`路由合约`.在周边合约的代码库中,包含两个`路由合约`:`UnsiwapV2Router01`,`UnsiwapV2Router02`.工厂合约和配对合约需要通过路由合约调用才能更好的完成交易所的全部功能,所以我们`还要部署路由合约`

两个合约大部分相同,有小部分不同,如果将两个合约的差异化合并成一个合约,部署的时候将会出现`out of gas`,所以才被分成了两个合约.常用功能两个合约中都包括,所以我们部署其中任意一个路由合约都可以

```mermaid

graph TD

A(ERC20合约)

B(配对合约)

C(工厂合约)

D(路由合约)

A-->|继承|B

B-->|引用|C

D-->|调用|C

```

### 从浏览器中下载合约源码

> 如果你对合约代码并不熟悉,也可以跳过上面这部分,接下来我们将从以太坊浏览器中直接拷贝线上版合约源码

- [工厂合约](https://cn.etherscan.com/address/0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f#code)

- [路由合约01](https://cn.etherscan.com/address/0xf164fc0ec4e93095b804a4795bbe1e041497b92a#code)[可选]

- [路由合约02](https://cn.etherscan.com/address/0x7a250d5630b4cf539739df2c5dacb4c659f2488d#code)

## 部署合约

### 准备部署账户

> Uniswap的路由合约部署在以太坊的主网和Ropsten,Rinkeby,Goerli,Kovan几个测试网的`合约地址都是相同的`,这样可以使Uniswap的前端不管切换到任何一个网络,路由地址都不会变.要想实现这个相同地址的部署,我们需要准备一个`全新的账户`用来部署合约.全新的账户指的是在部署合约之前的`nonce值为0`.因为合约的地址是根据你的账户地址和nonce值计算出来的,所以在不同网络中,如果nonce值相同,部署出的合约地址也相同.

#### 通过助记词生成新账户

> 可以通过我之前录制的视频学习操作方法

- [B站视频](https://www.bilibili.com/video/BV1VV411o7Dt/)

- [油管视频](https://www.youtube.com/watch?v=xXgUdMIlBfQ)

> 生成好助记词之后,记得用英文助记词,保存好助记词,还有助记词对应的账户地址

#### 向新地址转帐ETH

> 部署合约需要的gas费约为0.18个Ether,目前主网可能需要的更多.

> 通过一个已有Ether的账户向新账户转帐.测试网的Ether可以通过每个测试网的水龙头申请到测试币.

- [获取测试币方法](https://github.com/Fankouzu/smart-contract/tree/master/Solidity%20Lesson%2003#2%E8%8E%B7%E5%8F%96ropsten%E6%B5%8B%E8%AF%95%E5%B8%81)

> 转账完成后,将助记词导入到Metamask中

### 准备WETH合约地址

> 在部署路由合约时,构造函数中需要填入工厂合约的地址和WETH合约的地址,由于WETH合约的地址在主网和测试网的地址都不相同,所以需要找到每个网络中WETH合约的地址.

> WETH合约用于将Eth交换为erc20的Eth,由于Eth不是erc20的token,所以我们必须使用WETH作为交换媒介

```

{

mainnet:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',

ropsten:'0xc778417E063141139Fce010982780140Aa0cD5Ab',

rinkeby:'0xc778417E063141139Fce010982780140Aa0cD5Ab',

goerli:'0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',

kovan:'0xd0A1E359811322d97991E03f863a0C30C2cF029C'

}

```

### 申请infuraKey

> 在部署合约之前,我们还需要使用infura作为免费节点,所以需要申请一个infuraKey

- 申请地址:[infura.io](https://infura.io)

- [申请方法](https://github.com/Fankouzu/smart-contract/tree/master/Solidity%20Lesson%2003#4%E6%B3%A8%E5%86%8Cinfura%E8%8E%B7%E5%8F%96%E6%B5%8B%E8%AF%95%E7%BD%91%E6%88%96%E4%B8%BB%E7%BD%91%E7%9A%84key)

### 使用remix部署合约

> 将工厂合约和路由合约的线上版本导入到remix中,在编译合约的选项中,EVM VERSION选择`istanbul`,COMPILER CONFIGURATION中选择`Enable optimization`

![compile.png](https://img.learnblockchain.cn/attachments/2020/08/k9NpYf3d5f46280fdb704.png)

### 部署顺序和构造函数

1. 部署工厂合约

- 构造函数的参数是一个自己常用的账户地址

2. 部署路由合约01 [可选], 02

- 构造函数的参数1是工厂合约的地址

- 参数2 是当前网络中WETH合约的地址,参考前文

## 部署Uniswap前端

### 克隆前端代码

> 在项目目录运行命令:

```

$ git clone https://github.com/Uniswap/uniswap-interface.git

```

### 安装依赖库

> 在项目目录运行命令:

```

$ cd uniswap-interface

$ yarn

```

> 安装完成后,可以先测试运行一下,在uniswap-interface目录运行命令

```

$ yarn start

```

> 如果运行成功,将会打开一个浏览器,同时打开Uniswap的前端界面

### 修改路由地址

> 在Uniswap的前端中以常量的形式定义了Uniswap的路由地址,我们只需要修改路由地址就可以让前端链接到你的路由合约中

> 修改文件: `项目目录/uniswap-interface/src/constants/index.ts` 第6行

```javascript

import { AbstractConnector } from '@web3-react/abstract-connector'

import { ChainId, JSBI, Percent, Token, WETH } from '@uniswap/sdk'

import { fortmatic, injected, portis, walletconnect, walletlink } from '../connectors'

export const ROUTER_ADDRESS = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D' //修改成你的路由合约地址

......

```

> 保存后运行`yarn start`即可看到效果

### 将代码部署到GitHub Pages

#### 创建GitHub项目

> 创建项目的方法就不在这里讲了,不会的同学可以去搜索一下

#### 将前端代码添加到GitHub项目仓库

> 首先要删除原先Uniswap项目中的.git目录,在项目目录运行命令:

```

$ cd uniswap-interface

$ rm -rf .git

```

> 然后初始化git,并将Unsiwap前端代码添加到自己的项目仓库中

```

git init

git remote add origin https://github.com/用户名/项目名.git

```

#### 安装并部署gh-pages

> 我们将通过gh-pages模块将前端代码部署到github.io,在前端代码的目录运行:

```

$ yarn add gh-pages

```

> 接下来要编译react和部署gh-pages,在前端代码的目录运行:

```

$ yarn build

```

> 修改前端代码目录中的package.json

```

$ vim package.json

```

```

{

"name": "@uniswap/interface",

"description": "Uniswap Interface",

"homepage": "https://用户名.github.io/项目名称",//修改这里

......

// 添加部署的脚本,还是在package.json中

......

"scripts": {

......

"deploy": "gh-pages -d build" //添加这一行

},

```

> 保存退出之后,在前端代码的目录运行:

```

$ git add .

$ git commit -m "first commit"

$ git push

$ yarn deploy

```

> 现在在浏览器中打开`https://用户名.github.io/项目名称/index.html`就可以打开自己的交易所啦.

> 如果不输入地址结尾的index.html在项目刚部署之后会报错,过一段时间就可以不输入了.

## 扩展

### 部署自己的weth

> 可以将以太坊浏览器中的weth源码拷贝下来,自己部署一个属于自己的weth合约

### 可信token列表

> Uniswap有一个自己的可信token列表,同样被设置在`项目目录/uniswap-interface/src/constants/index.ts`文件中,在最后一行就是.你可以将这个链接地址的文件拷贝下来,设置成自己需要的可信token地址列表,然后上传到github目录中,再修改index.ts文件中的链接地址,这样就可以让你自己的交易所中拥有自己设置的可信token列表了

- 欢迎添加微信交流,微信号:cuijin

- [《手把手教你开发去中心化交易所》系列视频(油管)](https://www.youtube.com/playlist?list=PLV16oVzL15MRR_Fnxe7EFYc3MAykL-ccv)

演示地址: https://fankouzu.github.io/cuiswap/ (请在测试网使用)

准备Uniswap合约源码

源码结构

Uniswap在Github上面开源了全部合约代码,其中包括核心合约,周边合约两部分.Uniswap还开源了前端代码,前端代码使用React开发

核心合约

周边合约

前端代码

在Uniswap的核心代码中,主要包含3个合约:工厂合约,配对合约,ERC20合约.其中配对合约继承了ERC20合约,我们可以把它们看作一个合约.工厂合约通过create2方法部署配对合约,所以在部署合约时只需要部署工厂合约.

周边合约中包括一些示例代码,例如价格预言机,闪电交换,其中最重要的是路由合约.在周边合约的代码库中,包含两个路由合约:UnsiwapV2Router01,UnsiwapV2Router02.工厂合约和配对合约需要通过路由合约调用才能更好的完成交易所的全部功能,所以我们还要部署路由合约

两个合约大部分相同,有小部分不同,如果将两个合约的差异化合并成一个合约,部署的时候将会出现out of gas,所以才被分成了两个合约.常用功能两个合约中都包括,所以我们部署其中任意一个路由合约都可以

graph TD

A(ERC20合约)

B(配对合约)

C(工厂合约)

D(路由合约)

A-->|继承|B

B-->|引用|C

D-->|调用|C

从浏览器中下载合约源码

如果你对合约代码并不熟悉,也可以跳过上面这部分,接下来我们将从以太坊浏览器中直接拷贝线上版合约源码

工厂合约

路由合约01[可选]

路由合约02

部署合约

准备部署账户

Uniswap的路由合约部署在以太坊的主网和Ropsten,Rinkeby,Goerli,Kovan几个测试网的合约地址都是相同的,这样可以使Uniswap的前端不管切换到任何一个网络,路由地址都不会变.要想实现这个相同地址的部署,我们需要准备一个全新的账户用来部署合约.全新的账户指的是在部署合约之前的nonce值为0.因为合约的地址是根据你的账户地址和nonce值计算出来的,所以在不同网络中,如果nonce值相同,部署出的合约地址也相同.

通过助记词生成新账户

可以通过我之前录制的视频学习操作方法

B站视频

油管视频

生成好助记词之后,记得用英文助记词,保存好助记词,还有助记词对应的账户地址

向新地址转帐ETH

部署合约需要的gas费约为0.18个Ether,目前主网可能需要的更多.

通过一个已有Ether的账户向新账户转帐.测试网的Ether可以通过每个测试网的水龙头申请到测试币.

获取测试币方法

转账完成后,将助记词导入到Metamask中

准备WETH合约地址

在部署路由合约时,构造函数中需要填入工厂合约的地址和WETH合约的地址,由于WETH合约的地址在主网和测试网的地址都不相同,所以需要找到每个网络中WETH合约的地址.

WETH合约用于将Eth交换为erc20的Eth,由于Eth不是erc20的token,所以我们必须使用WETH作为交换媒介

{

mainnet:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',

ropsten:'0xc778417E063141139Fce010982780140Aa0cD5Ab',

rinkeby:'0xc778417E063141139Fce010982780140Aa0cD5Ab',

goerli:'0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',

kovan:'0xd0A1E359811322d97991E03f863a0C30C2cF029C'

}

申请infuraKey

在部署合约之前,我们还需要使用infura作为免费节点,所以需要申请一个infuraKey

申请地址:infura.io

申请方法

使用remix部署合约

将工厂合约和路由合约的线上版本导入到remix中,在编译合约的选项中,EVM VERSION选择istanbul,COMPILER CONFIGURATION中选择Enable optimization

部署顺序和构造函数

部署工厂合约

构造函数的参数是一个自己常用的账户地址

部署路由合约01 [可选], 02

构造函数的参数1是工厂合约的地址

参数2 是当前网络中WETH合约的地址,参考前文

部署Uniswap前端

克隆前端代码

在项目目录运行命令:

$ git clone https://github.com/Uniswap/uniswap-interface.git

安装依赖库

在项目目录运行命令:

$ cd uniswap-interface

$ yarn

安装完成后,可以先测试运行一下,在uniswap-interface目录运行命令

$ yarn start

如果运行成功,将会打开一个浏览器,同时打开Uniswap的前端界面

修改路由地址

在Uniswap的前端中以常量的形式定义了Uniswap的路由地址,我们只需要修改路由地址就可以让前端链接到你的路由合约中

修改文件: 项目目录/uniswap-interface/src/constants/index.ts 第6行

import { AbstractConnector } from '@web3-react/abstract-connector'

import { ChainId, JSBI, Percent, Token, WETH } from '@uniswap/sdk'

import { fortmatic, injected, portis, walletconnect, walletlink } from '../connectors'

export const ROUTER_ADDRESS = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D' //修改成你的路由合约地址

......

保存后运行yarn start即可看到效果

将代码部署到GitHub Pages

创建GitHub项目

创建项目的方法就不在这里讲了,不会的同学可以去搜索一下

将前端代码添加到GitHub项目仓库

首先要删除原先Uniswap项目中的.git目录,在项目目录运行命令:

$ cd uniswap-interface

$ rm -rf .git

然后初始化git,并将Unsiwap前端代码添加到自己的项目仓库中

git init

git remote add origin https://github.com/用户名/项目名.git

安装并部署gh-pages

我们将通过gh-pages模块将前端代码部署到github.io,在前端代码的目录运行:

$ yarn add gh-pages

接下来要编译react和部署gh-pages,在前端代码的目录运行:

$ yarn build

修改前端代码目录中的package.json

$ vim package.json

{

"name": "@uniswap/interface",

"description": "Uniswap Interface",

"homepage": "https://用户名.github.io/项目名称",//修改这里

......

// 添加部署的脚本,还是在package.json中

......

"scripts": {

......

"deploy": "gh-pages -d build" //添加这一行

},

保存退出之后,在前端代码的目录运行:

$ git add .

$ git commit -m "first commit"

$ git push

$ yarn deploy

现在在浏览器中打开https://用户名.github.io/项目名称/index.html就可以打开自己的交易所啦.

如果不输入地址结尾的index.html在项目刚部署之后会报错,过一段时间就可以不输入了.

扩展

部署自己的weth

可以将以太坊浏览器中的weth源码拷贝下来,自己部署一个属于自己的weth合约

可信token列表

Uniswap有一个自己的可信token列表,同样被设置在项目目录/uniswap-interface/src/constants/index.ts文件中,在最后一行就是.你可以将这个链接地址的文件拷贝下来,设置成自己需要的可信token地址列表,然后上传到github目录中,再修改index.ts文件中的链接地址,这样就可以让你自己的交易所中拥有自己设置的可信token列表了

欢迎添加微信交流,微信号:cuijin

《手把手教你开发去中心化交易所》系列视频(油管)

学分: 949

分类: Uniswap

标签:

Uniswap 

DeFi 

DEX 

点赞 13

收藏 28

分享

Twitter分享

微信扫码分享

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

你可能感兴趣的文章

UniswapV3 部署 - - Foundry Edition

174 浏览

无中转,无滑点,没有无常损失,低GAS,按角色分佣-TTSWAP去中心交易所-原理讲解(第一部份)

50 浏览

Uniswap v3 流动性数学 [翻译]

170 浏览

uniswap v2

280 浏览

记者之眼:2023 年 Arweave DeFi 盘点

372 浏览

Uniswap v3 定价系列1: 停时与鞅

1238 浏览

相关问题

UniswapV3的router是不是在sepolia以及op,arb的sepolia实现exactInputSingle不一样了?

2 回答

我想通过流动性池的swap来直接交易代币,不知道为什么老是失败

1 回答

有没有已经部署的合约去查询Uniswap V3 NFT仓位的价值

1 回答

一般在编写套利合约中通过什么能直接读取给定交易对uniswap v2中的价格?

4 回答

uniswap 多跳路由寻找相关

1 回答

Uniswap中的LP token的数值是如何计算出来的(需要详细计算过程)

2 回答

16 条评论

请先 登录 后评论

崔棉大师

关注

贡献值: 110

学分: 1974

DeFi气氛组组长 微信号:cuijin

文章目录

关于

关于我们

社区公约

学分规则

Github

伙伴们

ChainTool

为区块链开发者准备的开源工具箱

合作

广告投放

发布课程

联系我们

友情链接

关注社区

Discord

Twitter

Youtube

B 站

公众号

关注不错过动态

微信群

加入技术圈子

©2024 登链社区 版权所有 |

Powered By Tipask3.5|

粤公网安备 44049102496617号

粤ICP备17140514号

粤B2-20230927

增值电信业务经营许可证

×

发送私信

请将文档链接发给晓娜,我们会尽快安排上架,感谢您的推荐!

发给:

内容:

取消

发送

×

举报此文章

垃圾广告信息:

广告、推广、测试等内容

违规内容:

色情、暴力、血腥、敏感信息等内容

不友善内容:

人身攻击、挑衅辱骂、恶意行为

其他原因:

请补充说明

举报原因:

取消

举报

×

如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!