0

我正在尝试将 WETH 与之前在 Arbitrum Rinkeby 上创建的 Uniswap V3 池中的 MyToken 交换。但是,在调用 AlphaRouter.route 时,我收到以下错误消息

Failed to get subgraph pools from any providers

还缺少什么可以交换?我需要创建什么?

我的目标是将 WETH 交换为 MyToken 的给定输出。

我试图在完成我的池后简单地在 Uniswap V3 上进行交换。有任何想法吗?

const Web3 = require('web3');
const {
  ethers
} = require("ethers");
const HDWalletProvider = require('@truffle/hdwallet-provider');
const {
  Token,
  CurrencyAmount,
  TradeType,
  Percent
} = require("@uniswap/sdk-core");
const {
  AlphaRouter
} = require('@uniswap/smart-order-router');
const ABI_UNISWAP_POOL_V3 = require("@uniswap/v3-core/artifacts/contracts/interfaces/IUniswapV3Pool.sol/IUniswapV3Pool.json");
const fs = require('fs');
const JSBI = require('JSBI');

const API_ALCHEMY_ARBITRUM_RINKEBY = 'https://arb-rinkeby.g.alchemy.com/v2/<API KEY>';
const POOL_ADDRESS_MYTOKEN_WETH = '0xc69e7AE1073DD8184FcF6dBfc27ba97d1524716A';

const mnemonic = fs.readFileSync("./.mnemonics").toString().trim();
const hdprovider = new HDWalletProvider(mnemonic, API_ALCHEMY_ARBITRUM_RINKEBY);
const provider = new ethers.providers.Web3Provider(hdprovider);

const owner = hdprovider.addresses[0];

var web3 = new Web3(hdprovider);
const Contract = web3.eth.Contract;

const router = new AlphaRouter({
  chainId: 421611,
  provider: provider
});

async function main() {
  const MyPool = new Contract(ABI_UNISWAP_POOL_V3.abi, POOL_ADDRESS_MYTOKEN_WETH);

  const [factory, token0, token1, fee, tickSpacing, liquidity, maxLiquidityPerTick] =
  await Promise.all([MyPool.methods.factory().call(),
    MyPool.methods.token0().call(),
    MyPool.methods.token1().call(),
    MyPool.methods.fee().call(),
    MyPool.methods.tickSpacing().call(),
    MyPool.methods.liquidity().call(),
    MyPool.methods.maxLiquidityPerTick().call()
  ]);

  const tokenA = new Token(3, token0, 2, "MTK", "MyToken");
  const tokenB = new Token(3, token1, 18, "WETH", "Wrapped Ether");

  var amountOut = 2000;

  amountOut = CurrencyAmount.fromRawAmount(tokenA, JSBI.BigInt(amountOut.toString()));
  const slippageTolerance = new Percent(5, 100);
  const deadline = Date.now() + 15000;
  const route = await router.route(
    amountOut,
    tokenB,
    TradeType.EXACT_OUTPUT, {
      recipient: owner,
      slippageTolerance: slippageTolerance,
      deadline: deadline
    }
  );
  hdprovider.engine.stop();
}

main();

4

0 回答 0