javascript - Using Uniswap SDK gives me this error: resolver or addr is not configured for ENS name - Stack Overflow

I am trying to swap ETH for DAI tokens using the UniSwap SDK and javascript, but am getting the followi

I am trying to swap ETH for DAI tokens using the UniSwap SDK and javascript, but am getting the following error on running the script.

(node:10096) UnhandledPromiseRejectionWarning: Error: resolver or addr is not configured for ENS name (argument="name", value="", code=INVALID_ARGUMENT, version=contracts/5.0.5)

I have narrowed the error down to the uniswap.swapExactETHForTokens function but I still don't know how to fix it.

Full code: (Private keys are hidden from the code for obvious reasons)

const { ChainId, Fetcher, WETH, Route, Trade, TokenAmount, TradeType, Percent } = require('@uniswap/sdk');
const ethers = require('ethers');

const chainId = ChainId.MAINNET;
const tokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F';

const init = async () => {
  const dai = await Fetcher.fetchTokenData(chainId, tokenAddress);
  const weth = WETH[chainId];
  const pair = await Fetcher.fetchPairData(dai, weth);
  const route = new Route([pair], weth);
  const trade = new Trade(route, new TokenAmount(weth, '1000000000000'), TradeType.EXACT_INPUT);
  
  const slippageTolerance = new Percent('50', '10000');
  const amountOutMin = trade.minimumAmountOut(slippageTolerance).raw;

  const path = [weth.address, dai.address];
  const to = '';
  const deadline = Math.floor(Date.now() / 1000) + 60 * 20;
  const value = trade.inputAmount.raw;

  const provider = ethers.getDefaultProvider('mainnet', {
    infura: '' 
  });

  const signer = new ethers.Wallet(PRIVATE_KEY);
  const account = signer.connect(provider);

  const uniswap = new ethers.Contract(
    '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',
    ['function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)'],
    account
  );
 
  const tx = await uniswap.swapExactETHForTokens(
    amountOutMin,
    path,
    to,
    deadline,
    { value, gasPrice: 20e9 }
  );
  console.log(`Transaction hash: ${tx.hash}`);

  const receipt = await tx.wait();
  console.log(`Transaction was mined in block ${receipt.blockNumber}`);
}

init();

I am trying to swap ETH for DAI tokens using the UniSwap SDK and javascript, but am getting the following error on running the script.

(node:10096) UnhandledPromiseRejectionWarning: Error: resolver or addr is not configured for ENS name (argument="name", value="", code=INVALID_ARGUMENT, version=contracts/5.0.5)

I have narrowed the error down to the uniswap.swapExactETHForTokens function but I still don't know how to fix it.

Full code: (Private keys are hidden from the code for obvious reasons)

const { ChainId, Fetcher, WETH, Route, Trade, TokenAmount, TradeType, Percent } = require('@uniswap/sdk');
const ethers = require('ethers');

const chainId = ChainId.MAINNET;
const tokenAddress = '0x6B175474E89094C44Da98b954EedeAC495271d0F';

const init = async () => {
  const dai = await Fetcher.fetchTokenData(chainId, tokenAddress);
  const weth = WETH[chainId];
  const pair = await Fetcher.fetchPairData(dai, weth);
  const route = new Route([pair], weth);
  const trade = new Trade(route, new TokenAmount(weth, '1000000000000'), TradeType.EXACT_INPUT);
  
  const slippageTolerance = new Percent('50', '10000');
  const amountOutMin = trade.minimumAmountOut(slippageTolerance).raw;

  const path = [weth.address, dai.address];
  const to = '';
  const deadline = Math.floor(Date.now() / 1000) + 60 * 20;
  const value = trade.inputAmount.raw;

  const provider = ethers.getDefaultProvider('mainnet', {
    infura: 'https://mainnet.infura.io/v3/ba14d1b3cfe5405088ee3c65ebd1d4' 
  });

  const signer = new ethers.Wallet(PRIVATE_KEY);
  const account = signer.connect(provider);

  const uniswap = new ethers.Contract(
    '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',
    ['function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)'],
    account
  );
 
  const tx = await uniswap.swapExactETHForTokens(
    amountOutMin,
    path,
    to,
    deadline,
    { value, gasPrice: 20e9 }
  );
  console.log(`Transaction hash: ${tx.hash}`);

  const receipt = await tx.wait();
  console.log(`Transaction was mined in block ${receipt.blockNumber}`);
}

init();
Share Improve this question asked Oct 31, 2020 at 22:51 Quicky AppQuicky App 1232 silver badges14 bronze badges 1
  • Shouldn't the provider code be: const provider = ethers.getDefaultProvider('mainnet', { infura: 'ba14d1b3cfe5405088ee3c65ebd1d4' }); docs.ethers.io/v5/api-keys/#api-keys--getDefaultProvider – Rodolfo Commented Jan 9, 2021 at 19:15
Add a ment  | 

3 Answers 3

Reset to default 3

I guess you can replace

const to = ''

by:

const to = process.env.ACCOUNT 

providing your account / wallet address to which the targetTokens shall be sent.

In my case, I had directly copy-pasted the router address from the uniswap documentation. So my variable looked something like this:

const routerAddress = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ";

Since there was a space at the end of the string, the ethers.js library confused it for ENS name instead of an address. So I corrected it to this:

const routerAddress = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";

Guess it was a silly mistake, but just watch out for it, in case nothing works!

For those who are facing an INVALID ARGUMENT error, here's what worked for my (using React):

  1. Import router02 :
import UniswapV2Router02 from '@uniswap/v2-periphery/build/UniswapV2Router02.json';
  1. hex function:
const toHex = (currencyAmount) => `0x${currencyAmount.raw.toString(16)}`;
const amountOutMin = toHex(trade.minimumAmountOut(slippageTolerance));
const value = toHex(trade.inputAmount);
  1. connect to blockchain
const provider = ethers.getDefaultProvider('mainnet', {
        infura: 'JUST_INFURA_NUMBER eg. xxxxxxxxxx'
      }); 
  1. Get contract and methods:
      const abi = UniswapV2Router02['abi'];
      const uniswapRouter = new ethers.Contract(
         '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',
        abi,
        account); //if this doesnt work, try using provider/signer instead of account
      console.log("uniswap contract: ", uniswapRouter);
      const tx = await uniswapRouter.swapExactETHForTokens(
        amountOutMin,
        path,
        to,
        deadline,
        {value, gasPrice: 20e9, gasLimit: 250000}
      );

Tutorial code: https://www.youtube./watch?v=0Im5iaYoz1Y

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745338495a4623217.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信