以太坊DEX的交易与套利:兑换(第2部分)

探索围绕以太坊建立使用去中心化交易所(DEX)开发一个简单的自动交易(套利)机器人。

> * 原文:https://ethereumdev.io/swap-tokens-with-1inch-exchange-in-javascript-dex-and-arbitrage-part-2/ 作者:https://ethereumdev.io/author/peter/ > * 译文出自:[登链翻译计划](https://github.com/lbc-team/Pioneer) > * 译者:[翻译小组](https://learnblockchain.cn/people/412) > * 校对:[Tiny 熊](https://learnblockchain.cn/people/15) > * 本文永久链接:[learnblockchain.cn/article…](https://learnblockchain.cn/article/1856) 对于本教程,将了解如何使用[1inch DEX 聚合器](https://1inch.exchange/)执行交易使用web3.js库的Javascript中的。通过本教程,你将了解如何在以太坊区块链上直接交换ERC20代币和以太币。 本文是第2部分([点击这里前往第1部分](https://learnblockchain.cn/article/1855)),在上一篇向你介绍了如何获得交易报价:获取你要出售的代币所获得的代币数量。本文,我们来看一看如何用Javascript执行交易。 ![img](https://img.learnblockchain.cn/pics/20201208112015.png) 要完成1inch的DEX聚合器上的兑换,我们需要三件事: - 获取当前汇率[如第1部分所示](https://learnblockchain.cn/article/1855). - 授权(Approve)我们要兑换的ERC20代币的数量,以便1inch智能合约可以访问你的资金。 - 通过使用在步骤1中获得的参数调用swap方法进行交易。 但是在开始之前,我们需要定义所有常量变量和一些帮助工具函数,使代码更简单: ## 项目设置 在本教程中,我们将[使用ganache-cli分叉(fork)当前的区块链状态](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/)并使用它来解锁已经拥有很多DAI代币的帐户。在我们的示例中,账号是 *0x78bc49be7bae5e0eec08780c86f0e8278b8b035b*。我们还将 gas 限制设置为非常高,因此在进行测试过程中不至于出现out-of-gas问题,而无需在每次交易前估算 gas 成本。启动分叉区块链的命令行是: ```bash ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 --unlock 0x78bc49be7bae5e0eec08780c86f0e8278b8b035b -l 8000000 ``` 在本教程中,我们将尝试使用1inch dex聚合器将1000 DAI兑换为ETH,首先,为了方便起见,让我们声明需要的所有变量,例如合约的地址,ABI。 ```javascript 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 erc20ABI = require('./abis/erc20.json'); const daiAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"; // DAI ERC20 contract address on Main net const fromAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"; const fromToken = daiAddress; const fromTokenDecimals = 18; const toToken = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'; // ETH const toTokenDecimals = 18; const amountToExchange = new BigNumber(1000); const web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:8545')); const onesplitContract = new web3.eth.Contract(oneSplitABI, onesplitAddress); const daiToken = new web3.eth.Contract(erc20ABI, fromToken); ``` 我们还定义了一些帮助工具函数,为了方便等待交易在区块链上打包: ```javascript function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function waitTransaction(txHash) { let tx = null; while (tx == null) { tx = await web3.eth.getTransactionReceipt(txHash); await sleep(2000); } console.log("Transaction " + txHash + " was mined."); return (tx.status); } ``` ## 获取汇率 现在我们已经准备好一切,先使用本系列教程第一部分中的代码来获得交易的预期汇率。我们只是将代码转换为便于阅读的函数。 函数*getQuote*返回一个包含所有参数的对象,以使用[第一部分中详细介绍的兑换函数](https://learnblockchain.cn/article/1855)。 ```javascript async func...

  • 原文:https://ethereumdev.io/swap-tokens-with-1inch-exchange-in-javascript-dex-and-arbitrage-part-2/ 作者:https://ethereumdev.io/author/peter/
  • 译文出自:登链翻译计划
  • 译者:翻译小组
  • 校对:Tiny 熊
  • 本文永久链接:learnblockchain.cn/article…

对于本教程,将了解如何使用1inch DEX 聚合器执行交易使用web3.js库的Javascript中的。通过本教程,你将了解如何在以太坊区块链上直接交换ERC20代币和以太币。

本文是第2部分(点击这里前往第1部分),在上一篇向你介绍了如何获得交易报价:获取你要出售的代币所获得的代币数量。本文,我们来看一看如何用Javascript执行交易。

要完成1inch的DEX聚合器上的兑换,我们需要三件事:

  • 获取当前汇率如第1部分所示.
  • 授权(Approve)我们要兑换的ERC20代币的数量,以便1inch智能合约可以访问你的资金。
  • 通过使用在步骤1中获得的参数调用swap方法进行交易。

但是在开始之前,我们需要定义所有常量变量和一些帮助工具函数,使代码更简单:

项目设置

在本教程中,我们将使用ganache-cli分叉(fork)当前的区块链状态并使用它来解锁已经拥有很多DAI代币的帐户。在我们的示例中,账号是 0x78bc49be7bae5e0eec08780c86f0e8278b8b035b。我们还将 gas 限制设置为非常高,因此在进行测试过程中不至于出现out-of-gas问题,而无需在每次交易前估算 gas 成本。启动分叉区块链的命令行是:

ganache-cli  -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 --unlock 0x78bc49be7bae5e0eec08780c86f0e8278b8b035b -l 8000000

在本教程中,我们将尝试使用1inch dex聚合器将1000 DAI兑换为ETH,首先,为了方便起见,让我们声明需要的所有变量,例如合约的地址,ABI。

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 erc20ABI = require('./abis/erc20.json');
const daiAddress = "0x6b175474e89094c44da98b954eedeac495271d0f"; // DAI ERC20 contract address on Main net

const fromAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81";

const fromToken = daiAddress;
const fromTokenDecimals = 18;

const toToken = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'; // ETH
const toTokenDecimals = 18;

const amountToExchange = new BigNumber(1000);

const web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:8545'));

const onesplitContract = new web3.eth.Contract(oneSplitABI, onesplitAddress);
const daiToken = new web3.eth.Contract(erc20ABI, fromToken);

我们还定义了一些帮助工具函数,为了方便等待交易在区块链上打包:

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function waitTransaction(txHash) {
    let tx = null;
    while (tx == null) {
        tx = await web3.eth.getTransactionReceipt(txHash);
        await sleep(2000);
    }
    console.log("Transaction " + txHash + " was mined.");
    return (tx.status);
}

获取汇率

现在我们已经准备好一切,先使用本系列教程第一部分中的代码来获得交易的预期汇率。我们只是将代码转换为便于阅读的函数。

函数getQuote返回一个包含所有参数的对象,以使用第一部分中详细介绍的兑换函数。


async func...

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

  • 单篇购买 5学分

区块链技术网。

  • 发表于 2020-12-08 14:55
  • 阅读 ( 2405 )
  • 学分 ( 116 )
  • 分类:DeFi

评论