*译文出自:登链翻译计划 [1]

*译者:翻译小组 [2]

*校对:Tiny 熊 [3]

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

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

这是我们做的整体流程:

在 Infura 上建立闪电贷套利机器人#2套利交易流程

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

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

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

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

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

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

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

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

Infura

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

.env 配置

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

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

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

    .env  
    yarn.lock  
    package-lock.json  
    node_modules  

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

Ethers.js

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

合约实例

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