ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

几句话介绍 uniswap

uniswap 是基于一个叫做 数量乘积为常数 的点子设计出来的交易所
你可以通过 uniswap 进行交易(也就是,用一种加密货币,换另一种加密货币,只能是 ETH 和 ERC20 Token )
你还可以通过 uniswap 的 send 功能,进行跨币种转账
你还可以通过 pool 入股 uniswap,从交易中的手续费中分一杯羹
最酷的是,你还可以把你的 ERC20 上架到 uniswap

我们将演示

用 Dai 购买 ETH
使用 ETH 向他人转账 Dai
入股 uniswap (pool,或者叫做提供流动性)
发行一款 ERC20 Token
上架一种我们自己的 ERC20 Token

在 uniswap 上用 Dai 购买 ETH

我们先来在 uniswap 上用 Dai 买一点 ETH 吧。我们打开 uniswap.exchange,你会看到这样的界面:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

当然,你也有可能看到是白色的配色,你可以点击右下角的按钮,修改配色:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

首次进入的时候(如果你的 MetaMask 开启了隐私模式),你可能需要点击右上角的 Connect 按钮连接到你的钱包,点击之后,MetaMask 会跳出来让你确认连接到钱包。如果右上角显示的是你的钱包地址,那么说明已经连接,就可以跳过这一步。 连接成功后,右上角的 Connect 按钮会变成你的钱包地址:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后,这里我们注意到 uniswap 提供了 3 大类不同的业务:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

Swap: 交换加密货币,其实就是 交易 了,我们想要用 Dai 来换一点 ETH 就属于这种业务

Send: 跨币种转账业务,比如说你的钱包里面只有 ETH,但是你想转 Dai 到另一个账户,你可以首先通过 ETH 换来 Dai,然后再转账; 或者,你可以使用 Uniswap Send,将这这里说到的两件(对应两笔交易)合并成一件事情来做(一笔交易)

Pool: 提供流动性,获取交易手续费分红。当我们用 ETH 换取 Dai 的时候,你有没有想过, Uniswap 里面的 Dai 是哪里来的呢? 其实是用户通过这个 Pool 操作存进来的。但是,这和 Compound 那种借贷平台不同,用户并不是只是存 Dai 进来, Pool 操作是同时按照当时的价格,同时存入等价值的 Dai 和 ETH 。然后,你就可以开始从交易手续费里面分红了。

最后,我们需说明一下,虽然我们一直在说 Dai 和 ETH,在 uniswap 上,只要是 ERC20 Token 都可以交易;我们最后还将演示,把我们随便创造的一种 ERC20 上架到 uniswap 上。

好吧,我们先来用 ETH 换点 Dai 吧。 首先我们注意到,uniswap 的 swap 页面默认的就是用 ETH 来换其他 ERC20 Token(Dai 也是一种 ERC20 token ),如果你是想用 ERC20 Token 来换 ETH,那么你可以点击中间这个箭头,就行了,当然,我们这里并不需要,这里只是给你提一下这件事情:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们点击 Select a token:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在弹出的对话框中选择 Dai:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后,我们可以填写我们想要花多少 ETH 去买 Dai,会自动计算出我们能买到多少 Dai; 也可以填写我们想要买多少 Dai,会自动计算出我们需要花多少 ETH。我这里填写我想要购买 5 Dai,自动算出了我需要花掉 0.03 ETH:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

如果你很好奇这笔交易的细节,你还可以点击下面的 Advanced Details,了解这笔交易的细节:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

比如,我们在细节里面看到,我们买这 5 个 Dai,最多会花 0.0303 ETH:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

那么你可能会很好奇,如果这个时候市场波动很大,ETH 跌了,也就是说,我们用 0.0303 ETH 都买不到 5 Dai 的时候,会发生什么呢? 答案是,我们的这笔交易会失败,避免很大的滑点带来损失,我们只会损失一些 Gas 费用。

当然,你应该也注意到了,下面是可以让你选择滑点的,你可以允许更大的滑点,让你的交易成功的概率变大(如果你真的要这么做,确保你自己完全明白这意味着什么,避免带来损失):

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

好吧,让我们来执行这笔交易,点击最下面的 Swap 按钮:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

MetaMask 会弹出让我们确认交易,我们点击 Confirm 确认交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们点击右上角我们的地址:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

会弹出一个对话框,在对话框中,我们能够看到刚刚的我们确认的这笔交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们点击这个链接,会跳转到 etherscan 查看具体的交易细节:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们转账了 0.030345639115341726 ETH 到 uniswap 的合约
我们收到了 5 Dai

