BlockChain 수업 복습 - 2

박경현·2022년 11월 28일
0

BlockChain 수업을 들으면서 복습하는데
CodeState에서 NFT 무료 수업이 있고 이걸 하면 치킨을 준다해서 ㅋㅋ 바로 도전했다

강의 후기

일단 강의를 처음이 아닌 맨 마지막 수업을 들어서 ㅋㅋ
바로 NFT 만들어서 OpenSea에 올려버렸다

진짜 처음부터 끝까지 어떻게 NFT를 직접 만드는지 알려주는 영상이어서 매우 유용했다

무엇보다 IPFS를 사용해보고 싶었는데 이번 수업에서 사용해봐서 유익했다

NFT에 데이터 연동하기 이론

생각을 해보면 NFT는 이미지나 영상이 담겨있어야한다
그렇기에 이미지 정보를 어딘가에 저장해야하는데

이때 중앙집권식이 아닌 탈 중앙화 저장소인 IPFS를 사용한다!!

데이터를 저장하는 3가지 방식
온체인 -> 모든 메타데이터를 블록체인상에 저장 -> 비용 비효율
클라우드서비스 -> aws등 사용 중앙집중이라 문제
IPFS -> 분산프로토콜을 사용!

IPFS

핵심
우리가 Web에서 사용하는 HTTP 프로토콜은 데이터가 있는 위치를 기반으로 데이터를 보여주는데

IPFS의 경우 데이터의 고유한 해쉬값으로 데이터를 직접 찾아낸다!!

IPFS의 특징

속도 -> 고용량의 파일을 빠르게 전달

효율성 -> 중복을 알수있어서 효율적으로 사용가능

보안 -> 업로드된 파일 이름 영원히 기록! -> 원하는 만큼 데이터 지키고 버전 관리도 가능!

탈중앙화 - 노드들의 p2p 통신으로 되어있다, 대형서버의 차단이 문제인 http와 다름
기존 인터넷에 접속 힘들어도 ipfs 생태계유지 가능

정보검색

  • 서버는 현재 url로 검색 - > 위치를 알려줌! 해킹때 문제
  • 파일내용자체를 찾기 위해 고유 해쉬 코드를 사용 -> 찾는 파일에 직접 접근

정보 저장 및 보안

  • 파일 자체는 ipfs 데이터 개체에 저장
  • 각 데이터 개체는 256kb 임, 후속 ipfs에 연결하여 더 많이 저장가능
  • 프로젝트 해킹이나 제거 어려움

데이터 변경기록 추적

  • 변경은 못하지만 버전 관리 가능
  • 업로드 순서 추적하고 진행상황 알수있다
  • ipfs 파일 업로드시 해쉬코드 나옴 -> 이게 이름

pinata

pinata - NFT이미지를 배포할때 많이 사용되는 서비스

피나타에는 두가지를 올려아함
1. 이미지들 -> png로 올렸음
2. 이미지들의 메타데이터 -> json으로 만듬

이미지 동영상등을 ipfs로 업로드 하고 그 파일들을 불변의 상태로 바꿈

이 메타데이터의 주소를 NFT와 연결하기!

NFT에 데이터 연동하기 실습

  1. VSC에 내가 만들 NFT 이미지 올려놓기!
    1-1. pinata에 들어가서 img파일 업로드하기!!
    1-2. 업로드하면 CID를 주는데 이게 내 NFT의 고유 해쉬값이다!
  1. 이제는 메타데이터 만들기!
    2-1. 일단 metadata를 저장할 metadatas 폴더 만들기
    2-2. index.js를 만들어서 아래 코드 작성
const fs = require('fs);
const path = require('path')
function main() {
	// NFT 이미지폴더에 올린 개수 만큼 for문 설정하기
    for(let i =1; i<4; i++) {
    	//저장위치 및 Metadata 파일명설정
        // {프로젝트위치/myNFT/metadatas/codestates_{i}.json}
       // 여기서 파일명은 각자의 이미지 파일명으로 작성
       const metadatasDir = path.join(
       	__dirname,
        'metadatas',
        `codestates-${i}.json`
       )
       // IPFS img 폴더 링크 -> ipfs://{CID}
        const ipfsPath = 
            "ipfs://" + "{CID 적기};
        // ERC721 MetaData 규칙에 맞게 json 생성
        // name, description은 사용자 설정
        // image 는 업로드한 이미지 파일명으로 작성
        const metadata_json = {
            name: `codestates #${i}`,
            description: `codestates klaytn NFT #${i}`,
            image: `${ipfsPath}/codestates-${i}.png`
        }
        
         // MetaData파일 생성
        fs.writeFileSync(metadatasDir, JSON.stringify(metadata_json))
        
    }
}
main()

이제 터미널에서 node index.js 하면 메타데이터가 생성된다!!

  1. 이 metadatas폴더도 pinata에 올려줘야한다!

  2. 그 다음은 배포를 위해서 Remix Ethereum에 가서 klaytn을 플러그인으로 설치해 준다

  3. Kaikas등의 klaytn 지갑을 연동하고 클레이튼 환경을 injected Caver로 바꿔준다

  4. 적은 MYNFT.sol이라는 파일의 내용을 작성하고 배포한다!!

  5. 배포 후 mintNFT 함수에 ipfs://{CID}//이미지.json 을 적어주면 minting된다!

  6. OpenSea나 klayscope에서 확인할 수 있다

결과물

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글