반응형
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
contract MintAnimalToken is ERC721Enumerable {
constructor() ERC721("h662Animals", "HAS"){}
mapping(uint256 => uint256) public animalTypes;
// animalTokenID 입력하면 animalType 이 나오게 맵핑
function mintAnimalToken() public {
uint256 animalTokenId = totalSupply() + 1;
//nft 에 유일한 값을 부여
//랜덤한 값을 생성
//Keccak 알고리즘을 사용하기 위해 byte 값이 필요
//abi.encodePacked 에 세가지 수를 사용하여 겹치지 않는 수 생성
//5로 나눈 나머지에 1을 더하여 animal type 이 1~5 사이의 값이 생성되도록 함
uint256 animalType = uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, animalTokenId))) % 5 + 1;
animalTypes[animalTokenId] = animalType;
//mapping
_mint(msg.sender, animalTokenId); // 명령어를 실행하는 사람, 토큰 ID 를 민팅
}
}
알고리즘 요약
- Keccak 알고리즘을 통해 1~5 랜덤값 생성
- 맵핑을 통한 ID 별로 types 결정
디버그
- 컨트랙트이름과 함수이름을 동일하게 짓는 실수는 하지말자
반응형
'BlockChain > Solidity' 카테고리의 다른 글
[DP/NFT] 4. 리액트 세팅 (0) | 2022.09.05 |
---|---|
[DP/NFT] 3. SaleAnimalToken 작성 (0) | 2022.09.05 |
[DP/NFT] 1. Install Solidity & Metamask (0) | 2022.08.25 |