Первый вызов функции прошел успешно, второй вызов завершается неудачей. (Прочность с каской)

#solidity #ethers.js #hardhat

#надежность #ethers.js #hardhat

Вопрос:

Я пытался сохранить 10000 16-байтовых строк (строка, которую я использовал, ‘abcdefghijklmnop’) в отображении солидности: отображение (uint256 => string)

  1. Я пробовал отправлять все 10000 строк за одну транзакцию, но она всегда превышает максимальный лимит газа и завершается неудачей.
  2. Разделил эти 10000 строк на равные 10 массивов и попытался выполнить 10 транзакций.. Первая транзакция с первыми 1000 строками выполняется успешно, но следующие транзакции завершаются неудачно из-за проблемы с газом

Код надежности:

 uint256 public totalGenomes;
mapping(uint256 => string) public genomesList;

function addGenome(string[] memory genome) public {
        for (uint256 index = totalGenomes; index < (1000   totalGenomes); index  ) {
            genomesList[index] = genome[index];
        }
        totalGenomes  = 1000;
    }
 

Скрипт Hardhat: есть 10 файлов genomes0.txt , genomes1.txt , genomes2.txt …. каждая из которых содержит 1000 строк ‘abcdefghijklmnop’

 for (i = 0; i < 10; i  ) {
        let filepath = `./img/genomes${i}.txt`;
        let genomes1000 = [];
        genomes1000 = fs.readFileSync(filepath).toString().split('n');
        console.log(filepath);
        await svgNFT.addGenome(genomes1000);
    }
 

Ошибка:

 Error: cannot estimate gas; transaction may fail or may require manual gas limit
 

Я также намерен минимизировать цену на газ для всего процесса.
Есть ли у кого-нибудь здесь предыдущий опыт работы с таким сценарием?


ОБНОВЛЕНИЕ: я справился с вышеуказанной проблемой.

Я сделал это, предложенное Miguel_LZPF на Hardhat discord:

 contract.function(param1, param2..., lastfunctionparam, {gasLimit: xxxxx})
 

и определите gasLimit и gasPrice вручную. А теперь я застрял в другой проблеме.

https://rinkeby.etherscan.io/address/0x11740C2367a0F0465d31b3612B3A5464dC7c8Afb

Внимание! Ошибка, возникшая во время выполнения контракта [выполнение отменено]

Тем не менее, первая транзакция в цикле оказывается успешной, остальные завершаются неудачей.

Комментарии:

1. Пожалуйста, отредактируйте вопрос и покажите код, создающий неудачную транзакцию.

2. Отредактировано и обновлено 🙂 пожалуйста, помогите, если это возможно