Untitled

 avatar
unknown
javascript
a year ago
2.3 kB
5
Indexable
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

/**
 * @title BasicNft
 * @dev ERC721 implementation for minting NFTs with token URIs.
 */
contract BasicNft is ERC721 {
    uint256 private s_tokenCounter;
    mapping(uint256 => string) private s_tokenIdToUri;

    /**
     * @dev Constructor initializes the ERC721 contract with a name and symbol.
     */
    constructor() ERC721("Ethereal Artifacts", "ETHA") {
        s_tokenCounter = 0;
    }

    /**
     * @notice Mints a new NFT.
     * @dev Mints a new NFT with a specified token URI to the recipient address.
     * @param recipient The address that will receive the minted NFT.
     * @param tokenUri The URI of the token metadata.
     */
    function mintNft(address recipient, string memory tokenUri) public {
        s_tokenIdToUri[s_tokenCounter] = tokenUri;
        _safeMint(recipient, s_tokenCounter);
        s_tokenCounter++;
    }

    /**
     * @notice Returns the token URI for a given token ID.
     * @dev Overrides the base ERC721 implementation to return the stored token URI.
     * @param tokenId The ID of the token.
     * @return The token URI.
     */
    function tokenURI(
        uint256 tokenId
    ) public view override returns (string memory) {
        return s_tokenIdToUri[tokenId];
    }
}


---- deploy-----

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

import {Script} from "forge-std/Script.sol";
import {BasicNft} from "../src/BasicNft.sol";

/**
 * @title DeployBasicNft
 * @dev A script to deploy a BasicNft contract.
 */
contract DeployBasicNft is Script {
    /**
     * @notice Executes the deployment of a BasicNft contract.
     * @dev Deploys a new instance of BasicNft and returns the deployed contract.
     * @return The deployed BasicNft contract instance.
     */
    function run() external returns (BasicNft) {
        vm.startBroadcast(); // Start broadcast execution
        BasicNft basicNft = new BasicNft(); // Deploy a new BasicNft contract
        vm.stopBroadcast(); // Stop broadcast execution
        return basicNft; // Return the deployed BasicNft contract instance
    }
}
Editor is loading...
Leave a Comment