블록체인 첫 걸음 — Web3.0 Basics #3

강보현, Bohyun Kang
9 min readJul 7, 2023

--

들어가며: 일주일이 이렇게 빨리..?

Web3.0 Basics 정리글을 쓴 주부터 매주 토요일이 왜이리 빨리 다가오는지..^^; 한편으로 매일매일 원고를 작성하는 기자님들이 존경스러워졌다. 처음과 달리 해이해지는 마음을 부여잡고 한번 3주차 내용도 정리해보자!

이번 주는 ‘블록체인 첫 걸음’이라는 주제로 이더스캔과 오픈씨를 통해 온체인 데이터를 살펴보았고, 테스트넷에 나만의 토큰 발행해보는 실습을 진행하였다.

1) 온체인이란?

  • 온체인은 블록체인 상에서 직접 거래를 수행하는 것을 의미한다.
  • 반대말은 ‘오프체인’이라고 하는데, 말그대로 블록체인이 아닌 그 밖에서 진행되는 것을 의미한다.
  • 예를 들어 만약 게임이 블록체인 상에서만 진행된다고 가정하면, 게임할 때마다 가스비(gas fee)가 발생하게 된다. 이는 시간적으로나 비용적으로나 비효율적이기 때문에 게임을 하는 동안은 오프체인에서 수행하고, 해당 게임의 결과값만 온체인 데이터로 관리하는 식으로 개발한다.

💡 가스비(gas fee)란, 블록체인 상에서 트랜잭션을 처리할 때 필요한 수수료를 의미한다. 블록체인 상에서 발생하는 모든 트랜잭션은 해당 트랜잭션을 처리하는 노드들에게 가스비를 지불해야 하며, 가스비는 블록체인 상에서의 트랜잭션 처리량을 조절하는 역할을 한다.

2) 오픈씨로 살펴보는 NFT 프로젝트

오픈씨(OpenSea)는 최대 규모의 NFT 마켓플레이스로, BAYC(Bored Ape Yacht Club)라는 NFT를 통해 해당 스마트 컨트랙트를 살펴보려고 한다.

BAYC #6744

BAYC는 PFP 형태의 NFT로 유저들에게 유틸리티를 제공하기 위해 시작한 NFT 프로젝트의 시초이다.

💡PFP란, ‘Profile File Picture’의 약자로 프로필 사진으로서 사용되는 NFT 프로젝트를 의미한다. 커뮤니티성과 및 브랜드성을 키우는데 대중적으로 사용되며 초기 크립토펑크가 10,000장을 중심으로 발행한 것이 시작되어 대중화되었다.

위 NFT는 BAYC의 6744번 NFT로, 대체 불가능한 토큰이기 때문에 각각 고유의 아이디값을 가지고 있다.

6744 NFT의 고유 traits

NFT에는 각각 고유의 특성(Traits)이 존재하는데, 이렇게 위 6개의 특성을 가지고 있다.

6744 NFT의 세부 내용

디테일하게 살펴보자면, 우선 계약 주소(Contract Address)를 클릭하면 이더스캔(Etherscan) 페이지로 이동하여 해당 NFT 프로젝트의 스마트 컨트랙트 내역을 확인할 수 있다.

BAYC 스마트 컨트랙트 이더스캔 페이지

해당 토큰이 아닌 이 프로젝트의 스마트 컨트랙트 주소로 연결되는 것이기 때문에 모든 내역을 확인할 수 있다.

6744 NFT의 JSON 데이터

다음으로 토큰 번호(Token ID)를 클릭하면, 위와 같은 페이지로 이동하는데, 해당 토큰의 이미지 주소와 고유 속성 값(= meta data)이 JSON 데이터로 작성되어 있다.

이때 고유 속성은 여러 개이기 때문에 배열 안에 객체로 type과 value들이 담겨 있는 형태이다.

JSON 데이터의 주소를 살펴보면 위와 같은데, ipfs는 대표적인 분산 파일 시스템이다. NFT 토큰들의 DB들은 오프체인에 저장되는데, 이걸 안전하게 분산해서 저장하는 곳이다.

만약 가장 뒤에 토큰 ID를 제외하고, 프로젝트명까지만 입력하고 엔터를 치면 해당 프로젝트의 모든 NFT 리스트를 볼 수도 있다!

3) 스마트 컨트랙트가 작동하는 방식

스마트 컨트랙트가 작동하는 방식을 알아보기 전에 스마트 컨트랙트의 개념을 다시 짚고 넘어가자.

스마트 컨트랙트는 블록체인 안에 “자판기를 설치하는 것”이라고 생각하면 이해가 쉽다. 즉, 위에서 살펴본 BAYC 스마트 컨트랙트는 BAYC Token에다가 고유 속성값(meta data)를 심어서 발행하는 ‘토큰 자판기’인 것이다.

스마트 컨트랙트의 작동 방식
스마트 컨트랙트가 작동하는 방식

스마트 컨트랙트가 작동하는 방식은 다음과 같다. BAYC 스마트 컨트랙트를 예시로 같이 보자.

1. 스마트 컨트랙트 작성 및 배포

BAYC 스마트 컨트랙트를 NFT를 소유하거나 전송하거나 소각할 수 있게 ownerOf, transfer, burn 등 다양한 action 함수들이 존재하게 작성한다.

