Uniswap JS SDK и Ethers js пытаются поменять eth на токены
Я пытаюсь поменять местами токены с помощью js-скрипта, который можно использовать для обмена Ethereum на любой токен. Проблема в том, что некоторые из токенов, которые я пытаюсь заменить, будут выдавать ошибку «UnhandledPromiseRejectionWarning: InsfficientInputAmountError». Однако, если я попытаюсь заменить другой токен, он будет работать должным образом. Я знаю, что токен, который вызывает ошибку, совместим с uniswap, так как я купил его через их веб-сайт и не получил ошибки.
const {ChainId, Fetcher, WETH, Route, Trade, TokenAmount, TradeType, Percent, Token} = require('@uniswap/sdk');
const {ethers} = require("ethers");
let Web3 = require('web3');
let web3 = new Web3(new Web3.providers.HttpProvider("INFURA_KEY"));
function toHex(Amount) {
return `0x${Amount.raw.toString(16)}`;
}
const chainId = ChainId.MAINNET;
const tokenAddress = '0x094F00Cb5e31Ab6164E3CAcb654e8D6c2b3b471C';
const provider = new ethers.providers.EtherscanProvider('homestead', 'ETHERSCAN_KEYY');
const init = async () => {
const gas = await web3.eth.getGasPrice();
const token = await Fetcher.fetchTokenData(chainId, tokenAddress, provider);
const weth = WETH[token.chainId];
const pair = await Fetcher.fetchPairData(token, weth, provider);
const amountIn = '10000000000000000';
const route = new Route([pair], weth);
const trade = new Trade(route, new TokenAmount(weth, amountIn), TradeType.EXACT_INPUT);
const slippageTolerance = new Percent('1', '100');
const amountOutMin = toHex(trade.minimumAmountOut(slippageTolerance));
const path = [weth.address, token.address];
const to = 'MY_KEY';
const deadline = Math.floor(Date.now()/1000) + 60*20;
const value = toHex(trade.inputAmount);
const signer = new ethers.Wallet('MY_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: gas}
);
console.log(tx);
}
init();
Действующий адрес токена: 0x6b175474e89094c44da98b954eedeac495271d0f Нерабочий адрес: 0x094F00Cb5e31Ab6164E3CAcb654e8D6c2b3b471C
Проблема, по-видимому, заключается в определении константной торговли, поскольку сценарий не работает дальше этого. Я просмотрел и не знаю ни одной причины, по которой большинство токенов, похоже, работают, а некоторые - нет (даже если они работают на веб-сайте uniswap). Я новичок в JS и работаю с ethers / uniswap, поэтому я буду благодарен за любое понимание.
1 ответ
Вы должны создать пул для этого токена на uniswap. Я также столкнулся с той же проблемой обмена Eth на usdc в сети Goerli. Сначала добавьте токен в пул, а затем создайте пул с эфиром.