uniwap 最后退还了 0.000287422181744212 ETH 给我们

在 uniswap 上用 ETH 来捐 Dai

在继续接下来的教学之前,我们先来聊聊公益。UNICEF France ,也就是 联合国儿童基金会法国分部 之前开通了 Dai 捐款 的通道:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们接下来,就来给 联合国儿童基金会法国分部 捐 1 Dai。

先来看下我的这个钱包里面有多少 Dai:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

注意到我的钱包里面有 0.2021 ETH 和 5.997 Dai。虽然我要给 联合国儿童基金会法国分部 捐 1 Dai,但我要通过 uniswap 的 send 功能去捐赠,我不会动用我钱包里面的 Dai。

我们回到 uniswap 的页面,点击 Swap 旁边的 Send,会看到下面的界面:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们同样点击 select token ,选择 Dai:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在 Dai 的数额处,输入 1,然后会自动计算出需要支付 0.006 ETH:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后,我们在 Recipient Address 处,填入收款人的地址,这里当然就是 联合国儿童基金会法国分部 的地址啦:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后,同样的,我们点击 Send, 在 MetaMask 中确认这笔交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

等待交易在网络上被确认之后,我们点击交易的链接,去 etherscan 上详细看下这笔交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们可以看到交易的一些细节:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们转了 0.00607384501450303 ETH 到 uniswap

0x0e3293BFcc55365CF0C67B2e1808be33D2905e3C(也就是 联合国儿童基金会法国分部 的地址 ) 收到了 1 Dai

uniswap 退回了我们 0.000060137079351515 ETH

这个时候,我们再回过来看看我的钱包:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

注意到,我的钱包里面的 Dai 的数量没有减少哦
当然, ETH 的数量减少了

「入股」 uniswap

这里说的 入股 就是 pool 功能。我们通过提供流动性,来获取交易手续费的提成。

在说 pool 功能之前,我们先来回顾下上面的 swap 功能。上面我们说到 uniswap 的 swap 功能的时候,我们是用 ETH 换了 Dai。 其实在 uniswap 上我们可以用任意一种商家的 ERC20 来换另一种 ERC20。我们可以在 swap 页面上,我们点击 ETH 处:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在弹出的对话框里面,我们可以选择其他 ERC20 token,这样我们就可以实现 token 和 token 的交易的。

但是需要注意的是,因为 uniswap 是以 ETH 为核心设计的。虽然我们可以在一笔交易中完成 token 到 token 的交易,但在 uniswap 内部,实际上是经历了 token 到 ETH, ETH 再到 token 两个过程。

好吧,我们为什么要提到这一点呢? 因为当我们打开 pool 对应的页面的时候,你会发现这里上面的 ETH 是点不动的:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

也就是说,我们在 pool 的时候,不能 pool 放入两种 token,而是一定要放入 ETH 和 另一种 token。

我打算 pool 5 个 Dai 和 价值 5 Dai 的 ETH。首先,我们点击 pool 页面,我们选择想要 pool 的 token,点击这里的 Select a token 按钮:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在弹出的页面里面,我们选择 Dai:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后我们输入 5Dai,会自动计算出需要多少 ETH (你可能会注意到,这个时候的 ETH 比上面的价格贵,因为这个部分和上面的部分不是同一天写的,ETH 又涨起来了) :

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

注意,这里有一个 Advanced Details,能够看到更多的细节,点击之后,我们看到:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

这里的 liquidity token 就是用来表示你的 股份 的。

下一步,就是点击最下方的 Add Liquidity 按钮了,但你可能发现它是灰色的,无法点击:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

原来,我们漏掉了 approve Dai( 如果你很好奇 approve 是什么,参考 ERC20 APPROVE),我们点击 Dai 旁边的 Unlock 按钮, 在弹出的 MetaMask 窗口里面,确认这笔 Approve 交易 :

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

等交易在网络上被确认之后,Add Liquidity 按钮就可以点击了:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们点击这个按钮,在 MetaMask 里面确认 Add Liquidity 这笔交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

等待交易确认之后,我们回到 pool 页面,这个时候,我们点击 Add Liquidity:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在弹出的菜单中,我们切换到 Remove Liquidity 功能页面:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在 select a token 这里,我们选择 Dai:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

