闪电贷套利机器人
- 译文出自:登链翻译计划
- 译者:翻译小组
- 校对:Tiny 熊
- 本文永久链接:learnblockchain.cn/article…
在上一篇文章中我们介绍了我们机器人背后的三个主要概念:套利、基于合约的交易和乐观转账。
在这篇文章中,我们将介绍如何构建一个程序,以观察并执行有利可图的套利交易。
这是我们做的整体流程:
1. 程序(Bot
)正在观察Uniswap和Sushiswap上ETH-Dai配对的价格。
2. 当它发现一个有利可图的套利机会时,它就会向我们部署的合约发送一笔交易。
3. 在这笔交易中,合约将:
a) 使用闪电兑,乐观地从价格较低的资产池中借入资产。
b) 立即在较高的资产池出售资产。
c) 偿还闪电兑,将差额收入囊中。
让我们一起来实现这些吧!
我们的程序是在Node.js中使用ethers.js库编写的,并与Infura节点相连,套利智能合约是用Solidity 编写。
我们的后端部分是用Node写的,将使用Infura节点来观察Uniswap和Sushiswap合约上ETH和Dai的价格。 这里会依靠Infura节点来获取主网每个新区块产生的价格。 如果你没有免费的Infura账户,你可以在这里注册。
这是超级重要的!我们还需要存储我们的私钥来签署主网交易。 我们把所有的敏感信息都放在.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是因为它兼容 Typescript ,Typescript是项目的原始语言。 这对于Ethereum开发者来说是一个老问题了,但是关于ethers.js和web3,js的更多区别,请看这篇文章。
接下来,我们在第11行和第12行实例化Uniswap和Sushiswap合约。
// uni/sushiswap ABIs
const UniswapV2Pair = require('./abis/IUniswapV2Pair.json');
const UniswapV2Factory = require('./abis/...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!