MintAnimalToken.js
// 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;
// 앞에있는 uint256 = animalTokenId
// 뒤에있는 uint256 = animalTypes
// 즉, animalTokenId를 입력하면 animalTypes이 나오는 함수
function mintAnimalToken() public {
uint256 animalTokenId = totalSupply() + 1; //지금까지 민팅(발행)된 nft의 양
// nft 5개를 생성하기
uint256 animalType = uint256(
// 솔리디티 내장 해시함수 : 충돌할 확률이 가장 적은 난수를 생성해줌
keccak256(
// keccak256을 사용하기위한 바이트값
abi.encodePacked(
// 언제 실행했는지, 누가 실행했는지, 무엇을 할건지
block.timestamp, msg.sender, animalTokenId
)
)
) % 5 + 1; // 1-5번까지 랜덤하게 넣기위한 함수
animalTypes[animalTokenId] = animalType;
_mint(msg.sender, animalTokenId);
//animalTokenId = nft의 유일한 값
}
}
코드를 작성했으면 Deploy(전개하다) 버튼을 클릭해 새로 개체를 생성한다.
mintAnimalTo...를 클릭해 민팅을 해준다.
animalType에 1부터 5까지 랜덤으로 숫자를 부여하는 코드를 작성했었다.
왼쪽 이미지는 민팅을 한번 한 후에 animaTypes에 1을 입력한 후 call을 클릭한 결과다.
숫자는 0이 부여 되었다.
민팅 실행후 순서대로 숫자를 1,2,3,4,5를 입력하면 계속해서 랜덤으로 바뀌는 값을 볼 수 있다.
(가끔 민팅한 숫자랑 animalTypes에 넣은 숫자가 맞지 않으면 숫자가 고정되어서 안 움직인다. 왜지)
'프로그래밍 > solidity' 카테고리의 다른 글
[220517] 리액트와 메타마스크 연결하기 (0) | 2022.05.17 |
---|---|
[220517] frontend 설치 / chakra-ui (0) | 2022.05.17 |
[220516] nft 구매기능 만들기 (0) | 2022.05.16 |
[220516] nft 판매등록하기 / 오픈제플린, 솔리디티 (0) | 2022.05.16 |
[220516] Remix와 연결해서 민팅하는 방법 / 오픈제플린, 솔리디티 (0) | 2022.05.16 |
댓글