Смарт-контракт компилируется нормально, но затем кричит о «большом количестве».

#solidity

Вопрос:

Это компилируется нормально, но при вызове «дома» я получаю следующую ошибку:

Ошибка: недопустимая строка BigNumber (аргумент=»значение», значение=»», код=INVALID_ARGUMENT, версия=bignumber/5.4.1)

кто-нибудь знает, почему? Спасибо!

 pragma solidity ^0.8.4;

contract Test {
     uint[] public house = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

    
    function sugMa() public view returns (uint) {
        uint even = 0;
        for (uint i = 0; i <= house.length; i  ) {
            if (i % 2 == 0) {
                even  = 1;
            }
        }
        return even;
    
    }

}
 

Ответ №1:

Ошибка возникает, когда вы вызываете house() автоматически сгенерированную функцию получения без указания параметра.

Вызов без параметра

Это house одномерный массив, поэтому вам нужно выбрать, к какому индексу вы хотите получить доступ.

Вызов с параметром


В настоящее время Solidity (версия 0.8) не поддерживает вызов всего массива из автоматически сгенерированной функции получения. Но — вы можете создать свою собственную функцию, которая возвращает весь массив.

 function getHouse() external view returns (uint[] memory) {
    return house;
}
 

Затем он возвращается

 uint256[]: 1,2,3,4,5,6,7,8,9,10