How to Develop an NFT Smart Contract (ERC 721) with Alchemy
Week 1, How To Develop an NFT Smart Contract (ERC721) with Alchemy
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/[email protected]/token/ERC721/ERC721.sol";
import "@openzeppelin/[email protected]/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/[email protected]/utils/Counters.sol";
// Alchemy๋ ์ด๋ฆ, ERC721 ์ดํ๋ ๋ชจ๋ ์์์ ๋ฐ์ ์ปจํธ๋ํธ๋ค
contract Alchemy is ERC721, ERC721Enumerable, ERC721URIStorage {
using Counters for Counters.Counter;
// private, public, internal, external ...
// private์ ์ค๋งํธ ์ปจํธ๋ํธ ๋ด์์๋ง ๋ณด์ด๊ณ , ๋ด๋ถ์์๋ง ์ํํ ์ ์๋ค.
Counters.Counter private _tokenIdCounter;
// MAX NUMBER OF COUNTERS
uint256 MAX_SUPPLY = 10000;
// ์์ฑ์, Alchemy๋ ์ด๋ฆ, ALCH๋ Symbol
constructor() ERC721("Alchemy", "ALCH") {}
// minting์ ์๋ก์ด ํ ํฐ ํน์ ์ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋ด๋ ํ์
// action of create a new entry or thing onto the blockchain
// nft๋ฅผ ์ ์กํ wallet์ ์ฃผ์, token uri๋ฅผ ๋ฐ๋๋ค
// public ๊ณผ onlyOwner ๋ฅผ ์ด์ฉํด์ ๋ชจ๋๊ฐ ๋ณด๊ณ ์ฌ์ฉํ ์ ์๋ค.
function safeMint(address to, string memory uri) public {
// ํ์ฌ ํ ํฐ id๋ฅผ ์นด์ดํฐ์์ ๊ฐ์ ธ์จ๋ค.
uint256 tokenId = _tokenIdCounter.current();
// MAX_SUPPLY์ ๋๋ฌํ๋์ง ๊ฒ์ฌ
require(tokenId <= MAX_SUPPLY, "I'm sorry all NFTs have been minted");
// ํ ํฐ id ์ฆ๊ฐ
_tokenIdCounter.increment();
// nft ๋ฏผํ
_safeMint(to, tokenId);
// token uri ์ธํ
_setTokenURI(tokenId, uri);
}
// The following functions are overrides required by Solidity.
// overribe ํ ๋ฉ์๋๋ค
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal override(ERC721, ERC721Enumerable) {
super._beforeTokenTransfer(from, to, tokenId);
}
// internal์ private๊ณผ ๋น์ทํ์ง๋ง, ์ปจํธ๋ํธ ๋ด๋ถ ํน์ ์์๋ ์ปจํธ๋ํธ์์ ํธ์ถํ ์ ์๋ค.
function _burn(uint256 tokenId)
internal
override(ERC721, ERC721URIStorage)
{
super._burn(tokenId);
}
// tokenId๋ฅผ ๋๊ธฐ๊ณ tokenUri๋ฅผ ๋ฆฌํด ๋ฐ๋๋ค.
// view๋ reading ์ญํ ์ ๋ด๋นํ๋ modifier
// writeํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ, gas๊ฐ ๋ฐ์ํ์ง ์๋๋ค !
function tokenURI(uint256 tokenId)
public
view
override(ERC721, ERC721URIStorage)
returns (string memory)
{
return super.tokenURI(tokenId);
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC721Enumerable)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}Last updated