<100 subscribers
Uniswap v3 无常损失分析
Sep 17, 202228 min. readUniswap v3 无常损失分析目标对 Uniswap v3 无常损失的定量分析;如何使用策略让 Uniswap v3 LP 获得更大的收益。Uniswap 概览基于恒定乘积的自动化做市商(AMM),去中心化交易所。 v1 版本:2018年11月解决了什么问题:传统交易所 order book 买卖双方不活跃导致的长时间挂单,交易效率低下功能:ETH ←→ ERC20 token 兑换带来的问题:token1 与 token2 之间的兑换需要借助 ETHUSDT → ETH → USDCv2 版本:2020年5月新功能自由组合交易对:token1 ←→ token2token1-token2 交易池LPers 提供流动性并赚取费用价格预言机(时间加权平均价格,TWAP)、闪电贷、最优化交易路径等带来的问题资金利用率低:在 x*y=k 的情况下,做市的价格区间在 (0, +∞) 的分布,当用户交易时,交易的量相比我们的流动性来说是很小的假设 ETH/DAI 交易对的实时价格为 1500 DAI/ETH,交易对的流动性池中共有资金:4...
Tornado Cash 基本原理
假设地址 A 发送了 100 ETH 给地址 B,由于在区块链上所有的数据都是公开的,所以全世界都知道地址 A 和地址 B 进行了一次交易,如果地址A和地址 B 属于同一个用户 Alice,则大家知道Alice仍然拥有 100 ETH,如果地址B属于用户 Bob,则大家知道 Bob 现在有 100ETH 了。一个问题就是:如何在交易的过程中保持隐蔽呢,或者说隐藏发送用户与接收用户之前的练习?那就要用到 Tornado Cash。 用户将资金存入Tornado Cash,然后将资金提取到另一个地址中,在区块链上记录上,这两个地址之间的联系就大概率断开了。那 Tornado Cash 是如何做到的呢?存款(deposit)过程首先我们看一下存款过程。用户在存款时需要生产两个随机数 secret 和 nullifier,并计算这两个数的一个哈希 commitment = hash(secret, nullifier),然后用户将需要混币的金额(比如 1 ETH)和 commitment 发送给 TC 合约的 deposit 函数,TC合约将保存这两个数据,commitment之后会用于...
使用 Merkle 树做 NFT 白名单验证
使用 Merkle 树做 NFT 白名单验证Merkle 树现在普遍用来做线上数据验证。这篇文章主要解释和实现使用 Merkle 树做 NFT 白名单验证。 使用 Merkle 树做 NFT 白名单验证,简单来说就是将所有的白名单钱包地址做为 Merkle 树的叶节点生成一棵 Merkle 树,在部署的NFT 合约中只存储 Merkle 树的 root hash,这样避免了在合约中存储所有白名单地址带来的高额 gas 费用。在 mint 时,前端生成钱包地址的 Merkle proof,调用合约进行验证即可。 一次验证过程前端和合约运行过程如图:图片来自 [3]Merkle 树详情请参见:https://en.wikipedia.org/wiki/Merkle_tree图片来自 [1]比如,以水果单词作为叶节点,生成 Merkle 树的结构如下:图片来自 [2]合约实现我们简单实现 Merkle 验证的过程,此合约包含以下功能:设置 Merkle 根哈希: setSaleMerkleRoot验证 Merkle proof: isValidMerkleProofmint 并记录是否...
Uniswap v3 无常损失分析
Sep 17, 202228 min. readUniswap v3 无常损失分析目标对 Uniswap v3 无常损失的定量分析;如何使用策略让 Uniswap v3 LP 获得更大的收益。Uniswap 概览基于恒定乘积的自动化做市商(AMM),去中心化交易所。 v1 版本:2018年11月解决了什么问题:传统交易所 order book 买卖双方不活跃导致的长时间挂单,交易效率低下功能:ETH ←→ ERC20 token 兑换带来的问题:token1 与 token2 之间的兑换需要借助 ETHUSDT → ETH → USDCv2 版本:2020年5月新功能自由组合交易对:token1 ←→ token2token1-token2 交易池LPers 提供流动性并赚取费用价格预言机(时间加权平均价格,TWAP)、闪电贷、最优化交易路径等带来的问题资金利用率低:在 x*y=k 的情况下,做市的价格区间在 (0, +∞) 的分布,当用户交易时,交易的量相比我们的流动性来说是很小的假设 ETH/DAI 交易对的实时价格为 1500 DAI/ETH,交易对的流动性池中共有资金:4...
Tornado Cash 基本原理
假设地址 A 发送了 100 ETH 给地址 B,由于在区块链上所有的数据都是公开的,所以全世界都知道地址 A 和地址 B 进行了一次交易,如果地址A和地址 B 属于同一个用户 Alice,则大家知道Alice仍然拥有 100 ETH,如果地址B属于用户 Bob,则大家知道 Bob 现在有 100ETH 了。一个问题就是:如何在交易的过程中保持隐蔽呢,或者说隐藏发送用户与接收用户之前的练习?那就要用到 Tornado Cash。 用户将资金存入Tornado Cash,然后将资金提取到另一个地址中,在区块链上记录上,这两个地址之间的联系就大概率断开了。那 Tornado Cash 是如何做到的呢?存款(deposit)过程首先我们看一下存款过程。用户在存款时需要生产两个随机数 secret 和 nullifier,并计算这两个数的一个哈希 commitment = hash(secret, nullifier),然后用户将需要混币的金额(比如 1 ETH)和 commitment 发送给 TC 合约的 deposit 函数,TC合约将保存这两个数据,commitment之后会用于...
使用 Merkle 树做 NFT 白名单验证
使用 Merkle 树做 NFT 白名单验证Merkle 树现在普遍用来做线上数据验证。这篇文章主要解释和实现使用 Merkle 树做 NFT 白名单验证。 使用 Merkle 树做 NFT 白名单验证,简单来说就是将所有的白名单钱包地址做为 Merkle 树的叶节点生成一棵 Merkle 树,在部署的NFT 合约中只存储 Merkle 树的 root hash,这样避免了在合约中存储所有白名单地址带来的高额 gas 费用。在 mint 时,前端生成钱包地址的 Merkle proof,调用合约进行验证即可。 一次验证过程前端和合约运行过程如图:图片来自 [3]Merkle 树详情请参见:https://en.wikipedia.org/wiki/Merkle_tree图片来自 [1]比如,以水果单词作为叶节点,生成 Merkle 树的结构如下:图片来自 [2]合约实现我们简单实现 Merkle 验证的过程,此合约包含以下功能:设置 Merkle 根哈希: setSaleMerkleRoot验证 Merkle proof: isValidMerkleProofmint 并记录是否...
author: qiwihui.eth#4638
问题3(20分): Automated market maker (AMM).
你作为Uniswap V2的流动性提供者,为DAI/ETH池贡献5个ETH及5000个DAI。假设1个DAI值1美元,那么你的出资总额为1万美元。
A) 几个月后,1个ETH的价格上升到2000 DAI。在DAI/ETH池适应这个新的汇率稳定下来以后,您决定撤回作为流动性提供者的全部份额。假设系统不收费(∅= 1),你会收到多少ETH和DAI ?
答: 假设初始时流动性池中 ETH 和 DAI 的数量为$x$,$y$,提供的5个 ETH 和5000个 DAI 流动性占比为 $w$,则此时边际价格(marginal price)为$M_p=\frac{y}{x}=\frac{5000}{5}=1000$;
设价格变化之后流动性池中 ETH 和 DAI 的数量为 $x'$,$y'$,则有 $M_p'=\frac{y'}{x'}=2000=2M_p$;
根据恒定乘积公式 $xy=x'y'=k$,以及 $M_p=\frac{y}{x}$,$M_p'=\frac{y'}{x'}$,可以推出:
$x'=\sqrt{\frac{k}{M_p’}}=\sqrt{\frac{k}{2M_p}}=\frac{1}{\sqrt{2}}x$,$y’=\sqrt{2kM_p'}=\sqrt{2}y$,
由于流动性占比不变,所以取回的 ETH 为 $wx'=\frac{1}{\sqrt{2}}wx=5\frac{1}{\sqrt{2}}=3.5355$,DAI 为 $wy'=\sqrt{2}wy=5000\sqrt{2}=7071.0678$
故可以收到 3.5355 ETH 和 7071.0678 DAI
B) 如果你自己持有你的5 ETH和5000 DAI,你的资产现在将价值15K DAI,获取了5000 DAI的利润。在这几个月里,作为Uniswap V2的流动性提供者,与“自己持有”策略相比,你的损失是多少? 将损失以美元的绝对值表示,假设1 DAI = 1 USD。这被称为暂时性损失,尽管在这种情况下,这种损失是相当永久性的。
答: 按目前的价格,收回的 ETH 和 DAI 的价值为 $3.5355*2000+7071.0678=14142.0678$,损失为 $15000-14142.0678=857.9322$,损失率为 $\frac{857.9322}{15000}=0.057=5.7%$,故损失 857.9322 USD。
C) 如果您因担任Uniswap V2的流动性提供者而损失了x美元,Uniswap V2是用部分(b)计算x的,那么这些资金流向了哪里?具体来说,就是谁在这个过程中获得了x美元?
答: 这些损失将会由套利交易者获得。当外部 ETH 价格上升时,套利交易者会通过向 ETH/DAI 池中添加 DAI 取出 ETH 来使得池中的 ETH 价格比例达到外部 ETH 价格,由于池中流动性乘积恒定,因此取出的 ETH 的套利利润即为流动性提供者的损失。
D) 现在让我们转向使用Uniswap V2 交易。假设Bob使用DAI/ETH池将DAI兑换成ETH进行大型 交易。交易完成后,DAI/ETH池中的DAI金额比之前略高,而ETH的金额则略低。因此,DAI/ETH 池中的资产比率有点偏离其平衡点。
套利者Alice发现了这个机会,并希望在反方向发行一个交易,以重新平衡资金池。她旨在从这笔交易中获利,所以希望确保她的交易在Bob交易后被立即执行。这种策略被称为“尾随”。
那么Alice如何能实施尾随计划呢?请提出可以使Alice的交易在Bob之后可以有合理机会被立即被执行的方法。
答: Alice 可以利用一定量账户和一个合约来使得其交易在Bob交易之后被立即执行,具体步骤为:
Alice 部署一个合约,这个合约可以提交交易,并预先存入用于交易的ETH;
准备一定数量的账户,账户中存入可用以支付gas的ETH;
Alice 监听以太坊的交易池,当监听到 Bob 的交易时,通过每一个账户调用部署的合约广播一个交易,这个交易的 gas 价格等于 Bob 交易的 gas 价格。
由于以太坊中矿工在打包交易时是根据交易的gas价格高低进行的,这样将会使得 Alice 广播的交易有机会处于 Bob 交易的后的第一个交易,从而达到获利机会。
E) 假设10个不同的套利者,为捕获Bob的交易创造的套利机会, 在同一时间执行了相同的尾随操作策略。他们都使用了你在(D)部分中所描述的相同机制,那么这10个中的哪一个会获胜呢?
答: 由于以太坊中矿工在打包交易时是根据交易的 gas 价格高低进行的,因此对于所有 gas 价格和Bob的交易的 Gas 价格一致的交易,都有能被排序在Bob交易之后,所以这些交易中处在 Bob 交易之后的第一个交易将获利,对应的套利者获胜。

