ERC-721 Metadata

Extension of ERC-721 that adds the optional metadata functions from the ERC721 standard.

Usage

In order to make ERC-721 Metadata methods “external” so that other contracts can call them, you need to add the following code to your contract:

use openzeppelin_stylus::{
    token::erc721::{
        extensions::Erc721Metadata,
        Erc721,
    },
};

sol_storage! {
    #[entrypoint]
    struct Erc721Example {
        #[borrow]
        Erc721 erc721;
        #[borrow]
        Erc721Metadata metadata;
    }
}

#[public]
#[inherit(Erc721, Erc721Metadata)]
impl Erc721Example {
    // ...

    #[selector(name = "tokenURI")]
    pub fn token_uri(&self, token_id: U256) -> Result<String, Vec<u8>> {
        Ok(self.metadata.token_uri(token_id, &self.erc721)?)
    }
}

Additionally, you need to ensure proper initialization during contract deployment. Make sure to include the following code in your Solidity Constructor:

contract Erc721Example {
    // ...

    string private _name;
    string private _symbol;
    string private _baseUri;

    constructor(string memory name_, string memory symbol_, string memory baseUri_) {
        // ...
        _name = name_;
        _symbol = symbol_;
        _baseUri = baseUri_;
        // ...
    }
}