Я пишу смарт-контракт ERC721A и получаю предупреждение в Remix IDE. Есть код:
function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
uint256 numMintedSoFar = totalSupply();
uint256 tokenIdsIdx;
address currOwnershipAddr;
// Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
unchecked {
for (uint256 i; i < numMintedSoFar; i++) {
TokenOwnership memory ownership = _ownerships[i];
if (ownership.addr != address(0)) {
currOwnershipAddr = ownership.addr;
}
if (currOwnershipAddr == owner) {
if (tokenIdsIdx == index) {
return i;
}
tokenIdsIdx++;
}
}
}
// Execution should never reach this point.
assert(false);
}
Этот код из коллекции Square Bears ( https://etherscan.io/address/0x2b1037def2aa4ed427627903bdef9bdd27ae1ea3#code ). Я получил это из учебника YouTube. Я думаю, что код работает, но я продолжаю получать предупреждения.
Предупреждение. Безымянная возвращаемая переменная может оставаться неназначенной. Добавьте явный возврат со значением ко всем необратимым путям кода или назовите переменную. --> контракты/ERC721A.sol:103:94: | 103 | Функция tokenOfOwnerByIndex (владелец адреса, индекс uint256) возвращает переопределение общедоступного представления (uint256) { | ^^^^^^^
Я предполагаю, что мне нужно предоставить именованное возвращаемое значение или переменную, но код, похоже, возвращает повторяющееся значение (i). Не знаю, что делать.
Если мне нужно предоставить дополнительную информацию, пожалуйста, дайте мне знать.
Не могли бы вы объяснить больше о непроверенном коде. Этот код я взял из проверенного контракта на etherscan
Open Zepplin — твой друг Wizard.openzeppelin.com/#erc721
Потому что вы сказали компилятору, что вернете значение из функции, но не сделали этого.
Вы должны вернуть фиктивное значение, даже если вам это не нужно.
...
// Execution should never reach this point.
assert(false);
return tokenIdsIdx; // or simply return 0;
}
Спасибо. Предупреждающее сообщение при отсутствии.
Непроверенный код выглядит схематично, почему вы используете что-то готовое, например OpenZeppelins