author: qiwihui.eth#4638
问题3(20分): Automated market maker (AMM).
你作为Uniswap V2的流动性提供者,为DAI/ETH池贡献5个ETH及5000个DAI。假设1个DAI值1美元,那么你的出资总额为1万美元。
A) 几个月后,1个ETH的价格上升到2000 DAI。在DAI/ETH池适应这个新的汇率稳定下来以后,您决定撤回作为流动性提供者的全部份额。假设系统不收费(∅= 1),你会收到多少ETH和DAI ?
答: 假设初始时流动性池中 ETH 和 DAI 的数量为$x$,$y$,提供的5个 ETH 和5000个 DAI 流动性占比为 $w$,则此时边际价格(marginal price)为$M_p=\frac{y}{x}=\frac{5000}{5}=1000$;
设价格变化之后流动性池中 ETH 和 DAI 的数量为 $x'$,$y'$,则有 $M_p'=\frac{y'}{x'}=2000=2M_p$;
根据恒定乘积公式 $xy=x'y'=k$,以及 $M_p=\frac{y}{x}$,$M_p'=\frac{y'}{x'}$,可以推出:
$x'=\sqrt{\frac{k}{M_p’}}=\sqrt{\frac{k}{2M_p}}=\frac{1}{\sqrt{2}}x$,$y’=\sqrt{2kM_p'}=\sqrt{2}y$,
由于流动性占比不变,所以取回的 ETH 为 $wx'=\frac{1}{\sqrt{2}}wx=5\frac{1}{\sqrt{2}}=3.5355$,DAI 为 $wy'=\sqrt{2}wy=5000\sqrt{2}=7071.0678$
故可以收到 3.5355 ETH 和 7071.0678 DAI
B) 如果你自己持有你的5 ETH和5000 DAI,你的资产现在将价值15K DAI,获取了5000 DAI的利润。在这几个月里,作为Uniswap V2的流动性提供者,与“自己持有”策略相比,你的损失是多少? 将损失以美元的绝对值表示,假设1 DAI = 1 USD。这被称为暂时性损失,尽管在这种情况下,这种损失是相当永久性的。
答: 按目前的价格,收回的 ETH 和 DAI 的价值为 $3.5355*2000+7071.0678=14142.0678$,损失为 $15000-14142.0678=857.9322$,损失率为 $\frac{857.9322}{15000}=0.057=5.7%$,故损失 857.9322 USD。
C) 如果您因担任Uniswap V2的流动性提供者而损失了x美元,Uniswap V2是用部分(b)计算x的,那么这些资金流向了哪里?具体来说,就是谁在这个过程中获得了x美元?
答: 这些损失将会由套利交易者获得。当外部 ETH 价格上升时,套利交易者会通过向 ETH/DAI 池中添加 DAI 取出 ETH 来使得池中的 ETH 价格比例达到外部 ETH 价格,由于池中流动性乘积恒定,因此取出的 ETH 的套利利润即为流动性提供者的损失。
D) 现在让我们转向使用Uniswap V2 交易。假设Bob使用DAI/ETH池将DAI兑换成ETH进行大型 交易。交易完成后,DAI/ETH池中的DAI金额比之前略高,而ETH的金额则略低。因此,DAI/ETH 池中的资产比率有点偏离其平衡点。
套利者Alice发现了这个机会,并希望在反方向发行一个交易,以重新平衡资金池。她旨在从这笔交易中获利,所以希望确保她的交易在Bob交易后被立即执行。这种策略被称为“尾随”。
那么Alice如何能实施尾随计划呢?请提出可以使Alice的交易在Bob之后可以有合理机会被立即被执行的方法。
答: Alice 可以利用一定量账户和一个合约来使得其交易在Bob交易之后被立即执行,具体步骤为:
Alice 部署一个合约,这个合约可以提交交易,并预先存入用于交易的ETH;
准备一定数量的账户,账户中存入可用以支付gas的ETH;
Alice 监听以太坊的交易池,当监听到 Bob 的交易时,通过每一个账户调用部署的合约广播一个交易,这个交易的 gas 价格等于 Bob 交易的 gas 价格。
由于以太坊中矿工在打包交易时是根据交易的gas价格高低进行的,这样将会使得 Alice 广播的交易有机会处于 Bob 交易的后的第一个交易,从而达到获利机会。
E) 假设10个不同的套利者,为捕获Bob的交易创造的套利机会, 在同一时间执行了相同的尾随操作策略。他们都使用了你在(D)部分中所描述的相同机制,那么这10个中的哪一个会获胜呢?
答: 由于以太坊中矿工在打包交易时是根据交易的 gas 价格高低进行的,因此对于所有 gas 价格和Bob的交易的 Gas 价格一致的交易,都有能被排序在Bob交易之后,所以这些交易中处在 Bob 交易之后的第一个交易将获利,对应的套利者获胜。

Share Dialog
Share Dialog
No comments yet