NFT burn токена или что не так?

Здравствуйте!
Не буду тянуть "резину" и перейду сразу к делу. Рассмотрев несколько разных Смарт-контрактах я был удивлен, что мало кто закладывает burn токенов или вовсе не работает это. "Из коробки" у меня тоже не получилось это сделать. Есть наипростейший Смарт-контракт:
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

contract SFFContract is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("SFF NFT", "SFFNFT") {}

    function mint(address recipient, string memory uri) public returns (uint256) {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(recipient, newItemId);
        _setTokenURI(newItemId, uri);

        return newItemId;
    }

    function burn(uint256 tokenId) public virtual {
        _burn(tokenId);
    }
}

Так вот, транзакция с сжиганием токена не проходит. Она ревертится и имеет следующую ошибку:
Warning! Error encountered during contract execution [stack underflow (1 <=> 8)]

Судя по ошибке, то где-то происходит переполнение, т.е. типа 0 - 1 вываливается на границу. Если бы я сам писал функционал, то другое дело, но я использую базовые функций, которые, по моим представлениям должны работать без всякой магии.

Кто сталкивался с подобным? Какое решение нашли?
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
@chtulhu
https://github.com/OpenZeppelin/openzeppelin-contr...

Вы используете _burn не проверяя есть ли этот токен вообще, как это сделано в расширении
https://github.com/OpenZeppelin/openzeppelin-contr...

Советую вам не мудрить в данном случае и воспользоваться визардом erc721 от того же openzeppelin
https://docs.openzeppelin.com/contracts/4.x/wizard (там есть опция burnable)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы