AAVE v3 — POLYGON — TEST <UnrecognizedContract>.<unknown> При запуске скрипта для внесения токенов в AAVE с использованием форка основной сети полигонов

Я тестирую контракты v3 AAVE на разветвлении основной сети полигона, используя harhat локально, но когда я вызываю функцию de Supply(), я получаю эту ошибку:

      Error: Transaction reverted without a reason string
    at <UnrecognizedContract>.<unknown> (0x794a61358d6845594f94dc1db02a252b5b4814ad)
    at <UnrecognizedContract>.<unknown> (0x794a61358d6845594f94dc1db02a252b5b4814ad)
    at <UnrecognizedContract>.<unknown> (0x794a61358d6845594f94dc1db02a252b5b4814ad)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at HardhatNode._mineBlockWithPendingTxs (/home/daniel/daniel/dev/chainlink/flowmi/node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:1802:23)
    at HardhatNode.mineBlock (/home/daniel/daniel/dev/chainlink/flowmi/node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:491:16)
    at EthModule._sendTransactionAndReturnHash (/home/daniel/daniel/dev/chainlink/flowmi/node_modules/hardhat/src/internal/hardhat-network/provider/modules/eth.ts:1522:18)
    at HardhatNetworkProvider.request (/home/daniel/daniel/dev/chainlink/flowmi/node_modules/hardhat/src/internal/hardhat-network/provider/provider.ts:118:18)
    at EthersProviderWrapper.send (/home/daniel/daniel/dev/chainlink/flowmi/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)

Сценарий, который я пытаюсь запустить:

      const { getNamedAccounts, ethers } = require("hardhat");

async function main() {
  const { deployer } = await getNamedAccounts();

  // Mainnet pool adready given by the deployment
  // Deposit
  // Aprove to get Matic
  const AMOUNT = ethers.utils.parseEther("0.11");
  //const maticTokenAddress = "0x0000000000000000000000000000000000001010"; //mainnet
  const Pool = await getPool(deployer);
  const maticTokenAddress = "0xD65d229951E94a7138F47Bd9e0Faff42A7aCe0c6"; // testnet matic address
  await approveErc20(maticTokenAddress, Pool.address, AMOUNT, deployer);
  console.log("Depositing...");
  console.log("Address provided: ", Pool.address);
  await Pool.supply(maticTokenAddress, AMOUNT, deployer, 0);
  console.log("Deposited!");
}

async function getPool(account) {
  const PoolAddressesProvider = await ethers.getContractAt(
    "IPoolAddressesProvider",
    "0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb", // mainnet pool addresses provider
    //"0x5343b5bA672Ae99d627A1C87866b8E53F47Db2E6", // testnet pool addresses provider
    account
  );
  const PoolAddress = await PoolAddressesProvider.getPool();

  const Pool = await ethers.getContractAt("IPool", PoolAddress, account);
  return Pool;
}

async function approveErc20(
  erc20Address,
  spenderAddress,
  amountToSpend,
  account
) {
  const erc20Token = await ethers.getContractAt(
    "IERC20",
    erc20Address,
    account
  );
  const tx = await erc20Token.approve(spenderAddress, amountToSpend);
  await tx.wait(1);
  console.log("Approved!");
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Когда я спрашиваю, какой адрес был предоставлен, ответ:

Предоставленный адрес: 0x794a61358D6845594F94dc1DB02A252b5b4814aD

Согласно документации, это адрес пула основной сети полигона .Уведомление - это тот же адрес, который дает ошибка.

Буду очень признателен, если кто-то укажет на мою ошибку

Я пробовал разные комбинации адресов «mainnet» и «testnet» для maticToken и поставщика адресов пула.

1 ответ

Проблема заключалась в matic-адресе. Кажется, я неправильно понял документацию, думая, что тот факт, что matic совместим с ERC20, подразумевает, что его не нужно оборачивать для депозита.

Но скрипт работает только с адресом обернутого матика в основной сети.

Возможно, это проблема форка основной сети, не знаю, но я пошел дальше.

Другие вопросы по тегам