本文目录
前言
使用Uniswap之前
准备好支持Web3的浏览器(启用Web3的浏览器)
如何使用Uniswap?
-1.兑换/发送(交换/发送)
-解锁
-2.增加/领出流动性资金
-3.创建交易所
前言
Uniswap 的界面其实已经非常精简了,单就「如何使用」而言真的没什么好教的,所以这篇文章主要就讲讲使用过程中一些隐藏的细节吧!
使用 Uniswap 之前
准备好 Web3 的浏览器(Web3 enabled browser),Uniswap 交易所的网页必须在 Web3 的浏览器中使用,这样的浏览器能替你保管私钥,并与以太坊区块链沟通、发送交易。
以下简介几款电脑、手机上知名的 DApp 浏览器。
MetaMask
在电脑上我们建议使用 Chrome, Firefox, Opera, Brave 等浏览器搭配 MetaMask 扩充组件使用。MetaMask 是开源软件、使用者体验不错、而且软件本身没有出过任何安全性问题,在电脑上几乎没有竞争对手了。
如果你使用 Ledger 或是 Trezor 硬件钱包,可以透过 MetaMask 的「Connect Hardware Wallet」功能连接硬件钱包内的帐号,这样既能拥有硬件钱包的安全性,又能享受到使用 MetaMask 与 DApp 互动的方便性,非常推荐这样做!
在 Android/iOS 上则有非常多选择,个人推荐以下几款 App:
Trust Wallet
Trust Wallet 是我目前主要使用的手机钱包兼 DApp 浏览器。过去是少数开源的手机钱包之一,但在 2018 年 7 月被币安买下后,现在官方网站的首页上已经没有 “open-source” 的叙述了…当然被币安买下也意味着开发资源更多、与币安的整合更深入,对于常用币安交易所的人而言应该是首选。
imToken
imToken 是我第一个使用的钱包 App,算是较早面世的以太坊钱包 App 之一。imToken 整合了非常多功能,使用体验比 Trust Wallet 好不少。
Coinbase Wallet
知名加密货币交易所 Coinbase 旗下的钱包 App,跟 Coinbase 帐号的整合性较好。
Opera
是目前唯一一个成为 DApp 浏览器的主流浏览器。开通钱包时不会立刻要求使用者记下助记词,使用体验不错。但目前不支援 ETH 及 ERC20 Token 以外的加密货币,不像前几个介绍的手机钱包都能支持多种货币。
除此之外还有处于公开测试阶段的 Status 和 MetaMask Mobile,两者都是开源软件,
有兴趣可以尝试看看。
如何使用 Uniswap?
使用支持 Web3 的浏览器打开 Uniswap 交易所,如果你使用 MetaMask,一进入就会跳出一个视窗问你愿不愿意让 Uniswap Exchange 连接你的以太坊帐号,这一步最大的功能是让 DApp 能读取你的钱包地址,按下 Connect 即可。
Uniswap 交易所目前的功能只有五个,可以分成三类:兑换/发送(Swap/Send)、
增加/领出流动性资金(Add/Remove Liquidity)、创建交易所(Create Exchange)。
以下分别介绍:
1. 兑换/发送(Swap/Send)
「兑换(Swap)」可以进行任意两种币的兑换。选定好兑换的输入、输出币种后,可以选择在「输入」或「输出」其中一栏输入数字,另一栏会立刻计算出对应的数字。
顺带一提,按「Balance: xx」可以填入你该币种的全部余额(ETH 会保留 0.1),按正中央的「↓」可以对调输入、输出的币种,按「汇率」右边的等式可以切换等式两边的币种。
「发送(Send)」可以在兑换完成的同时立刻发送这些币给另一人。
显示出来的数字都是已经扣除手续费的,ETH ⇄ Token 的手续费是 0.3%,Token ⇄ Token 的手续费是 0.5991%(因为其实是 Token → ETH → Token 即 0.3% 扣两次)。
兑换的价格也会随兑换的金额改变,金额越大,兑换价格越不好,兑换完成后价格的变化幅度也越大,价格变化幅度可以点开下方的「交易明细」看到,即 “This trade will cause the price to change by xx%” 这一行。
交易明细中有一行「你将至少收到 xxx 或交易失败」,这是 Uniswap 设计的一个保护机制,这样做的原因是:从我们发出交易到交易上链之前,交易价格有可能因为别人的交易而改变,有可能导致我们的成交价格大幅偏离预期。
例如:我们想要以 1 ETH = 230 DAI 的价格卖出 ETH 并送出了交易,但是在我们的交易被打包上链之前,突然有人大量卖出 ETH 使得价格掉到 1 ETH = 200 DAI,那当我们的交易上链时,我们就得被迫接受 1 ETH = 200 DAI 的价格了。为了避免这样的憾事发生,Uniswap 在合约中就设计了这样的机制:我们可以在发出的交易中规定我们至少应换得多少 ETH 或 Token,如果交易上链时发现价格变化导致我们实得的 ETH 或 Token 量低于指定的数量,那这笔交易就会失败。(注:交易仍然会上链,只是币的兑换不会成功,我们仍然要付出交易所需的矿工费。 )
这个数字实际上我们是可以任意指定的,但可能是为了减少使用上的认知负担,所以 Uniswap 的网页自动帮你设定好了这个数字(= 预期数量乘以 0.98 或 0.96)。除此之外还有一个保护机制是关于时间的,我们其实可以指定一个时刻作为最后期限,如果交易上链的时刻超过这个 最后期限则交易会失败。
Uniswap 网页会自动设定最后期限为当下的时间加 15 分钟,换句话说,如果你发出的「兑换」或「发送」交易没有在 15 分钟内上链,交易就会失败,所以请避免设定太低的 gas price 以防交易迟迟不上链最终失败。
解锁(Unlock)
在操作的过程中你可能会注意到:当你首次需要传送某种 ERC20 Token 进 Uniswap 时,在 Token 选单的左边会出现「解锁」按钮。
按下去后会让你发送一笔交易,交易完成后你就能在 Uniswap 使用这种 Token 了。这笔交易的意思是「允许 Uniswap 的合约任意转移我持有的这种 Token」,用到的是 ERC20 的 approve 功能。在 Compound 也会遇到一样的机制,他们的用词是「Enable」。
这个动作其实存在不小的风险,如果合约有缺陷,或者这个应用程式的开发者就是恶意要盗取你的 Token,那在你 approve 之后,你的 Token 就处于随时可能被全部盗走的状态了。总之千万不要在你不够信任的 DApp 中 approve Token,在 approve 时最好也确认一下 approve 的对象是不是正确的智能合约。
2. 增加/领出流动性资金(Add/Remove Liquidity)
「增加流动性资金(Add Liquidity)」的具体含义是:「将你持有的 ETH 与某种 Token 以价值 1:1 的比例存入 Uniswap 合约,替 ETH-Token 交易对增加流动性,你因此能获得存入期间人们在这个交易所交易时付出的手续费的分润。 」在完成「增加流动性资金」的同时你会获得数量正比于你投入的资金量的「资金池代币(Pool Tokens)」,代表你在这个交易所中的权益。
当你「领出流动性资金(Remove Liquidity)」时,会把资金池代币销毁并领出你应得的 ETH 与 Token,这里面会隐含前述的手续费利润。
替 Uniswap 增加流动性资金虽然能获得手续费利润,但并不是稳赚不赔的,你需要承受价格变动的风险。举个例子:假设你本来拥有 1 ETH + 100 DAI(总价值 200 USD),
在 1 ETH = 100 DAI 的时候全部投入 Uniswap,在价格变成 1 ETH = 400 DAI 时领出,若不计利润的报酬,你将能领回 0.5 ETH + 200 DAI(总价值 400 USD),但如果你当初不将币投入 Uniswap 而是持有到现在,你会拥有 1 ETH + 100 DAI(总价值 500 USD),所以如果 Uniswap 带给你的分润不足 100 USD,你就亏了。
简单给一个结论:假设你投入 ETH 和某 XYZ Token 进入 Uniswap,而且你领回时 ETH/XYZ 的价格跟投入时的价格不一样,那么若不计利润的报酬,你领回的 ETH + XYZ 的总价值都必定少于不投入 Uniswap 的情况。所以理想的情况是找到一个 XYZ Token,它对 ETH 的价格上下波动大,但长期而言都在同一个价格附近震荡,这样既能让你赚到更多的手续费分润,也能减少前后价格不同造成的损失。
3. 创建交易所(Create Exchange)
「创建交易所(Create Exchange)」非常简单,填入 ERC20 Token 的地址、按下「创建交易所」送出交易,交易上链后这个 Token 就能在 Uniswap 上交易了。
只是在你创建完交易所后,这个代币并不会立刻出现在网站上的代币选单中,而需要在 uniswap-frontend repo 发 issue 和 pull request,等被 merge 后才会被加进代币选单中。
其实技术上是可以做到创建交易所后 Token 就立刻出现在选单中的,但为了避免有人用同名的假币混淆使用者,所以做成需要人工审查。但就算某个 Token 还没被列入选单中,只要它的交易所已经被创建了,你还是可以由直接输入 Token 合约地址的方式找到它。
在替你的 ERC20 Token 创建 Uniswap 交易所之前,还有一些事情需要注意:你可能会注意到,有些知名 Token(如 USDT, OMG)在 Uniswap 上无法交易,原因是这些 Token 的合约有缺陷,在 Uniswap 上交易会失败。ERC-777 Token 或用到类似机制的 Token 在 Uniswap 上也会出问题,不要为其创建交易所或增加流动性资金。
全文完!
原文链接:https://medium.com/taipei-ethereum-meetup/defi-uniswap-2-e0fd954d56