主页 > imtoken苹果版官网 > 以太坊 DEX 的交易和套利:获取利率(第 1 部分)
以太坊 DEX 的交易和套利:获取利率(第 1 部分)
探索使用去中心化交易所 (DEX) 围绕以太坊构建的简单自动交易(套利)机器人的开发。
在本系列教程中,探索使用去中心化交易所 (DEX) 围绕以太坊构建简单的自动交易(套利)机器人。
本教程将使用 Javascript、Solidity 和 1inch dex 聚合器和闪贷。
由于题目较多,教程将分为以下几个部分:
本系列文章的目的是学习如何使用 DeFi 协议(如 DEX 和 ERC20 代币)构建去中心化应用程序,而不是以致富为目的。
概念介绍
什么是去中心化交易所(DEX)?
这是贯穿代码的救赎。 在 DEX 上,加密货币可以直接(通过合约)进行交易,无需中间人。 在 DEX 上,每笔交易通常都写入区块链。
注:本文将去中心化交易所简称为DEX
什么是 DEX 聚合器?
DEX 聚合器是一个平台,它通过在一篮子 DEX 中找到给定时间和数量的最优价格来执行交换交易。
什么是ERC20 Token(代币或证书)?
ERC20 是以太坊区块链上的代币标准。 这是一篇关于如何创建 ERC20 令牌的文章。
什么是套利?
套利,简单地说,就是在一个市场买入某种东西,同时在另一个市场以更高的价格卖出某种东西,从短期的价差中获利。
在本教程中,我们将专门提到套利:从一个 DEX 购买代币,然后在另一个 DEX 以更高的价格出售。
在区块链上,主要的早期套利机会主要来自去中心化交易所和中心化交易所之间的套利。
关于 1inch DEX 聚合器
1inch Exchange 是由 Anton Bukov 和 Sergej Kunz 开发的链上去中心化交易所聚合器,可以在一笔交易中在多个 DEX 之间拆分订单,并为用户提供最佳汇率。 1inch智能合约在Github上是开源的,大家可以看看如何使用智能合约寻找交易机会。 你仍然可以。
要在 1inch 上执行令牌交换,步骤很简单:
我们首先需要分析1inch交易所的智能合约。 有两个有趣的功能:
获取预计兑换多少代币
它采用交易参数并将返回您将获得的预期代币数量以及交易在 DEX 上的分布方式。
function getExpectedReturn(
IERC20 fromToken,
IERC20 toToken,
uint256 amount,
uint256 parts,
uint256 disableFlags
) public view
returns(
uint256 returnAmount,
uint256[] memory distribution
);
该函数接受 5 个参数:
该函数有 2 个返回值:
在编写支持的 DEX 时,分发的格式如下:
[
"Uniswap",
"Kyber",
"Bancor",
"Oasis",
"CurveCompound",
"CurveUsdt",
"CurveY",
"Binance",
"Synthetix",
"UniswapCompound",
"UniswapChai",
"UniswapAave"
]
请注意,如果您想交易 ETH 而不是 ERC20 代币,则参数 fromToken 地址使用:0x0 或 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeeeeEEeeEE
getExpectedReturn函数的返回值需要在swap()函数中用到,所以很重要。
进行交换
要在链上执行代币交换,我们将使用交换功能。 swap函数需要使用getExpectedReturn函数的返回值以太坊聚合交易,并消耗gas来执行。 如果要兑换ERC20代币,还需要提前授权1plsit合约(执行交易的兑换合约),才能处理要兑换的代币。
function swap(
IERC20 fromToken,
IERC20 toToken,
uint256 amount,
uint256 minReturn,
uint256[] memory distribution,
uint256 disableFlags
) public payable;
交换函数接受 6 个参数:
探索第一笔交易
现在,尝试使用您刚刚看到的函数以太坊聚合交易,通过 JavaScript 和智能合约获取第一笔自动交易的汇率。 如果您还没有与合同进行过交互,则可以阅读它。
为了方便大家,我们在Github上开源代码:
git clone git@github.com:jdourlens/ethereumdevio-dex-tutorial.git && cd ethereumdevio-dex-tutorial/part1
安装所需的依赖项 web3.js 和 bignumber.js:
npm install
执行代码:
node index.js
请注意,您可能需要根据自己的情况更改index.js文件的第15行:Ethereum provider address。
这是 index.js 脚本的内容:
var Web3 = require('web3');
const BigNumber = require('bignumber.js');
const oneSplitABI = require('./abis/onesplit.json');
const onesplitAddress = "0xC586BeF4a0992C495Cf22e1aeEE4E446CECDee0E"; // 1plit contract address on Main net
const fromToken = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'; // ETHEREUM
const fromTokenDecimals = 18;
const toToken = '0x6b175474e89094c44da98b954eedeac495271d0f'; // DAI Token
const toTokenDecimals = 18;
const amountToExchange = 1
const web3 = new Web3('http://127.0.0.1:8545');
const onesplitContract = new web3.eth.Contract(oneSplitABI, onesplitAddress);
const oneSplitDexes = [
"Uniswap",
"Kyber",
"Bancor",
"Oasis",
"CurveCompound",
"CurveUsdt",
"CurveY",
"Binance",
"Synthetix",
"UniswapCompound",
"UniswapChai",
"UniswapAave"
]
onesplitContract.methods.getExpectedReturn(fromToken, toToken, new BigNumber(amountToExchange).shiftedBy(fromTokenDecimals).toString(), 100, 0).call({ from: '0x9759A6Ac90977b93B58547b4A71c78317f391A28' }, function (error, result) {
if (error) {
console.log(error)
return;
}
console.log("Trade From: " + fromToken)
console.log("Trade To: " + toToken);
console.log("Trade Amount: " + amountToExchange);
console.log(new BigNumber(result.returnAmount).shiftedBy(-fromTokenDecimals).toString());
console.log("Using Dexes:");
for (let index = 0; index < result.distribution.length; index++) {
console.log(oneSplitDexes[index] + ": " + result.distribution[index] + "%");
}
});
注释如下:
第4行:加载合约ABI,第17行用于通过web3.js实例化1split合约。
第19行:DEX列表,方便第45~47行返回的分配数组描述分配百分比。
第35行:调用getExpectedReturn函数获取交易结果。
如果您不熟悉 .
执行脚本的结果应类似于以下内容:
在撰写本文时,DEX 聚合商可以用 1 个以太币购买 148.47 DAI(相比之下 Coinbase 上为 148,12)。 交易在两个交易所进行:Uniswap 96% 和 Bancor 4%。 1inch dex 聚合器非常适合在去中心化交易所找到最佳汇率。
请注意,此喂价不应用作您的智能合约的预言机,因为 DEX 可能会由于错误或用户操纵而提供非常低的价格。
能够轻松使用 DEX 聚合器是 DeFi 的一大特色。 由于大多数协议都是开放的,因此只需要了解它们就可以应用去中心化金融的强大功能。
在本文中,我们探讨了如何获取两个代币之间的汇率并获取进行兑换所需的所有信息,在下一篇文章中,我们将使用 JavaScript 中的 1inch DEX 聚合器执行兑换。
本翻译由 Cell Network 赞助。
本文参与登联社区写作激励计划,好文章好收益,欢迎正在阅读的你加入。