8

在Infura上建立闪电贷套利机器人 #2

 3 years ago
source link: https://learnblockchain.cn/article/2101
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

闪电贷套利机器人

在上一篇文章中我们介绍了我们机器人背后的三个主要概念:套利、基于合约的交易和乐观转账。

在这篇文章中,我们将介绍如何构建一个程序,以观察并执行有利可图的套利交易。

这是我们做的整体流程:

FJV7N3F.png!mobile

1.程序( Bot )正在观察Uniswap和Sushiswap上ETH-Dai配对的价格。

2.当它发现一个有利可图的套利机会时,它就会向我们部署的合约发送一笔交易。

3.在这笔交易中,合约将:

a) 使用闪电兑,乐观地从价格较低的资产池中借入资产。

b) 立即在较高的资产池出售资产。

c) 偿还闪电兑,将差额收入囊中。

让我们一起来实现这些吧!

我们的程序是在Node.js中使用ethers.js库编写的,并与Infura节点相连,套利智能合约是用Solidity 编写。

Infura

我们的后端部分是用Node写的,将使用Infura节点来观察Uniswap和Sushiswap合约上ETH和Dai的价格。 这里会依靠Infura节点来获取主网每个新区块产生的价格。 如果你没有免费的Infura账户,你可以在 这里 注册。

.env 配置

*这是超级重要的!*我们还需要存储我们的私钥来签署主网交易。 我们把所有的敏感信息都放在.env文件中( 查看在repo中的例子 )。 我们还输入了套利合约的地址和Infura主网节点的密钥。

PRIVATE_KEY=
FLASH_LOANER=
INFURA_KEY=

确保 PRIVATE_KEY 与部署 FLASH_LOANER 合约的相同。 另外,与 PRIVATE_KEY 相关联的以太坊账户需要有足够的资金来支付Gas费用,Gas费用可能很高。

如果你不确定我们为什么要这样做, 请阅读这篇优秀的文章,解释如何避免将你的私钥上传到Github 。正如文章所解释的,我们需要将敏感信息放在这个.env文件中,然后我们将其添加到 .gitignore文件中 , 像这样:

.env
yarn.lock
package-lock.json
node_modules

这样,当我们把信息推送到Github时,这个文件就不会被提交。 这是超级,超级重要的!

Ethers.js

我们使用Ethers.js是因为它兼容 Typescript ,Typescript是项目的原始语言。 这对于Ethereum开发者来说是一个老问题了,但是关于ethers.js和web3,js的更多区别, 请看这篇文章

合约实例

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

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

在上一篇文章中我们介绍了我们机器人背后的三个主要概念:套利、基于合约的交易和乐观转账。

在这篇文章中,我们将介绍如何构建一个程序,以观察并执行有利可图的套利交易。

这是我们做的整体流程:

FJV7N3F.png!mobile

1.程序( Bot )正在观察Uniswap和Sushiswap上ETH-Dai配对的价格。

2.当它发现一个有利可图的套利机会时,它就会向我们部署的合约发送一笔交易。

3.在这笔交易中,合约将:

a) 使用闪电兑,乐观地从价格较低的资产池中借入资产。

b) 立即在较高的资产池出售资产。

c) 偿还闪电兑,将差额收入囊中。

让我们一起来实现这些吧!

我们的程序是在Node.js中使用ethers.js库编写的,并与Infura节点相连,套利智能合约是用Solidity 编写。

Infura

我们的后端部分是用Node写的,将使用Infura节点来观察Uniswap和Sushiswap合约上ETH和Dai的价格。 这里会依靠Infura节点来获取主网每个新区块产生的价格。 如果你没有免费的Infura账户,你可以在 这里 注册。

.env 配置

这是超级重要的! 我们还需要存储我们的私钥来签署主网交易。 我们把所有的敏感信息都放在.env文件中( 查看在repo中的例子 )。 我们还输入了套利合约的地址和Infura主网节点的密钥。

PRIVATE_KEY=
FLASH_LOANER=
INFURA_KEY=

确保 PRIVATE_KEY 与部署 FLASH_LOANER 合约的相同。 另外,与 PRIVATE_KEY 相关联的以太坊账户需要有足够的资金来支付Gas费用,Gas费用可能很高。

如果你不确定我们为什么要这样做, 请阅读这篇优秀的文章,解释如何避免将你的私钥上传到Github 。正如文章所解释的,我们需要将敏感信息放在这个.env文件中,然后我们将其添加到 .gitignore文件中 , 像这样:

.env
yarn.lock
package-lock.json
node_modules

这样,当我们把信息推送到Github时,这个文件就不会被提交。 这是超级,超级重要的!

Ethers.js

我们使用Ethers.js是因为它兼容 Typescript ,Typescript是项目的原始语言。 这对于Ethereum开发者来说是一个老问题了,但是关于ethers.js和web3,js的更多区别, 请看这篇文章

合约实例

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

// uni/sushiswap ABIs
const UniswapV2Pair = require('./abis/IUniswapV2Pair.json');
const UniswapV2Factory = require('./abis/...
mm267vz.png!mobile

剩余50%的内容购买后可查看

  • 发表于 13分钟前
  • 阅读 ( 24 )
  • 学分 ( 82 )
  • 分类:DeFi

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK