블록체인 위에서 정해진 알고리즘대로 기능을 수행하는 프로그램
코인 및 토큰의 입출납을 통합할 수 있다
→ NFT 전송, 퍼블릭 민팅, 민팅 설정, 권한 관리, 개별 NFT 정보, 발행된 NFT 수, 민팅 설정값 등등 모든 것이 NFT 스마트 컨트랙트 안에 포함
프로젝트 기획 & 아트 준비 → 분산형 저장소에 소스 업로드 → 블록체인 상에 NFT 발행 준비 → Web3 민팅 페이지 오픈 → 사전 마케팅 및 커뮤니티 오픈 → 파트너십 체결 및 연계 혜택 발표 → 화이트리스트, OG 이벤트 → 아트 리빌
NFT 용어가 어려워서 찾아본 블로그
https://m.blog.naver.com/duswnswlstlf/222628473624
Ex) 1000개의 NFT로 구성된 컬렉션을 발행한다면!
➡️ 이미지파일 1000개, 속성 파일 1000개가 필요하다
→ 레이어 조합 생성, 컬렉션 규모: 대형(1000~10000단위), 커뮤니티나 유틸리티 형성
→ 한 장씩 드로잉, 컬렉션 규모: 소형(1~100단위), 작품성이 있다
→ 준비된 레이어를 랜덤하게 조합하여 생성된 이미지
✔️ 서로 다른 NFT 이미지를 대량으로 생성 가능하다!
✔️ 발생 비율 조정 가능함 → 레어 파츠 지정 가능 (소유욕, 경쟁심 유발)
https://github.com/LgcLazyboy/hashlips_art_engine
깃허브에서 코드 받아오고 vscode로 실행시키기!
터미널 콘솔에
npm intall canvas
➡️ canvas 라이브러리 설치
그래픽을 그릴 수 있게 해주는 api인 것 같다 canvas
엘리먼트를 통해 그래픽을 그려줌
https://developer.mozilla.org/ko/docs/Web/API/Canvas_API
npm install
입력
그런데 canvas 라이브러리 설치 후 npm install
명령어를 따로 또 써주는 이유는 모르겠다
수업 끝나기 전에... 물어볼 용기가 생기길... 잊지 말기... (잊었는데걍 중요한거 아니겟지 생각합시다)
npm run build
입력
입력 후 위와같이 터미널 콘솔 창에 image와 jason 파일이 잘 생성되었는지 확인해준다! (코드 디렉토리의 build/images
, build/jason
확인)
특성명#등장비율
로 파일명 설정한다
→ 30 + 1 + 15 + 15 + 20 + 4 = 100 (등장 비율)
➡️ 랜덤 조합 시 위 비율대로 등장한다는 것이다
(Doge Cup
이 진짜 레어템... 갑자기 겁나 갖고싶어짐 이런 심리를 자극하는거구나... 납득 완.)
➡️ 분모가 꼭 100일 필요는 없다
config.js
✔️ const EDITION_SIZE = 100;
→ 이미지 파일 총 100개 (생성할 소스의 개수)
✔️ const LAYERS_ORDER = [ ... ]
→ 삽입한 폴더명을 코드 디렉토리의 layers 폴더와 일치하게 삽입해주기! 순서를 바꿔서 빌드하면 이미지가 살짝 망가진다!
✔️ NAME_PREFIX
- 거래소에 표시될 NFT명
✔️ DESCRIPTION
- 거래소에 표시될부가 설명
✔️ BACKGROUND
- 배경색 랜덤 생성설정
거래소, 스코프, 응용 서비스등 실제 활용처 ➡️ 블록체인 내 NFT 조회 ➡️ 부가정보 파일 조회 ➡️ 이미지 파일 조회
분산형 파일 저장 프로토콜
( HTTP - 중앙 집중형)
✔️ P2P 통신으로 여러 노드에서 조각 수집
✔️ 일부 노드에 장애가 있어도 서비스 가능
✔️ 전송 비용 절감
✔️ 일반인들을 노드에 참여시킬 유인이필요하다
쓰는 이유? 공짜임 그래서 여기다 올림ㅋㅋㅋ
디렉토리 jason
파일 확인 → image
경로 확인 (나중에 바뀜)
나만 네이버 로그인 안돼... 깃헙 계정으로 하면 잘 됩니다... 후 자꾸 내꺼 안돼서 강사님의 어그로를 끄는거 너무 부끄러웠따...
처음엔 아무 파일도 없지만! API Keys 들어가서 new key 생성 후 Key 복사!
store.mjs
복사한 키를 const API_KEY
에 붙여넣어준다.
터미널 콘솔에
node store.mjs
명령어 입력
다시 페이지로 돌아와서 nft.storage의 Files에 업데이트가 되었는지 확인!
CID
하나의 CID 안에 100개의 사진이 묶인 것!
눌러보면 부여된 고유의 아이디를 확인할 수 있고 100개의 파일을 전부 확인할 수 있다
IPFS URL 복사 후
IPFS_BASE
에 URL 주소 붙여넣기!
터미널 콘솔에
node addr.mjs
실행
→ 각각의 jason 파일의 이미지 주소가 바뀜
API Key 다시 복사한 다음에 storejason.mjs
파일에 붙여넣어준다.
터미널 콘솔에
node storejson.mjs
실행
그리고 cmd창에 node storejason.mjs
입력해주면 IPFS에 json 파일 업로드 완.
NFT 부가정보 파일까지 업로드가 된 상태인지 확인~
메인넷과 테스트넷의 차이
작동은 똑같지만! (자원이 덜 할당돼서 조금 느리긴 함)
메인넷에 있는 토큰은 상장이 되고 테스트넷은 상장이 안 된다는게 가장 큰 차이점~ (현금 교환성이 없다!)
https://chrome.google.com/webstore/detail/kaikas/jblndlipeogpafnldhgmapagcccfchpi
여기서 확장프로그램 설치 후 지갑 만들기(계정 생성)
짠~
테스트넷으로 전환
https://baobab.wallet.klaytn.foundation/faucet 접속
지갑 주소 복붙하고 150 KLAY 받기~
https://ide.klaytn.com/
이 링크로 들어가서 컨트랙트를 작성할 것이다
https://github.com/LgcLazyboy/KIP17NFTContract/blob/main/KIP17NFTTokenFlatten.sol
미리 구현되어 있는 솔리디티 파일을 긁어와서
버전 맞춰준 다음 컴파일!
스마트 컨트랙트 실행을 위한 지갑 개인키 획득
지갑 연결하는 과정! 지갑 키 내보내고 (이것도 보안 중요) Account + 버튼을 눌러서 연결!
✔️ 연결 후에 죄측 5번쨰 Klaytn 접속하고 환경을 Baobab으로 바꿔준다
(실제 발행할 때에는 Cypress 메인넷으로 설정함)
✔️ Account 영역의 버튼클릭 후 지갑 개인 키 입력
✔️ Contract를 KIP17NFTToken으로 변경한다
➡️그리고 Deploy!
✔️ Name과 Symbol을 입력하고
transact
Name은 NFT 프로젝트 명, Symbol은 축약어 심볼 입력
이렇게 두 가지 함수만 건드릴 거임 (transaction)
setBaseURI
에 부가정보 파일의 IPFS URL 입력 후 transact
텍스트 마지막에 꼭 /
를 삽입해야 한다
오늘 reveal은 안 할거라서 여기까지 IPFS URL 복붙해준다 (/
붙여야함)
몇 가지 함수들
BlockNumber
: 아씨 머랬지... 까먹음 나중에 검색해서 적기 ㄱ... 는 실패... 뭘 얘기해주려고 하셨는지 까먹었다 ㅠ... 뭔가 통용되는 단위같았는데? 이래서 정리는 꼬박꼬박 안 밀리고 해야 함
newAntibotInterval
- 연속 시도 방지 지연 시간 (bot을 이용하여 불공정 민팅 방지)
newMintLimitPerBlock
- 한 번의 트랜잭션에 최대로 민팅할 수 있는 개수
newMintLimitPerSale
- 이번 민팅 기간동안 한 지갑이 최대로 민팅할 수 있는 개수
newMintStartBlockNumber
- 이번 민팅 기간이 시작되는 블록 높이
newMintIndexForSale
- 이번 민팅 기간에 최초로 민팅될 NFT 번호
newMaxSaleAmount
- 최대 NFT 개수 제한
newMintPrice
- 민팅 가격 (peb 단위, 10^-18 KLAY)
마지막으로 setPublicMintEnabled
를 true로 입력한 후 transact
!
(= 퍼블릭 민팅 설정값을 불가능에서 가능으로 변경하는 것)
민팅 사전 준비는 이렇게 하면 된다... 잘 따라해야 함
https://github.com/LgcLazyboy/nft-minting-site
코드를 받아서 vscode로 열어줍니다~
config.js
CONTRACT_ADDRESS
부분에 복사해둔 컨트랙트 주소를 입력 후 저장
https://www.netlify.com/ 접속한 후 회원가입을 한다!
'Drag and drop your site output folder here' 부분에 코드가 포함된 폴더를 드래그 앤 드랍 해준다! (난 이미 함)
✔️ 배포된 주소로 접속이 가능하다
✔️ Domain Settings에서 Edit site name으로 도메인 일부 변경 가능하다
지갑을 연결한 후 민팅 가능 여부를 확인해준다!
https://testnets.opensea.io/login?referrer=%2Faccount 접속 후 Kaikas 지갑을 연결한다
(실제로 발행할 때는 https://opensea.io/login?referrer=%2Faccount에서 발행함)
짠 나의 첫 번째 NFT!!
홈페이지에 들어가 지갑을 연동하면 민팅에 성공한 NFT 목록을 확인할 수 있다!
음... 세 번째 NFT는 실패한 것 같다... 왜 실패하죠... 8ㅅ8...
NFT 상세 페이지에 가면 Refresh metadata를 눌러서 부가 정보 연동을 신청할 수 있다.
프로필을 클릭하여 MyCollections로 들어가서
팔아봅시다! (사실 가짜 클레이톤이라 못 팔지만...)
가격을 설정한 다음 Complete listing을 눌러준다
완료!
리스팅에 잘 올라갔음을 확인할 수 있다!
이렇게 첫 NFT 발행을 해봤다~ 재밌는 실습 시간이었다! 아직 모르는 단어, 개념이 많지만... 귀여운 햄버거 세트 발행 완료!