πͺ 2023. 04. 24. Monday_ μ‘Έλ¦½κ³ μ. μ‘Έλ €μ.μ€λμ.κ·Έλμ.π€― πͺ
β β β
μλ νμΈμ!π
λͺ¨λ ν¨κ» 4κ°μ λμ νλμ λ©μ§ νλ‘μ νΈλ₯Ό μμ±νλ κ·Έλ κΉμ§ νμ΄ν ν©μλ€ !
* μ΄ κ³³μμλ λΉμΌμ λ°°μ΄ λ΄μ©μ 볡μ΅νλ μ©λλ‘ κΈμ μμ±νλ €κ³ ν©λλ€.
* μ€λ μ΄ μκ°μλ NFT λλ μ μμ λ§μ§λ§ λ¨κ³μΈ DEPLOY κ³Όμ μ κ΄ν λ΄μ©μ 볡μ΅ν΄ λ³΄κ² μ΅λλ€.
β β β β
β β
β β β
β β β
βοΈ 01. RE- build : μ΄λ―Έμ§ μ μ‘°μ
βͺοΈ 'npm run build' λͺ
λ Ήμ΄λ‘ μμ±λ μ΄λ―Έμ§ ν΄λ μ
λ‘λ νκΈ°
βͺοΈ Pinata λ¬΄λ£ λ²μ μ μ¬μ©νκ³ μμμΌλ‘,
=> config νμΌμμ λλ€ μμ± κ°μ μ‘°μ νκ³ λ€μ build νκΈ°
=> λ§μ½μ νμΌμ μμ νλ λ°©λ²μΌλ‘ μ§ννλ€λ©΄
!μ λ! _metadata.json νμΌμ μ κ±°νλ©΄ μλλ€!
β β β
βοΈ 02. Pinataμ μ΄λ―Έμ§ ν΄λ μ
λ‘λ
βͺοΈ pinata μ μ ( https://www.pinata.cloud/ )
βͺοΈ build/images ν΄λ μ
λ‘λ νκΈ°
β β β
β β β
βοΈ 03. 쿼리 μ€νΈλ§ μ κΉμ§ μ£Όμ 볡μ¬νκΈ°
β β β
βοΈ 04. src/config.js νμΌ μμ
βͺοΈ pinata μ μ ( https://www.pinata.cloud/ )
βͺοΈ build/images ν΄λ μ
λ‘λ νκΈ°
// General metadata for Ethereum
const namePrefix = "RE";
const description = "RE-ν΄κ³¨";
const baseUri = "https://gateway.pinata.cloud/ipfs~~~~~";
β β β
βοΈ 05. config.js λ³κ²½ λ΄μ© λ€λ₯Έ json νμΌμ μ μ©
βͺοΈ λ€μ λͺ
λ Ήμ΄ μ
λ ₯μ
: κ°κ°μ μ΄λ―Έμ§μ κ΄ν json νμΌ λͺ¨λ
config.jsμμ μμ ν λ΄μ©μ΄ λ°μλκ²μ νν μ μλ€.
πΈ npm run update_info
β β β
β β β
β β β
βοΈ 01. Pinataμ json ν΄λ μ
λ‘λ
βοΈ 02. μ
λ‘λκ° μ λκ²μ νμΈν μ μλ€.
β β β β β β
β β β
β β β
βοΈ 01. MintNft_2.sol νμΌ μμ±
βͺοΈ REMIX μ μ ( https://remix.ethereum.org/ )
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
contract MintNft is ERC721Enumerable {
string public metadataUri;
uint public totalNft;
constructor(
string memory _name,
string memory _symbol,
string memory _metadataUri,
uint _totalNft
) ERC721(_name, _symbol) {
metadataUri = _metadataUri;
totalNft = _totalNft;
}
function mintNft() public {
require(totalNft > totalSupply(), "No more mint.");
uint tokenId = totalSupply() + 1;
_mint(msg.sender, tokenId);
}
function batchMint(uint _amount) public {
for(uint i = 0; i < _amount; i++) {
mintNft();
}
}
function tokenURI(uint _tokenId) public override view returns(string memory) {
return string(abi.encodePacked(metadataUri, '/', Strings.toString(_tokenId), '.json'));
}
function burnNFT(uint _tokenId) public {
require(msg.sender == ownerOf(_tokenId), "Caller is not token owner.");
_burn(_tokenId);
}
}
β β
βοΈ 02. Remix_ Deploy
βͺοΈ _NAME, _SYMBOL μμ±
βͺοΈ _METADATAURLμ Pinataμμ μμ±λ json μ£Όμ κ°λ§ λ£μ΄μ£Όλ©΄ λλ€.
βͺοΈ _TOTALNFT : λ΄κ° μμ±ν μ΄λ―Έμ§ κ°μ μ μ΄μ£ΌκΈ°
βͺοΈ transaction ν΄λ¦ ! == μ§κ°μ°κ²°λλ©΄μ NFT deployλ !
β β β
μμ¦ λ μ¨ μ λ§μ λ§ μ’μλ°~!~!~~~π
μ΄λ² μ£Ό μ£Όλ§μλ~!~ μλ° λλκ³ λ±μ°μ΄λ κ°μΌκ² λ΅β¨β¨β¨
μ λ° νλ‘μ νΈλ νλ‘μ νΈλ νλ‘μ νΈ μ€λ₯λμ μ£Όλ§μ λͺ» λκ°λ μΌμ΄ μκΈΈπ§