怎么用uniswap兑换代币,怎么用uniswap

  

  套利、智能合约编码和乐观转移创造了令人印象深刻的新工具组合。这是建立在公共区块链创新基础上的创新。这两项创新的融合创造了一个真正强大而独特的盈利机制。本教程分为两部分。在第一部分,我们将解释闪贷和闪换背后的一些基本概念。在第二部分,我们将展示如何构建我们自己的套利机器人,它运行在Infura上,通过闪电贷款来捕捉和执行套利机会。   

  

  用熟悉的语言学习以太坊DApp开发:Java | PHP | Python |。NET/c# | Golang | node . js | Flutter/dart   

  

  

1、套利/Arbitrage

  

  

  套利交易不是区块链或者闪贷独有的概念。当你在不同的交易所拥有相同的资产,价格不同时,你就有机会通过套利交易获利。   

  

  我们以Uniswap和Sushiswap为例,看看套利的具体工作原理。Sushiswap是Uniswap的一个分支,这意味着它们运行在相同的智能合约代码上。虽然是两个不同的去中心化的交易所,但是我们可以使用相同的代码来执行相同的事务。此外,由于Sushiswap是一个相对较新的exchange,支持它的机器人可能较少。   

  

  套利的工作原理大致是这样的:1 ETH在Uniswap中值80 DAI,在Sushiswap中值100 DAI。然后我们在Uniswap上购买1 ETH,然后马上在Sushiswap上卖出,就能赚20 Dai(未扣除汽油和费用)。这是典型的套利交易。   

  

  

2、闪电贷 vs. 闪电兑换

  

  

     

  

  闪贷和闪换是区块链独有的概念。该图显示了两者之间的一些主要差异。让我们进一步说明要点。   

  

  闪贷必须用和你借的资产一样的资产偿还:如果你借了戴,你需要偿还戴。生息协议Aave对闪电贷款收取0.09%的费用。它至少需要三个操作:   

  

  在一个期货交易所借入一个指数,在另一个指数进行套利交易以获利(闪电掉期),这使得交易者可以在交易后期支付(或归还)资产之前,接收资产并在其他地方使用它们。就像在Uniswap上做的一样,闪电换汇没有固定的费用,而是一个换汇费用。相对于闪贷,闪兑可以算是一种“免费”的贷款,因为兑换费用是从交易订单中扣除的,我们不用另外付费。最后一个区别是:我们可以偿还我们交换的任何资产。如果我们通过闪电交换用ETH买了Dai,就可以用Dai或者ETH来偿还,这样可以进行更复杂的操作。   

  

  闪电交易所和闪电贷都采用了乐观转移,这是一种很有意思的技术,我们后面会介绍。   

  

  

3、闪电贷与智能合约

  

  

  关于闪电贷需要了解的另一个概念是以太坊交易的性质。所有以太坊交易都源于外部持有账户(EOA),这是一个由人操作的以太坊地址。以太坊交易可以从一个EOA转移到另一个,就像你支付给朋友一样。以太坊交易也可以从EOA转移到智能合约来执行代码。这个合约可以调用另一个合约,以此类推,直到你的交易耗尽汽油。   

  

  *注:如果你对以太坊的交易不熟悉,可以点击这里查看关于以太坊的账户、合约、交易类型的进一步介绍。   

  

  我们将在后面看到,闪贷在执行过程中需要进行多次函数调用,这对于EOA来说是不可能的。因此,我们将部署一个多步骤流程的智能合同,实现闪电贷款。我们发起的套利交易将从EOA到AAVE合约执行,我们只需提供已部署合约的地址。此外,由于闪电贷款交易的复杂性,交易成本可能会非常高,因此我们还需要提供ETH for EOA账户来支付交易的燃气成本。请记住,交易的价格取决于它需要多少计算能力。   

  

     

  

  

4、乐观转账 / Optimistic Transfer

  

  

  闪电贷和闪电汇都采用了被称为“乐观转让”的技术。这项令人惊叹的DeFi创新技术使用户能够进行无担保贷款或交换交易,只要用户在交易结束时还清贷款,交易就可以执行。为了更好地理解这个想法,让我们看一些代码。   

  

  这是Aave(V1)lending pool . sol合同的代码。我们来关注一下flashLoan函数的实现,尤其是以下方法:   

  

     

  

  在第877行,我们可以看到智能合同是“乐观的”   

地”将资金转移到用户的合约中 - 它并没有检查用户合约 的余额以确保用户有足够的资产偿还借款,就直接转账了。

  

这怎么可能?难道用户不会拿着这些代币逃跑?好吧,如果这是交易的结束,那么那将是一个严重 的问题。但是正如你所看到的,代码还没有结束。用户的合约是否保留这些代币取决于成功执行的 接下来的几行。

  

乐观转账后,在第881行,我们看到Aave合约然后使用代币的乐观余额(Optimistic Balance)和 用户已传入的任何参数调用用户的合约。这些参数将是用户需要将其传递给其合约的任何东西。 交易成功执行。现在,交易工作流程在Aave合约上暂时中止,并移至用户的合约继续执行,该合约 将执行其逻辑并有望成功交易。

  

在第884行,用户的合约代码已执行完成,工作流程现在返回到Aave合约,该合约使用require语句检查 用户合约返回的值。乐观精神到这里就结束了,现在我们必须看看用户合约是否已经执行了有利可图 的交易!如果是这样,Aave合约将能够扣除其费用。如果交易没有获利,则该require声明将失败, 这意味着整个交易都将失败,也意味着我们之前的乐观转账实际上并不会发生。

  

让我们看一下Uniswap如何实现其乐观转账。这是从他们的UniswapV2Pair.sol合约中获得的,特别 注意swap函数:

  

  

乐观转账发生在170-171行,就是这个_safeTransfer方法。Uniswap甚至给出了这种乐观转账的注释, 以便更好地识别它(顺便说一下,Uniswap提供有关其协议合约的大量文档和教程)。 下一行是Uniswap合约以乐观余额调用用户的合约。

  

再次,假设事务工作流在Uniswap合约上暂停执行,并携带乐观转移的代币到用户合约继续执行。 一旦执行完用户合约,交易工作流就会回到Uniswap合约。然后,Uniswap合约分配用户合约的新余额, 并尝试收取兑换手续费(第180-181行)。

  

如果用户合约未能通过代币获利,则require关于182的声明将失败,并且整个交易将回滚。这是 乐观转账的关键-100%取决于交易是否成功。如果不成功,则交易无效,并且将恢复为代币转让之前 的状态。但是,如果成功,则可以保持乐观转账,并且用户可以获利。

  

在本系列的第二部分中,我们将逐步构建一个套利机器人。可以在此处预览代码。

  

原文链接:http://blog.hubwiz.com/2021/01/23/flashloan-arbitrage-bot-tutorial/

相关文章