NFT 정리

원성희·2022년 5월 13일
0

목표

  1. NFT란 무엇인가?
  2. NFT의 특징 및 장단점
  3. 어떠한 서비스들이 있는지 알아본다.
  4. 향후 전망
  5. 실제 블록체인상에서 deploy 되는 프로세스는? ( Minting )

NFT란 무엇일까?

최근 blockchain 업계에서 가장 이슈가 되고 있는 기술은 단연 "NFT"와 "메타버스"이다.
NFT는 대체 불가능한 토큰(Non-fungible token) 블록체인 기술을 활용하여 디지털 컨텐츠 혹은 자산의 소유주를 증명하는 토큰이라고 볼 수 있다. 예를들면, 어떤 작가의 "디지털 이미지" 등을 내가 샀다고 보는 불멸의 영수증이라고 보면 된다.
예전에 이더리움 토큰을 발행하다 보면 요구사항에 Mint와 Burn 기능이 있다. 각각 코인을 추가발행하고 소각하는 기능인데, 자산을 NFT로 만드는 것을 Minting 이라고 표현하는데, 어떤 차이가 있는지 매우 궁금하다.

NFT 특징

  • 블록체인의 특성 : 복제 불가능하고 고유성 및 희소성을 증명, 안전하다.
  • 스마트 컨트랙트를 사용하기 때문에 BTC에서는 구현 불가능하다.

NFT 장단점

장점

  • 희소성 - 위 특징과 같은 내용이다. 디지털 파일임에도 불구하고 회소성을 줄 수 있다.
  • 비용절감 - 기존 예술작품은 가치 인정 및 유지하는데 많은 비용이 든다. NFT는 간단히 토큰 생산을 통해 이런 문제들을 해결했다.
  • 접근성 - 전문업체나 기관을 통해 거래되던 것들이 토큰 거래를 통해 제약이 사라졌다.

단점

  • 사실 NFT는 증명서를 가지고 있지만, 여전히 디지털데이터들은 복사가 가능하다. 데이터라는 것은 원본과 사본의 차이가 없기 때문에 증명하기가 쉽지 않다. ( 소유권만 증명한다. )
  • 양자컴퓨팅의 발전으로 블록체인 자체가 해킹될 경우
  • 성숙하지 않은 시장 ( 블록체인도 마찬가지 )
  • 사실 블록자체도 노드 유지나 체굴등의 비용이 어마무시하다고 본다. ( 탄소발자국 )
  • 붐이 되어 많은 NFT들이 생성되고 있으나 예술적 가치보다는 투기에 본질이 있어 작품에 대한 가치 평가가 버블이 심하다.

서비스 종류

거래 플랫폼 서비스

구분

  • 혜택이 없는 경우 단순히 소유권만 인정해준다. 다만 시세 차익에 대한 이득은 있다.
  • 혹은 NFT를 소유하고 있다면 회원권처럼 추가적인 혜택을 제공하는 경우도 있다. 입장권이나 서비스 사용권 등을 제공하기도 한다.

형태

전망

개인적으로는 NFT 소유 증명에 대한 기술에 대한 전망은 밝다고 보지만, 디지털 데이터에 대한 NFT는 좀 더 성숙하고 유익한 서비스를 필요로 한다. 이미 다방면에서 NFT 활용을 강구하고 개발되고 있으니 기대는 해본다. 하지만 쏟아지는 프로필 이미지, 디지털 작화에 대한 NFT 발행은 좀 자제 했으면 한다. 아직은 의견이 분분하니 개인적인 의견은 아끼는게 좋아 보인다.
매일경제 NFT 전망 : https://www.mk.co.kr/news/culture/view/2022/03/291997/

구현 및 실행

위처럼 개념적인 부분이나 구분 등을 살펴보는 것도 필요하지만, 나는 개발자이기 때문에 실제로 NFT를 Deploy해보는 것이 NFT에 대한 이해와 습득에 더 더움이 된다. 사실 minting 이라는 단어로 여느 코인 발행과 크게 다르지 않다는 걸 예상해 본다.

Minting 사이트 서비스 이용

일반 light 유저들은 위에서 nft 업체를 통해 작품을 올려보는게 가장 쉬운 방법이다.

직접 Minting을 해보자.

자 그럼 NFT 거래소에서는 Minting을 어떻게 구현했을지 직접 작업해 보자.

  1. contract ABI 가져온다.

  2. IPFS를 사용하여 이미지데이터 올리기
    항상 실제 이미지 데이터는 어디에 deploy되는지 궁금했는데 IPFS라는 곳에 저장이 된다. 블록체인과 마찬가지로 분산형 파일 저장 프로토콜이라고 볼 수 있다. 토렌트같은 파일 공유 서비스라고 생각하면 현하고 pinata라는 사이트에서 제공하고 있다.

    IPFS란?
    https://kadensungbincho.tistory.com/66

  3. NFT에 대한 메타데이터 구성
    위에 파일데이터 올린뒤, url등의 메타데이터를 json으로 구성한다.

{
  "속성" : [ 
    {
      "trait_type" : "견종" , 
      "값" : "말티푸" 
    } ,
    {
      "trait_type" : "눈 색깔" , 
      "값" : "모카" 
    }
  ] ,
  "description" : "세상에서 가장 사랑스럽고 민감한 강아지." , 
  "이미지" : "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb" , 
  "이름" : "람세스" 
}
  1. contract 인스턴스 생성 > transaction 생성
//아래와 같은 JS코드를 이용하여 NFT를 발행할 수 있다.
require("dotenv").config()
const API_URL = process.env.API_URL
const PUBLIC_KEY = process.env.PUBLIC_KEY
const PRIVATE_KEY = process.env.PRIVATE_KEY

const { createAlchemyWeb3 } = require("@alch/alchemy-web3")
const web3 = createAlchemyWeb3(API_URL)

const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json")
const contractAddress = "0x81c587EB0fE773404c42c1d2666b5f557C470eED"
const nftContract = new web3.eth.Contract(contract.abi, contractAddress)

async function mintNFT(tokenURI) {
  const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //get latest nonce

  //the transaction
  const tx = {
    from: PUBLIC_KEY,
    to: contractAddress,
    nonce: nonce,
    gas: 500000,
    data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(),
  }

  const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY)
  signPromise
    .then((signedTx) => {
      web3.eth.sendSignedTransaction(
        signedTx.rawTransaction,
        function (err, hash) {
          if (!err) {
            console.log(
              "The hash of your transaction is: ",
              hash,
              "\nCheck Alchemy's Mempool to view the status of your transaction!"
            )
          } else {
            console.log(
              "Something went wrong when submitting your transaction:",
              err
            )
          }
        }
      )
    })
    .catch((err) => {
      console.log("Promise failed:", err)
    })
}

mintNFT(
  "ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP"
)
  1. pinana나 etherscan에서 nft에 대한 이미지와 메타 데이터 등을 확인 할 수 있다.
    이미지 확인 url : https://gateway.pinata.cloud/ipfs/"metadata-hash-code를 가져와"

  2. metamask 등에서 등록하면 이미지와 함께 메타 정보등을 확인할 수 있다.

참조 사이트

profile
Simple is Best

0개의 댓글