注意到,这里显示了一个 balance,但这并不是 ETH 或者 Dai 的余额,而是我拥有的 股份,我们点击这个 balance,你会看到我们这点 股份 的价值:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

如果我们这个时候点击 Remove Liquidity,我们的 股份 将会被销毁,同时我们可以拿回 0.028ETH + 4.9987Dai。

发行一款 ERC20

因为我们要演示怎样在 uniswap 上架我们自己的 ERC20 Token,所以,首先呢,我们来随便发行一种 ERC20 Token,我们这里使用 ERC20-Generator 这个在线工具,这样的话,我们只需要 MetaMask 钱包,就能完成 ERC20 Token 的发行。

打开网页之后,我们会看到下面的界面,我们需要填写一些基本信息:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

TokenName 是这个 ERC20 Token 的名字

Token Symbol 是这个 ERC20 的符号

Token Decimal 是小数点的个数。通过这个参数,可以确定我们这个 Token 的最小单位。你可能经常看到 18, 这是因为 ETH 的 最小单位 wei 和 常用单位 Ether(当我们说 我们有一个以太的时候,我们实际上说的是我们拥有 1Ether 个以太 ) 之间的关系是: 1000000000000000000 wei = 1ETH

Token Cap 是总的发行量,我们这里写的是 1000000,注意这里的单位是 Ether

Token Initial Balance: 这个是我的账户里面的 Token 的数量,好吧,所以全都在我的钱包里面了

填写好了这些参数之后,我们点击 Create Token,MetaMask 会弹出窗口,让我们确认这笔 部署智能合约(我们发行一个 ERC20 Token,其实就是部署了一个智能合约) 的交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

这里要提醒的是,如果网络比较拥挤,而你的 gas price 设置得很低(比如如上图),那么,这笔交易将会很久才能确认,所以你可能需要 加速你的交易,或者在一开始就设置合适的 Gas Price

接着,我们需要耐心地等待交易确认,在这个过程中,我们可以点击 Transaction id 的链接,跳转到 etherscan 上看一下:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

当交易确认之后,在 etherscan 上面,(比如我们这笔交易的 etherscan 地址 )我们就可以看到我们的 ERC20 Token 的合约地址了:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

可以看到,我们的 ERC20 Token 对应的智能合约地址为 0x1Ba4dd5306528A92906193b070980cCB2322A2E4,按照之前我们说的,我的钱包里面应该有了一些这个 Token 了,我们在浏览器上点击 MetaMask 图标,在弹出的窗口中,我们点击右上角,然后点击 Expand View:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后,我们就会看到打一点的 MetaMask 窗口,在下方我们看到一个叫做 Add Token 的文字,点击它:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在弹出的界面里面,我们选择 Custom token,并在下面的 Address 处填入我们的 Token Address,也就是上面的 0x1Ba4dd5306528A92906193b070980cCB2322A2E4:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

点击 Next 之后,我们会看到下面的页面:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们再点击 Add Tokens,然后你就会在左边看到我们多了一种 Token,也就是我们的 DEFI Token,我很富有地拥有 1000000 个。

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

把我们发行的 ERC20 上架到 uniswap

现在让我们回到 uniswap 里面,我们选择 pool 功能,在 Add Liquidiy 这里,我们点击一下:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

在弹出的菜单里面,你会看到 Create Exchange,这个功能就是上架我们的 ERC20 Token 了:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们填入我们的合约地址:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

然后点击 Create Exchange 按钮,在弹出的 MetaMask 窗口中确认交易:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

这里要提醒的是,如果网络比较拥挤,而你的 gas price 设置得很低(比如如上图),那么,这笔交易将会很久才能确认,所以你可能需要 加速你的交易,或者在一开始就设置合适的 Gas Price

我们等待交易确认,交易确认之后,好像什么都没有发生一样:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

但是,我们现在回到 Add Liquidity(可能需要等待一小会),点击这里的 Select Token:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

我们输入我们的合约地址,然后选择 DEFI-ORG-TUTORIAL ,也就是我们创建的这种 Token 的名字:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

接着,你会看到一句提示,哈哈哈,我们现在要通过 pool 来定价了:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

那么我们来定价吧, 10 个 Token 卖 0.01 Ether 吧:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程

接下来的操作就和上面的 pool 相同:

首先 unlock DEFI token

然后点击 Add Liquidity

做完这些之后,我们回到 swap,你会发现我们的 Token 就可以购买了:

ETH购买、转账、参与uniswap,发行ERC20资产并上线uniswap全教程