Вызов функции контракта солидности из эфиров с параметром uint16 работает только при числе 9 или меньше

У меня есть этот код в моем контракте на солидность:

константа uint256 maxNum = 10000;

      function mintNewFull(uint16 tokenId) public {
    require (0 <= tokenId && tokenId < maxNum;
    // do other stuff 
}

И я вызвал это с помощью этого кода в эфире, который работал:

      contractWithSigner.mintNewFull(3);

Но позже, когда я изменил его на попытку монетного двора с tokenID 11:

      contractWithSigner.mintNewFull(11);

Это не сработало. И я попробовал, и все числа меньше 10 работают, а числа больше - нет.

Это какая-то проблема с uint16 uint256? Если мою константу maxNum изменить на uint16, нельзя ли с помощью ethers вызвать функцию с параметром uint16? Я понятия не имею, как передать uimt16 вместо uint256, потому что я не мог найти, как объявить типы параметров в документах ethers. Кажется, что все просто используют числа или строки, что сбивает с толку (особенно когда мне позже придется передавать массив).

Пожалуйста, помогите, спасибо

1 ответ

Я понял!!! Оказывается, это было что-то в

      // do other stuff 

часть, где я вызывал целочисленное переполнение.

Ура, я так счастлива :):)

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