또한, 어드민만 호출할 수 있는 함수들을 private하게 작성하고 작성이 완료되면 배포를 한다.

2. 트랜잭션 발생

트랜잭션이 발생하면 가스비를 지불해야 한다.

💡이때 가스비를 지불해야 하는 이유는 뭘까?

비트코인은 while이나 for와 같은 반복(Loop) 명령을 사용할 수 없기 때문에 거래 증명 시무한 루프에 빠지는 것을 방지한다. 그래서 비트코인을 ‘이체’하는 것에 대해서만 수수료를 물고, 스크립트 언어를 이용해 다양한 기능을 추가해서 이체하여도 추가적인 수수료를 부과하지 않는다.

반면, 이더리움은 모든 응용기능이 가능하기 때문에 공격자가 악의적으로 시스템에 대규모의 작업을 투하하여 네트워크를 마비시킬 수도 있다. 이를 방지하기 위해 단순 이체뿐 아니라 컴퓨팅자원을 소모하게 만드는 모든 응용기능을 실행하는 데에 수수료를 부과한다.

3. EVM이 컨트랙트 실행

가스비는 Priority fee와 Base fee로 구성되어 있고, Priority fee는 채굴자(Validator)에게 보상으로 돌아가는 비용을 말한다.

Base fee는 이전 블록의 트랜잭션 양에 맞춰 미리 설정된 금액을 말한다. 상한선과 하한선이 정해져 있다. EVM이 실행되게 되면 인플레이션을 방지하기 위해 Base fee는 소각된다.

또한, 가스는 정찰제로 가격이 매겨져 있으며 트랜잭션이 처리가 되지 않더라도 응용기능을 실행했기 때문에 환불은 불가능하다.

💡과도한 가스비를 방지하기 위해 컨트랙트를 작성할 때, 거래가 어느 정도 진행되면 실행 종료 등의 함수를 작성하기도 한다.

4. 블록체인에 저장

위의 과정이 모두 성공적으로 진행되면 블록체인에 데이터가 올라가게 되고, 우리는 이를 ‘온체인 데이터’라고 부른다.

또한, 이더스캔을 통해 해당 거래 내역을 모두가 볼 수 있다.

4) 컨트랙트 구현 및 민팅 실습

1. NFT 생성 방법

NFT 생성 방법은 총 3가지로 1) 직접 스마트 컨트랙트 코드를 작성하거나, 2) OpenSea에서 제공하는 기능(OpenSea Shared Storefont)을 사용해 NFT를 생성하거나, 3) Manifold와 같은 서비스를 사용해 생성할 수 있다.

2. Manifold 사용하여 컨트랙트 구현

스터디에서는 Manifold 서비스를 사용하여 컨트랙트를 생성하고, Goerli Testnet에 민팅하는 실습을 진행하였다.

ERC-721 규격으로 컨트랙트를 작성하였고, 내가 홍콩에서 먹었던 훠궈 사진을 NFT로 생성할 생각이라, 컨트랙트 이름은 ‘Bo In Hong Kong’으로 정했다. 심볼은 약자로 ‘BIHK’으로 정하였고, 아스키 코드까지 입력하였다.

컨트랙트 배포 과정

한 3~5분 정도 기다리면, 컨트랙트가 성공적으로 배포되었다고 화면이 바뀐다.

배포 성공!

3. Manifold 사용하여 NFT 민팅

그럼 컨트랙트가 구현 및 배포가 되었으니, NFT를 민팅해보자.

사진과 제목, 창작자, 설명, 고유 속성들을 잘 입력해주면 된다.

NFT 민팅하기

Goerli Testnet에 민팅을 진행한다. 가스비를 지불하면 민팅이 진행된다.

가스비 지불

내가 입력한 것들이 아래에 잘 입력되어 NFT가 민팅되었다!

민팅 성공!

메타 데이터를 살펴보면, 아까 BAYC와 똑같이 JSON 데이터로 이루어져있다.

내 NFT의 메타 데이터

OpenSea에서도 확인할 수 있다. 입력한 내용들이 잘 들어가 있음을 확인할 수 있다!

OpenSea에서 확인해보기

마치며

주차를 거듭하면서 이전 주에 간략하게 설명하고 넘어갔던 개념들이 다시 나와 그때보다 더 자세하게 공부하는 과정이 굉장히 맘에 든다. 한번에 모든 개념을 자세히 배우는 것보다 (가랑비에 옷 젖듯이) 차근차근 개념들을 짚고 넘어가니 이해가 더 잘 된다!

또, 이번 주는 온체인 툴을 사용해서 NFT 생성 실습까지! 핸즈온 세션이 더해지니 다채롭고, 그 어느 때보다 집중도 잘되고 재밌었던 주차였다. 막상 온체인 툴을 사용해서 이렇게 쉽게 작성할 수 있으니, 다음에는 스마트 컨트랙트 코드도 한번 작성해볼까 싶기도 하고..

사실 이번 주차에 내용이 생각보다 많아서 작성하기가 은근 고됐는데.. (이 시리즈를 괜히 시작했나 했다면서..) 차근차근 지난 주차에 배운 내용을 정리하고 나니 만족스럽다! :)

--

--

강보현, Bohyun Kang

Web FE Engineer & Evangelist at Women Who Code Seoul👩‍💻