温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Flash Loan套利程序开发方法是什么

发布时间:2021-12-29 14:28:15 来源:亿速云 阅读:187 作者:iii 栏目:互联网科技

这篇文章主要介绍“Flash Loan套利程序开发方法是什么”,在日常操作中,相信很多人在Flash Loan套利程序开发方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flash Loan套利程序开发方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、DEX套利机器人使用的技术栈

教程中使用的技术栈如下:

  • Node.js:基础运行环境

  • Ethers.js:以太坊JS开发库

  • Infura:提供以太坊接入访问点

  • Solidity:套利智能合约

后端采用Node开发,使用Infura节点来跟踪Uniswap和Sushiswap合约中ETH和Dai的价格。我们利用Infura端点来获取主网上产出的每个新区块上的价格。

我们之所以使用Ethers.js,是因为它与Typescript(项目的原始语言)兼容。

2、使用.env保存套利机器人的敏感信息

这是非常重要的!由于需要存储私钥来签署主网交易,我们将所有敏感信息都放在.env文件中,此外,套利合约的地址和Infura主网端点的key也存入该文件:

PRIVATE_KEY=
FLASH_LOANER=
INFURA_KEY=

确保PRIVATE_KEY与部署FLASH_LOANER合约时使用的账号相同。另外,与PRIVATE_KEY对应的以太坊账号需要有足够的资金来支付GAS成本。

如果你不确定我们为什么这样做,请阅读这篇文章,它解释了如何避免将私钥上传到Github。如文章所述,我们需要将敏感信息放入此.env文件中,然后将其添加到.gitignore文件中,如下所示:

.env
yarn.lock
package-lock.json
node_modules

这样,当我们将信息推送到Github时,将不包括该文件在内。这一点超级、超级重要!

3、DEX合约实例化

接下来,我们在第11行和第12行上实例化Uniswap和Sushiswap合约:

// uni/sushiswap ABIs
const UniswapV2Pair = require('./abis/IUniswapV2Pair.json');
const UniswapV2Factory = require('./abis/IUniswapV2Factory.json');

Sushiswap本质上是Uniswap的一个分支,因此它们具有完全相同的合同ABI和可供我们使用的完全相同的功能…。这也是他们适合套利的另一个原因!

4、定期检查套利机会

第50行是套利机器人的关键所在。每隔一个区块时间,我们将要求Infura检查Uniswap和Sushiswap中ETH和Dai的价格。然后,我们将比较这些数字以获得“价差”或可能的利润空间。

provider.on('block', async (blockNumber) => {
    try {
      console.log(blockNumber);
      const sushiReserves = await sushiEthDai.getReserves();
      const uniswapReserves = await uniswapEthDai.getReserves();
[...]
  }
}

5、关于提前交易/Front Running

提前交易在中心化金融交易中很常见,通常利用数据速度获取微小的优势。我们不必为此担心太多,因为Uniswap和Sushiswap是去中心化交易所。它们的价格保持在链上,并且逐块变化。

即使我们想以某种方式在网络主体之前获取信息,唯一能采取行动的方法是将交易包括在下一个区块中,这对所有人都是可见的。我们需要支付高昂的GAS费来阻止抢先交易,但这大概是最大的收益。

6、避免无法获利的交易 - GAS估算

这样的DeFi交易可能非常昂贵。虽然套利活动可能获利,但利润空间更可能被GAS成本吞噬。我们的套利机器人程序的一项重要检查就是确保GAS成本不会吃掉利润。我们执行此操作,并将其包含在shouldSendTx中:

const shouldSendTx = shouldStartEth
  ? (gasCost / ETH_TRADE) < spread
  : (gasCost / (DAI_TRADE / priceUniswap)) < spread;

对于像ETH和Dai这样常见的交易对,并没有很多的获利机会。这些交易对的交易量很大,并且Uniswap和Sushiswap是比较受欢迎的交易所。从经济角度来讲,套利机会是市场效率低下的结果。如果有很多人在使用这些货币对,那么我们不太可能找到很多机会。因此需要找到更新的代币或交易所!

7、开发套利智能合约

点击这里查看套利合约的源代码。

基本上,合约是我们的套利中介。当程序检测到有利可图的机会时,它将向该合约发送资金和交易指令。我们的套利合约相对还是比较简单的。大多数代码来自Uniswap的示例代码。

合约的构造函数,可以传入一些硬编码的数据,例如Uniswap和Sushiswap的合约地址。合约还有一个函数uniswapV2Call,我们在其中以乐观方式从一个交易所借入代币,在另一个交易所执行交换,然后立即偿还第一笔借款:

pragma solidity =0.6.6;

import './UniswapV2Library.sol';
import './interfaces/IUniswapV2Router02.sol';
import './interfaces/IUniswapV2Pair.sol';
import './interfaces/IERC20.sol';

contract FlashLoaner {
  address immutable factory;
  uint constant deadline = 10 days;
  IUniswapV2Router02 immutable sushiRouter;

  constructor(address _factory, address _uniRouter, address _sushiRouter) public {
    factory = _factory;  
    sushiRouter = IUniswapV2Router02(_sushiRouter);
  }

  function uniswapV2Call(address _sender, uint _amount0, uint _amount1, bytes calldata _data) external {
      address[] memory path = new address[](2);
      uint amountToken = _amount0 == 0 ? _amount1 : _amount0;
      
      address token0 = IUniswapV2Pair(msg.sender).token0();
      address token1 = IUniswapV2Pair(msg.sender).token1();

      require(msg.sender == UniswapV2Library.pairFor(factory, token0, token1), "Unauthorized"); 
      require(_amount0 == 0 || _amount1 == 0);

      path[0] = _amount0 == 0 ? token1 : token0;
      path[1] = _amount0 == 0 ? token0 : token1;

      IERC20 token = IERC20(_amount0 == 0 ? token1 : token0);
      
      token.approve(address(sushiRouter), amountToken);

      // no need for require() check, if amount required is not sent sushiRouter will revert
      uint amountRequired = UniswapV2Library.getAmountsIn(factory, amountToken, path)[0];
      uint amountReceived = sushiRouter.swapExactTokensForTokens(amountToken, amountRequired, path, msg.sender, deadline)[1];

      // YEAHH PROFIT
      token.transfer(_sender, amountReceived - amountRequired);
    
  }
}

如果有任何利润,合约会将其发送到发起交易的地址(_sender)。

到此,关于“Flash Loan套利程序开发方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI