๐งพ NFT ๋ฐํ๋ถํฐ OpenSea ๋ฑ๋ก๊น์ง: ์ ์ฒด ๊ณผ์ ์์ ์ ๋ฆฌ
์ด ๋ฌธ์๋ NFT ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ํ์ํ ์ด๋ฏธ์ง ์ค๋น → ๋ฉํ๋ฐ์ดํฐ ์์ฑ → Pinata ์ ๋ก๋ → Remix ๋ฐฐํฌ → OpenSea์ ๋ฑ๋ก ๋ฐ ํ๋งค๊น์ง์ ์ ์ฒด ๊ณผ์ ์ ํ๋์ฉ ์ค๋ช ํฉ๋๋ค. ์ค์ต ์์ ๋ ์ผ๋ฐ์ ์ธ ํํ๋ก ์์ฑ๋์ด ๋๊ตฌ๋ ์์ฉํ ์ ์์ต๋๋ค.
โ 1. NFT ์ด๋ฏธ์ง ์ค๋น
NFT๋ ์ด๋ฏธ์ง, ์์, ์ค๋์ค ๋ฑ ๋์งํธ ์์ฐ์ ๊ณ ์ ํ ํ ํฐ์ผ๋ก ๋ฐํํ๋ ๊ตฌ์กฐ์
๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ๋ .png ๋๋ .jpg ์ด๋ฏธ์ง์
๋๋ค.
- ๊ถ์ฅ ์ฌ์ด์ฆ: 500x500px ์ด์
- ๊ถ์ฅ ํฌ๊ธฐ: 1MB ์ดํ (OpenSea ๋ก๋ฉ ์๋ ๊ณ ๋ ค)
- ํ์ฅ์:
.png,.jpg,.gif,.svg๋ฑ
์ด๋ฏธ์ง๊ฐ ์ค๋น๋๋ฉด ๋ค์ ๋จ๊ณ์ธ ๋ฉํ๋ฐ์ดํฐ ์์ฑ์ ์งํํฉ๋๋ค.
โ 2. ๋ฉํ๋ฐ์ดํฐ(JSON) ์์ฑ
NFT์ ์ค๋ช
, ์์ฑ, ์ด๋ฏธ์ง ์ฃผ์๋ฅผ ๋ด๋ JSON ํ์ผ์
๋๋ค. ์ด JSON์ IPFS์ ์
๋ก๋๋์ด tokenURI๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
๐ก ์์ (metadata.json)
{
"name": "My First NFT",
"description": "A unique digital collectible.",
"image": "ipfs://<IPFS_IMAGE_CID>",
"attributes": [
{ "trait_type": "Background", "value": "Blue" },
{ "trait_type": "Rarity", "value": "Rare" }
]
}
โ 3. Pinata๋ก ์ด๋ฏธ์ง & ๋ฉํ๋ฐ์ดํฐ ์ ๋ก๋
๐ Pinata๋?
IPFS(InterPlanetary File System) ๊ธฐ๋ฐ์ ์ ๋ก๋ ํ๋ซํผ์ผ๋ก, NFT ์ด๋ฏธ์ง์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ ์ ์์ต๋๋ค.
- ์ฌ์ดํธ: https://app.pinata.cloud/
์ ๋ก๋ ์ ์ฐจ
- ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋ → CID ๋ณต์ฌ
- ๋ฉํ๋ฐ์ดํฐ์
imageํญ๋ชฉ์ipfs://<์ด๋ฏธ์ง_CID>์ฝ์ - ๋ฉํ๋ฐ์ดํฐ(JSON) ์ ๋ก๋ → ์ต์ข CID ํ๋ณด
- ์ต์ข
์ ์ผ๋ก
ipfs://<๋ฉํ๋ฐ์ดํฐ_CID>๋ฅผtokenURI์ ์ฌ์ฉ
โ 4. Remix๋ก ERC-721 NFT ์ค๋งํธ์ปจํธ๋ํธ ๋ฐฐํฌ
๐ฆ Remix ์ค๋น
- ์ฃผ์: https://remix.ethereum.org/
- ํ๊ฒฝ: MetaMask ์ฐ๊ฒฐ (์: Sepolia ํ ์คํธ๋ท)
- ํ ์คํธ ์ด๋ ํ๋ณด: https://sepoliafaucet.com/
๐ป ์ฝ๋ ์์ (ERC721.sol)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721URIStorage, Ownable {
uint256 public tokenCounter;
constructor() ERC721("MyNFT", "MNFT") {
tokenCounter = 0;
}
function mintNFT(address to, string memory tokenURI) public onlyOwner {
_safeMint(to, tokenCounter);
_setTokenURI(tokenCounter, tokenURI);
tokenCounter++;
}
}
โ Ownable์ ๊ผญ ์จ์ผ ํ๋์?
Ownable์onlyOwner์ ํ์ ํตํด ๋ฏผํ ๊ถํ์ ๋ฐฐํฌ์์๊ฒ๋ง ๋ถ์ฌํฉ๋๋ค.- ์ค๋ฌด์์ ๊ถํ ์ ์ด๊ฐ ํ์ํ๋ค๋ฉด ์ฌ์ฉ์ ์ถ์ฒํ์ง๋ง, ํ ์คํธ๋ ํผ๋ธ๋ฆญ ๋ฏผํ ์ ์ด์ด๋๋ ค๋ฉด ์ ๊ฑฐํด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
- ์ ๊ฑฐ ์
mintNFT()ํจ์ ์์onlyOwner๋ฅผ ์ญ์ ํ๊ณOwnableimport๋ ์ ๊ฑฐํ์ธ์.
โ 5. Remix์์ ๋ฐฐํฌ ๋ฐ NFT ๋ฏผํ
๋ฐฐํฌ ์ ์ฐจ
- Solidity ์ปดํ์ผ ํญ์์ ์ปดํ์ผ
- Deploy & Run ํญ → ํ๊ฒฝ:
Injected Provider - MetaMask - Deploy ํด๋ฆญ → MetaMask ์๋ช → ๋ฐฐํฌ ์๋ฃ
๋ฏผํ (NFT ๋ฐํ)
- ๋ฐฐํฌ๋ ์ปจํธ๋ํธ์์
mintNFT()ํจ์ ์ ๋ ฅ:to: NFT ๋ฐ์ ์ฃผ์ (๋ณธ์ธ ๋ฉํ๋ง์คํฌ ์ฃผ์)tokenURI:ipfs://<๋ฉํ๋ฐ์ดํฐ_CID>
- Transact ํด๋ฆญ → MetaMask ์๋ช
tokenId ํ์ธ
- ์ด ์์ ์์๋
tokenCounter๊ฐ ์๋ ์ฆ๊ฐํจ - ์ต์ด ๋ฏผํ
์ tokenId๋
0, ๋ค์์1,2... - Remix์์
tokenCounter()ํธ์ถ → ํ์ฌ ๊ฐ์ด 3์ด๋ฉด ๋ง์ง๋ง tokenId๋ 2
โ 6. OpenSea์์ NFT ํ์ธ ๋ฐ ํ๋งค
NFT ์๋ ์ธ์
OpenSea๋ ๋ธ๋ก์ฒด์ธ์ ์ค์บํ์ฌ ๋ฏผํ
๋ NFT๋ฅผ ์๋์ผ๋ก ์ธ์ํฉ๋๋ค.
๋ฐ๋ผ์ ๋ณ๋์ ๋ฑ๋ก ์์ด๋ tokenURI์ ์ ํจํ IPFS JSON๋ง ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด, ๋ช ๋ถ ๋ด๋ก OpenSea์์ ์กฐํ ๊ฐ๋ฅํด์ง๋๋ค.
ํ์ธ ๋งํฌ
https://testnets.opensea.io/assets/sepolia/<์ปจํธ๋ํธ์ฃผ์>/<ํ ํฐId>
์์:
https://testnets.opensea.io/assets/sepolia/0x123...abcd/0
์ด๋ฏธ์ง ์ ๋ฐ ๋ ๋์ฒ
- OpenSea ํ์ด์ง ์๋จ โ
Refresh metadataํด๋ฆญ - IPFS์์ JSON ๊ตฌ์กฐ ๋ฐ ์ด๋ฏธ์ง CID ๋ค์ ํ์ธ
ํ๋งค ๋ฑ๋ก
- OpenSea ์ ์ → ์ฐ์ธก ์๋จ [Profile] → NFT ์ ํ
- [Sell] ๋ฒํผ ํด๋ฆญ
- ๊ฐ๊ฒฉ ๋ฐ ํ๋งค ๊ธฐ๊ฐ ์ค์
- MetaMask ์๋ช → ํ๋งค ์๋ฃ
โ ๋ณด์ถฉ ๊ฐ๋ ์ ๋ฆฌ
| ๊ฐ๋ | ์ค๋ช |
|---|---|
| IPFS | InterPlanetary File System: ํ์ค์ ํ์ผ ์ ์ฅ์ |
| CID | Content Identifier: IPFS์ ๊ณ ์ ์ฃผ์ |
| tokenURI | NFT๊ฐ ์ฐธ์กฐํ๋ ๋ฉํ๋ฐ์ดํฐ์ URI (๋ณดํต ipfs:// ํ์) |
| ERC-721 | NFT๋ฅผ ์ํ ์ด๋๋ฆฌ์ ํ์ค ์ธํฐํ์ด์ค |
| OpenSea | NFT ๊ฑฐ๋/์กฐํ ํ๋ซํผ. ๋ฏผํ ๋ NFT ์๋ ์ธ์ |
๐ ๋ง๋ฌด๋ฆฌ ํ
- ํ ์คํธ๋ท์์ ์ถฉ๋ถํ ์คํ ํ ๋ฉ์ธ๋ท์ผ๋ก ํ์ฅํ์ธ์.
- IPFS ์ ๋ก๋ ์์ (์ด๋ฏธ์ง → JSON)๋ฅผ ๋ฐ๋์ ์ง์ผ์ผ ์ ์ ํ์๋ฉ๋๋ค.
- ๋ฏผํ
ํ tokenId๋ ์๋ ์ฆ๊ฐ ๋ฐฉ์์ ๋ฐ๋ผ ์์ธก ๊ฐ๋ฅํ๋ฏ๋ก
tokenCounter - 1๋ก ํ๋จํ๋ฉด ๋ฉ๋๋ค. - ํ๋งค๊น์ง ์งํํ๋ ค๋ฉด MetaMask ์ง๊ฐ๊ณผ OpenSea ๊ณ์ ์ฐ๋ ํ์์ ๋๋ค.
'Blockchain' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Remix IDE] Remix IDE โ GitHub ์ฐ๋ & ํด์ ์์ ๊ฐ์ด๋ (0) | 2025.05.15 |
|---|---|
| [Solidity] 9. ์ด๋ฒคํธ(Event)์ ๋ก๊น (0) | 2025.04.18 |
| [Solidity] 8. ์ด๋ ์ก์์ ๊ณผ `payable`, `transfer`, `send`, `call` (0) | 2025.04.18 |
| [Solidity] 7. ์ ๊ทผ ์ ์ด ํจํด๊ณผ `modifier` (0) | 2025.04.18 |
| [Solidity] 6.๋งคํ(Mapping)๊ณผ ๋ฐฐ์ด(Array) (0) | 2025.04.17 |
๋๊ธ