[노마드코더] 블록체인 기초 개념

박기영·2022년 9월 16일
0

멋쟁이사자처럼

목록 보기
1/4

멋쟁이사자처럼 블록체인 스쿨 1기에 합격했다.
LINE NEXT에서 NFT 사업을 확장하는 것을 보고 프론트엔드 개발자를 뽑고 있길래 관심이 생겼는데...프론트만 공부해던 나로서는 상당히 생소한 영역에 발을 들인 것만같은 기분이다.
프론트와 블록체인이 어떤 식으로 관련될 수 있는지를 배워나갈 수 있을 것으로 기대된다.
조금 알아보니, JSON 데이터 받아와서 보여주는게 끝이라는 썰도 있지만..블록체인 자체를 다룰 수 있는지 없는지는 별개의 중요한 문제라고 생각되고, 뭐든 할 줄 알면 좋기 때문에 이번 스쿨...열심히 해보려고한다! 코딩 공부 시작하고 처음으로 특정 단체에 합격한 것이기도 하고🥳

각설하고, 아직 스쿨 시작 전이라서 블록체인에 대한 개념 정도는 알고 가려고한다.
마침, "노마드코더"라는 유명한 프로그래머 유튜버분이 블록체인에 대하여 유쾌하게 설명해주신 시리즈 영상을 보았다. 그를 통해 배운 것을 약간 정리해보려고한다.
글로만 주르륵 작성해나갈 것이므로 지루하다면 하단 참고 자료에 있는 링크에 들어가 영상을 보자!

블록체인(Block Chain)

블록체인 = 블록 + 체인 = Block + Chain

Block

Block은 쉽게 말하면...DB이다. 그런데 이제 아래의 특징을 가지는.

  1. Append
    추가만 가능하다. 삭제, 편집은 불가능하다.
  2. Decentralization
    탈중앙화가 가능하다. 특정 개인이 DB를 관리할 수 없다. 분산된 DB랄까?
    모두가 DB의 복제본을 가지고 있다. 따라서, 뻥치는게 불가능하다.

블록체인에서 Block은 정보를 DB에 추가하는 방법인데, 데이터를 그냥 넣는게 아니라, Block을 생성해서 넣는다.

어떤 데이터가 Block에 들어갈까?

블록 = 블록의 해시 + 이전 블록의 해시 + 데이터
	= block hash + previous block hash + block data

Data

Data에는 다양한게 들어갈 수 있겠다. 전세 계약서, 대학 학위 등등...
흔히들 블록체인하면 생각하는 비트코인의 Data에는 거래내역들이 들어간다.
누가 얼마나 가지고 있고, 누가 누구한테 얼마를 보냈고 등등..

hash

해시(hash)는 하나의 input을 받으면 output을 준다.
그런데, 아래와 같은 특징을 가진다.

  1. 결정론적
    결정론적이라는 것은 특정 input에 대하여 output이 늘 같은 것으로 정해져있다는 것이다.
    예를들어,
input = i love you
output = isdanf;sdifnda;fnad;kgjfbgnjbksd;g09ir2039u812h9

input = i love you!
output = bkl.hk;jhiof;jihoyj;hjiowejr2934903414u1hhqvavaa

이런 식으로 말이다. 세상 어떤 컴퓨터에서 이를 시도하든 같은 결과가 나온다.
한 글자만 달라져도 완전히 다른 특정값으로 변해버린다.

  1. 일방향 함수
    위 예시에서 본 것 처럼 우리는 input을 통해 output을 얻었다.
    그러나...output을 활용해서 input을 얻어낼 수는 없다.
    망고 주스와 같은 것이다. 망고(input)를 갈아서 망고 주스(output)를 얻었지만,
    망고 주스(output)로 망고(input)를 만들어낼 수 없다.

위 두 가지가 왜 중요하느냐?
이들을 활용하여 Chain을 만들기 때문이다.

Chain

우린 Block을 아래와 같이 만들어야 블록체인에 넣을 수 있다는 것을 알고있다.

블록 = 블록의 해시 + 이전 블록의 해시 + 데이터
	= block hash + previous block hash + block data

block hash는 내가 만들 Block의 해시인데,
이 것을 이전 블록의 해시와 내가 넣을 데이터를 합쳐 hash해서 만든다.

block hash = previous block hash + block data

따라서, 모든 블록들은 이전 블록의 해시를 가지고 있어야 블록체인에 추가될 수 있다.
이런 방법으로 Chain이 결성되는 것이다.

만약 수많은 블록 중 누군가가 데이터를 한 글자라도 바꾸면, 뒤에 있는 블록들은 해시가 다 바뀌게 될 것이다.
이런 특성 덕분에 그 누구도 블록체인을 변경할 수 없게되는 것이다.

블록을 추가하기 위한 조건

그렇다면...아무나 블록을 추가할 수 있는 것인가? 아무 데이터만 넣으면 되는 것인가?
그렇지않다.

어떤 데이터가 블록체인에 추가될 수 있는가?

그것은 바로, 진실(True)이다. 데이터에 거짓이 존재해서는 안된다.
이를 위해서 "작업증명(Proof of Work, pow)"이 필요하다.
사기꾼, 악용사례 등등으로 부터 블록체인을 보호해준다.

작업증명(Proof of Work, pow)

채굴자

블록체인에 들어오는 데이터를 확인하는 역할을 한다.
채굴자가 데이터를 블록 안에 넣어서, 블록체인에 보내는 역할을 하기 때문이다.

누군가가 다른 누군가에게 코인을 보낸다고 했을 때, 거래내역은 보이지 않을 것이다.
그러나, 채굴자가 해당 거래내역을 보고, 확인하며 거래자들의 모든 내역을 체크한다.
체크가 다 끝나면, 그 데이터를 블록 안에 넣는다.
이러한 체크를 여러개 해서, 블록이 꽉 차게되면
블록을 닫고, 블록체인에 올린다.

채굴자 덕분에 데이터들을 체크하고, 블록체인에 블록을 넣을 수 있는 것이다.
이는 탈중앙화되어 진행되고 있으며, 누구나 채굴자가 될 수 있다는 것을 의미한다.

그렇다면, 이런 일들을 해주는 채굴자는 착해서 이걸 해주는걸까?
아니다. 그들은 이를 통해 돈을 번다.
채굴자는 거래내역을 컨펌하면 돈을 받는다. 일종의 수수료를 받는 것이다.
그 덕에 검증 작업(체크)이 활발하게 이루어지는 것이고, 사기꾼 등으로부터 네트워크를 보호할 수 있게되는 것이다.

아, 그럼 채굴자 개꿀이네? 검증하고, 블록체인에 올리면 수수료 받고 끝이잖아!
아니다. 블록체인에 블록을 올리는 것이 어렵기 때문이다..^^

작업증명의 원리

작업증명(pow)는 채굴자에게 전체 네트워크가 다 아는 질문을 던진다.
채굴자는 그 질문에 대하여 대답을 해야한다.
채굴자가 답을 찾으면, 그 때 비로소 블록을 올릴 수 있게된다.

즉, 채굴자는 보상(수수료라고 이해하자)을 2번 받는 것이다.
한 개는 거래내역을 컨펌하면서,
한 개는 질문의 답을 찾아서, 블록을 체인에 올리면서.

후자의 경우가 발생하는 순간! 흔히들 아는 비트코인이 생성되는 것이다.
즉, 사람들이 블록을 체인에 올리는 순간, 생성되는 것이다.
채굴자가 블록을 체인에 올릴 때마다 coinbase transaction이라는 것이 생기는데
이게 바로, 비트코인이 생성되는 순간이다.

비트코인에 대해 좀 더 얘기해보자.
비트코인은 생산량이 한정되어있다. 2100만개로!
원래는 채굴자가 블록을 올릴 때마다 50개씩 생성이 됐지만,
4년마다 반감기가 와서, 절반씩 줄어들고, 현재는 6.25개가 생성된다.

채굴자가 받게되는 "질문"

각설하고, 다시 진행해보자.
위에서 작업증명이 채굴자에게 "질문"을 던진다고 했다. 이 질문은 도대체 뭘까?

데이터를 작성하면 해시가 변하는 것은 이미 알고있다.
이렇게 블록을 캐내서(mine) 체인에 올린다.
다음 블록을 올리기위해 해야하는 일들도 알고 있다.

그런데 여기에, Nonce와 난이도(0,1,2...숫자로 표현된다) 개념이 추가된다.

난이도

난이도는 블록을 찾는 것이 얼마나 어려운지를 결정한다.
채굴자는 데이터를 변경할 수 없다. 오직, 검증만 가능하다.
그러면 채굴자가 대답해야할 질문에 대해서 뭘 할 수 있는거지?

Nonce

채굴자는 Nonce를 조절해서 이 질문에 대답한다.
Nonce는 "한번만 쓰인 숫자"를 의미한다.

예시를 통해 알아보자.
질문은 아래와 같다.
"채굴자씨, Nonce에 무슨 값을 넣어야할까요? 참고로 블록의 해시는 3개의 0으로 시작되어야합니다."

즉, 체인에 올리려는 블록의 해시값에 대한 조건을 질문으로 받고
채굴자는 Nonce를 조절해나가며 이 질문에 대한 대답을 찾는다.
참고로, 질문에 있는 3개의 0이라는 것은 난이도가 3이라는 것을 의미한다.
난이도가 4가 되면 4개, 5가되면 5개...이런 식이다.

이제 채굴자는 Nonce를 조절해나가면서 해시가 000으로 시작하도록 만들어 낼 것이다.
1,2,3,4,5...계속 올려가면서 해시를 바꿔나간다.
만약, 질문에 대답하지 못하면 블록은 생성할 수 없다.
이러한 이유로 인해서 블록 생성이 어려운 것이다.
데이터, 이전 블록의 해시, Nonce를 활용해서 특정 난이도의 질문에 대답해야하기 때문이다.

얼마나 어렵나면, 노마드코더님이 만든 시뮬레이터 상에서는
input : Kimchi is Korean.
이라는 데이터와 이전 블록의 데이터를 가지고, 난이도 3의 질문을 해결하는데
Nonce가 1부터 시작해서 1582까지 가서야 블록을 생성할 수 있었다.

이렇게, 생성은 어렵고 검증은 쉬운 것이 작업증명(pow)의 특징이다.
질문에 대답하기(생성)는 어렵지만, 생성된 블록의 해시에 0이 몇 개인지 세는 것(검증)은 쉽다.

여담

여담으로, 비트코인은 10분마다 블록을 생성하고
블록이 너무 빨리 생성된다 싶으면, 난이도를 올리기도 한다.
Nonce를 찾는게 요점인데, 그래픽 카드가 1초에 6천만 Nonce를 연산할 수 있기 때문에 비트코인 채굴장 얘기에 그래픽 카드 얘기가 딸려나오는 것이다.
비트코인 네트워크는 1초에 정말 많은 해시가 처리되는데, 그 중 하나가 Nonce를 맞춰 블록(혹은 코인)을 캐는 것이 되겠다.

스마트 컨트랙트(Smart Contract)

스마트 컨트랙트를 통해 NFT, ICO, DEX 등이 가능해진다.
위에서 살펴본 대표적인 예시 비트코인은 다른 사람과 교류할 수 없다.
그냥 코인 주고받고가 끝이다.
그러나, 스마트 컨트랙트를 통하면 다른 사람들과 소통할 수 있고, 혹은 코드로 소통할 수도 있다.

이를 통해서 탈중앙화된 앱을 만들 수도 있다.
앱을 제작해서 공유 네트워크에 올린다. 전체 네트워크가 검증하고 실행하는 바로 그 네트워크말이다.
보통 앱을 제작하면 아마존 EC2 등등을 활용해서 서버를 올리는데, 해당 서버가 터지면? 내 앱도 사라지는 것이다.
그러나, 공유 네트워크에 이를 올리게 되면, 영원히 거기에 있게된다.
사람들은 앱을 사용할 수는 있지만, 변경할 수는 없다.
즉, 내가 작성한 코드를 주인 없는 백엔드에 올리는거다. 전세계가 사용하는 공유 네트워크에.
이 어마어마한 것이 나의 코드를 검증하고, 실행한다.

이런 스마트 컨트랙트의 특징들을 이용해서 나만의 은행도 만들 수 있다.
2가지의 방침이 있는 스마트 컨트랙트를 쓸 수 있다.

  1. 돈을 저축하고 거기에 보관한다.
  2. 30년 뒤에 그 돈을 나에게 돌려준다.

은행이나 서버의 도움없이 가능한 것이다. 블록체인의 형태로 존재하기 때문에, 그 누구도 수정할 수가 없다.

또 다른 예시로 에어비앤비가 있다.
우리는 여행지에 숙소를 얻기 위해 에어비앤비라는 중개인을 통해 집주인과 거래를 한다.
스마트 컨트랙트를 활용하면? 중개인이 필요가 없다!
에어비앤비 대신 스마트 컨트랙트에 돈을 보내고 집주인과 숙소에 대한 거래를 하는 것이다.

스마트 컨트랙트의 단점

원하는 소스를 다 활용할 수 없다.
결국 해당 블록체인 네트워크 위에서만 실행 가능하기 때문이다.

만약, 비가 내리는 것을 감지하는 센서(real world)와 스마트 컨트랙트(block chain based application)가 내기를 했다고 해보자.
비가 오면 스마트 컨트랙트가 돈을 딴다.
그런데, 센서가 뻥을 치면? 누군가가 비가 오지않는다는 조작을 가해놓으면?
스마트 컨트랙트는 비가 오지않는다는 센서의 말을 무조건 믿고, 패배하게 된다.
그렇다. 스마트 컨트랙트는 외부 요인을 무조건 신뢰한다.

다른 예시로, 집이 없는데 집이 있다고 뻥치고 스마트 컨트랙트로 숙소 예약을 받아버리는 사기가 있을 수도..?

따라서, 스마트 컨트랙트는 "신뢰 기반"의 거래가 된다.
네트워크 외부에 있는 어떤 무엇인가의 판단을 신뢰해야지만 된다.

이를 보완하기 위해 "oracle"이라는 것이 존재하기도 한다.

아무튼, 이런 스마트 컨트랙트를 지원하는 블록체인이 정말 많은데
이더리움, Kusama, Polkadot, Cardano, Cosmos 등등이 있다.

NFT(Non Fungible Token)

Non Fungible

Non Fungibility는 대체 불가능한 것들을 의미한다.

예를들어, 집에 강아지를 키운다고 하자. 그런데 옆집에서 똑같이 생긴 강아지를 키운다.
그럼 옆집에 있는 강아지와 내 강아지를 교환하면 1대1 교환이 성립되고, 그 가치는 유지되는가?
아니다. 내 강아지는 우리 집에서 자랐기 때문에, 그 아이만의 고유한 특성을 가지고 있다.
옆집 강아지로 바꾼다고 한들, 내가 가르친 것, 나와의 추억 등등은 그대로 오지않기 때문이다.

다른 예시로, 전세 계약서, 한정판 기념품 등이 있다.

Token

토큰은 이더리움 등의 블록체인을 활용하여 발행한 것을 말한다.
스마트 컨트랙트를 이용하여 나의 토큰을 발행할 수 있는데,
2가지 방침을 가지고 있는 스마트 컨트랙트를 이용한다.

  1. 돈을 넣는다.
  2. 토큰을 발행한다.

이렇게 발행한 나만의 토큰을 찍어내면 된다. 화폐처럼.

그런데....딱 1개의 토큰만 발행하는 컨트랙트를 만들면 어떨까?
그리고 그 단 하나의 토큰에 이미지를 집어넣으면 어떻게 될까?
그게 바로 NFT이다.

NFT는 왜 구매할까?

따라서 NFT를 샀다는 것은, 그림을 산게 아니라 딱 1번만 발행되는 토큰을 산 것이다.
구매한 것은 이미지 파일이 저장되어 있는 토큰인셈이다.

그런데, NFT는 복사도 되고, 인쇄도 되고 굳이 내가 구매하는게 아니더라도 사용할 수 있는데 왜 살까?

모나리자가 그 대표적인 예시이다.
구글에 검색하면 모나리자 그림을 그냥 볼 수 있는데, 사람들은 굳이 비행기를 타고 미술관에 가서 실물을 본다.
그 이유는 바로, 유일한 진짜 원본을 보고싶은 마음에서 비롯된 것이고
이게 바로 NFT가 하는 역할이다.

NFT는 원본임을 증명한다. 창작자가 만든 원본임을 증명한다.
이를 통해 열리는 시장은 무궁무진하다.
예를들어, K-pop 스타들의 창작물(취미로 그린 그림, 수필 작곡 종이, 인스타에 올린 사진 등등)이 꽤나 시장성이 있을 것으로 보인다.
왜냐? 스타가 직접 제작한 단 하나뿐인 진짜 원본이기 때문이다.

또 다른 예시로, 유튜버가 만든 영상을 NFT로 만들어서 팔 수도 있다.
단 하나뿐인 원본이기 때문에 유명한 유튜버들 것은 가치가 높을 것이다.

아니면, 콘서트 티켓을 굳이 중개인(티몬 등등)을 거치지않고, NFT로 발행해도 된다.
그리고 NFT 리더기를 통해 입구에서 확인 절차를 진행하는거다.

사실, 이해가 되지 않는다. 굳이 왜 NFT로...?
그러나, NFT는 디지털 상 자산의 소유권을 인정하는 것이기 때문에 앞으로 발전될 IT 분야에서 큰 잠재력을 가진다. 많은 것들이 디지털화 될 가능성이 높기 때문이다.
인터넷 세상에서 재산권이 생긴 것이다.

게다가, 소유하게된 순간부터 그 어떠한 방해로부터 자유롭게 된다.
누구도 빼앗지 못하고, 사라지지않는다.

지갑(Wallet)

비트코인은 어떻게 전송되고, 저장되는가?

전송. 무엇인가를 보낸다는 뜻이다.
그런데 비트코인을 보낸다는 것은 사실상 틀린 말이다.
내가 가진 비트코인을 너에게 보낸다. 이게 틀린 말이라고??

그 이유는, 내가 비트코인을 실제로 "소유"하는게 아니기 때문이다.
비트코인은 언제나 언제까지고 비트코인 네트워크에 존재한다.
네트워크를 떠나지 않는다.

그러면 어떻게 비트코인을 나의 것으로 가질 수 있느냐?
다른 사람 소유(다른 사람 이름)로 등록된 비트코인 10개 중 5개를 나의 소유(내 이름)로 등록하는 것이다.

이는 집을 구매하는 것과 비슷한 맥락이다
내가 다른 사람의 집을 산다고하더라도 주소가 변하지는 않는다.
바뀌는 것은 집 문서뿐이다.(집주인 명이 바뀌겠지?)

비대칭적 암호화(asymmetric encryption)

흠, 두 단락 위에 있는 "이름"을 Wallet으로 바꿔보자.
Wallet은 엄청나게 긴 텍스트이다.
거래를 할 때(비트코인을 보낼 때) 필요한 것이 이 Wallet이다.
Wallet은 비대칭적 암호화(asymmetric encryption)이라는 것을 이용해서 생성된다.

내가 상대방에게 아주아주 비밀스러운 문서를 보낸다고 가정해보자.
금고에 담아서 내 자물쇠로 잠궈버리고 상대방에게 보낸다.
그런데, 문제가 있다. 상대방은 자물쇠를 열기 위한 열쇠가 없다.
그래서 열쇠를 나한테서 받아야한다.
상대방이 답장을 하는 상황에서도 같은 일을 반복한다.

이는 안전하지않다.
한개의 열쇠를 서로 주고 받아야하기 때문이다.
그래서 필요한 것이 asymmetric encryption이다.

이 방식을 사용해서 위 상황을 그대로 다시 진행해보자.
우선, 이 방식을 사용하면 열쇠가 2개가 된다. 나와 상대방에게 2개씩 있는 것이므로 총 4개가 되겠다.
2개의 열쇠는 각각 공개 키(Public key), 비공개 키(Private key)이다.
여기서 공개 키를 자물쇠, 비공개 키는 그 자물쇠를 여는 진짜 열쇠라고 생각하자.
나는 상대방에게 문서를 보내기 위해서 상대방에게 공개 키(상대방의 자물쇠)를 달라고한다.
그리고 편지와 나의 공개 키(나의 자물쇠)를 금고에 담고, 상대방 공개 키(상대방의 자물쇠)로 금고를 잠궈서 보낸다.
그러면 상대방은 당연하게도 본인의 자물쇠이기 때문에, 본인의 비공개 키(상대방의 진짜 열쇠)로 금고를 열어볼 수 있다.
금고를 열면 문서와 함께 나의 공개 키(나의 자물쇠)가 있을 것이다.
이제 상대방은 답장을 써서 답장과 본인의 공개 키(상대방의 자물쇠)를 금고에 담고, 나의 공개 키(나의 자물쇠)로 금고를 잠궈서 나에게 보낸다.
내 자물쇠로 잠궈서 보냈기 때문에, 당연하게도 나는 이 것을 나의 비공개 키(나의 진짜 열쇠)로 열어볼 수 있다.

이게 바로 공개 키/비공개 키 방식이고, 암호화폐에서의 Wallet인 것이다.
공개 키는 누구에게나 오픈되어도 상관이없다. 비밀스럽게 지켜야하는 것은 비공개 키이다.

Wallet을 생성한다는 말은 즉, 비공개 키를 만든다는 뜻이다.
비공개 키를 이용해 공개 키를 만든다.
공개 키는 아까 말한 엄청나게 긴 텍스트이다.
바로 내가 누군가에게, 누군가가 나에게 비트코인을 보낼 때 공유해야할 주소이다!

아무튼 이러한 과정으로 인하여, 우리가 거래를 할 때 해야하는 것은 자기 자신이 비공개 키를 가지고 있다는 것을 증명하는 것이다.
이 것을 네트워크에 증명하면 그때 비로소 비트코인을 움직일 수 있다.

비트코인이 담긴 USB를 잃어버린 사람의 이야기를 들어봤을 것이다.
그들이 잃어버린 것은 비트코인이 아니다. 비공개 키를 잃어버린 것이다.
비트코인은 공개 키에 종속되어 있고, USB를 잃어버린 사람은 비공개 키를 잃어버려서 네트워크에 본인을 증명할 수 없고, 그래서 그 금고를 못 열고 있는 것이다.(물론 USB도 잃어버린게 맞지만)

DeFi(Decentralized Finance)

일명 디파이, 탈중앙화된 금융을 뜻하며, 이는 서드파티(중개자)가 없다는 것이다.
모든 거래는 스마트 컨트랙트를 사용해서 진행된다.

스테이블 코인(Stable Coin)

스테이블 코인은 암호화폐 중 하나이다.
USD와 1대 1로 연결되어 있다는 것이 특징이다.
즉, 1 stable coin = 1 USD 이다.
그래서 이름이 stable(안정적인) coin인 것이다.

왜 이 얘기가 나왔느냐? 달러와 같은 가치를 가지는 안정적인 코인이기 때문이다.
즉, 달러와 같은 가치를 가지면서 스마트 컨트랙트를 사용할 수 있다는 것이다!

대표적인 DeFi 프로젝트 중 하나가 "AAVE"이다.
돈을 예금하고, 빌려주고, 빌리는 것이 탈중앙화 자동화로 진행된다.

탈중앙화 거래소(Decentralized Exchange)

탈중앙화 거래소, DEX라고 불린다.
바이낸스, 빗썸은 회사가 내 계좌를 동결시킬 수 있다. 즉, 중앙화되어있다는 것이다.
탈중앙화는 이와 정반대이다.
유니스왑, 스시스왑, 팬케이크 스왑 등등은 모든 것이 사람이 아닌 코드에 의해 돌아간다.
유저들은 유동성을 제공하고 그 보상으로 거래 수수료를 받는 것이다.
유동성 풀(2개의 토큰을 연결해주는 스마트 컨트랙트)을 이용하여 수수료(중개인) 없이 토큰을 주고 받을 수 있는 것이다.
A코인을 받으면 수수료 없이 B코인을 주는 스마트 컨트랙트를 사용하여 거래를 한다고 생각하면 된다.

누군가 A 코인을 가지고 있는데 B 코인을 구매하고자 할 때 이 유동성 풀이 유용하게 사용될 것이다.
누군가는 구매를 하면서 B코인을 가졌던 사람에게(스마트 컨트랙트 제공자에게) 수수료를 지불한다.(중개인한테 지불하는게 아니다!!)

이더리움, 그 제한성에 대하여

상호운용성(Interoperability)

현재 정말 많은 수의 코인이 있고, 블록체인이 있다.
각각의 개체들은 장단점이 있는데, 이들끼리 상호 통신이 안된다면?
비트코인은 비트코인끼리만 그 풀장에서 놀 수 있고,
이더리움은 이더리움끼리만 그 풀장에서 놀 수 있으면, 의미가 있을까?
다른 블록체인간 통신이 되어야 더 넓은 시장, 자유로운 시장을 얻을 수 있지않을까?
그래서 나온 것이 상호운용성(Interoperability)이다.
블록체인이 지향해야할 부분 중 하나라고 생각된다.

그런데, 이더리움의 문제점은 프로그래밍 언어이다.
스마트 컨트랙트를 만들고자하면 이더리움의 프로그래밍 언어인 솔리디티(Solidity)를 배워야한다.
신생 프로그래밍 언어이다 보니까 커뮤니티가 적다. 또한, 표준이 확실하지않다.
스마트 컨트랙트를 작성하는 프로그래밍 언어는 굉장히 중요한데,
스마트 컨트랙트는 "안정적"이어야하기 때문이다.
그러나 솔리디티는 신생 언어로 이 부분이 부족하다. 좀 더 안정적인 언어로 개발을 했어야하는게 아닌가? 그런 의문은 남아있다.

트릴레마

암호화폐의 3가지 요소에 대한 것을 삼각형의 형태로 표현해놓은 것이다.

  1. 탈중앙화(Decentralized)
  2. 보안성(Secure)
  3. 확장성(Scalable)

암호화폐는 이 중 2개만 만족한다는 것이 문제이다.
1,2를 만족하면 3이 안되고(비트코인)
1,3을 만족하면 2가 안되고(~)
2,3을 만족하면 1이 안된다(사기업들이 통제하는 암호화폐. 그들이 원하면 언제든 없앨 수 있다)

그래서, 이 모든 것을 만족시킬 수 있는 암호화폐가 등장했다
바로 3세대 블록체인이다

3세대 블록체인

대표적인 블록체인인 이더리움도 3세대 블록체인으로의 전환을 준비 중이다.(이더리움 2.0)
3세대 블록체인이란 무엇일까?

3세대 블록체인을 알아보기 전에 블록체인에 대한 공격에 대해서 잠깐 짚고 넘어가자.
3세대 블록체인에 등장하는 개념을 이해하기 훨씬 편해질 것이다.

블록체인에 대한 공격

비트코인은 pow 방식으로 보호되고 있다.
이 방식에서는 컴퓨터끼리 경쟁을 하게된다. 성공하게 되면 보상을 받고, 그렇게 올라간 블록은 전체 네트워크가 승인하면 블록체인에 영원히 남게된다.

경쟁에서 내 컴퓨터가 더 빨랐기 때문에 이기면, 나에게 있는 거래내역이 네트워크에 올라갈 것이다.
이 때, 가짜 거래내역을 올려버리는 것이다.
물론, 이렇게만 한다고 네트워크를 장악한게 되는 것은 아니다.

여기서 필요한 것은 승인(confirmations)이다.
경쟁에서 이긴 컴퓨터에 의하여 블록체인에 추가된 후,
나머지 컴퓨터들은 해당 정보가 "참"임을 "승인"해줘야한다.
만약, 해당 정보가 "거짓"임이 들통난다면,
다른 컴퓨터들은 승인을 철회(reject)하고 다시 올바른 정보를 가지고 있는 새로운 블록을 찾게 된다.

위 과정을 "합의(consensus)"라고 한다.
정보에 동의하는가 동의하지 않는가를 정하는 것이다.

아, 그럼 단순하게 가짜 정보를 올리는게 끝이 아니라, 전체 네트워크의 51%만 설득하면 되는거다!
이런 공격을 바로 "51% 공격(51% Attack)"이라고 한다.

51% Attack

더 쉽게 예시를 들어보자.
내가 가족 모임에 가서 사촌에게 내 직업이 의사라고 뻥을 쳤다고 해보자.
그러면, 사촌은 내 엄마에게 그 것을 물어볼 것이고, 금방 거짓말이 들통날 것이다.
그래서, 나는 엄마에게도 거지맛에 동참해달라고 설득했다.
그럼에도 사촌은 엄마의 말만 믿지는 않을 것이다. 여러 가족 구성원에게 물어보고 다닐 것이다.
최소 51%의 가족 구성원의 확답이 있어야 그 때서야 믿게 될 것이다.

가족 구성원이 10명이면 이런 거짓말을 퍼뜨리는게 쉬울 것이다.
그런데, 50명, 1000명, 7만명...엄청 많은 숫자로 늘어나게되면?
그 중 51%를 설득하는게 쉬울까? 어렵다.

비트코인 네트워크(비트코인 가족 구성원)의 인원 수(노드 수)는 7만명이다.
그 중 51%의 노드에게 내가 만들어낸 가짜 정보가 참이라는 것을 승인받아야지 블록체인에 올릴 수 있다. 매우 매우 어렵다.

이를 간단하게 해결해버리려면 구성원의 51%에 해당하는 컴퓨터의 파워를 내면 된다.
암호화폐에서는 이를 해시 레이트(Hash Rate)라는 것으로 계산하는데,
이는 블록을 찾기 위해 컴퓨터가 작업하는 속도를 뜻한다.

쉽게 말하면, 비트코인 채굴하고 있는 사람들 중 51%의 사람이 하고 있는 양의 일을 한번에 해내면 된다는 것이다.
이러한 이유로 보통 컴퓨터로는 비트코인이 채굴이 불가능해진다. 경쟁에서 져버리기 때문에.

채굴 전용 컴퓨터(채굴기)를 시중에서 판매하고 있는데,
만약 비트코인이 1초당 1억 61000만 테라헤시(terahash)/초(s) 레이트를 가지고 돌아가고 있다고 하면,
네트워크를 장악하기 위해서는 51%, 최소 8200만 테라헤시/초 가 필요하다.

채굴기 성능은 90 테라해시/초 이다...
품절로 인해서 구매도 힘든 이 녀석을 90만개 이상 사야한다는 것이다.
51%를 장악하기 위해서...
심지어 51%를 장악한 뒤, 그 것을 유지하기 위해서는
새로운 사람들이 네트워크에 들어오는 걸 막거나, 계속 채굴기를 더 사서 그 파워, 51%의 장악력을 유지해야한다.

자, 일단 장악했다고 치자. 그럼 그 다음에는 무엇을 해야할까?
블록체인 특성상 과거의 정보를 유지된다. 하지만 새로운 블록의 정보는 바꿀 수 있다.
즉, 새로운 블록에서 새로운 비트코인을 발행하는거다.
그렇게 만든 비트코인을 빠르게 거래소(빗썸, 업비트 등)로 보내고,
빠르게 인출하면 된다.
물론, 이 과정에서 51%의 장악력은 계~~~속 유지해야한다.
최소 장악하기 위해 투자한 금액을 회수할 때까지는 그렇게 해야할 것이다.

그럼 나머지 49%는 멍청이라서 이걸 보고만 있을까?
이들이 문제가 있다는 것을 눈치채면 어떻게 될까?

하드 포크(Hardfork)

그들은 이를 막기 위해 하드 포크(Hardfork)라는 것을 하는데,
이는 문제의 블록체인을 그냥 무시해버릴 수 있다.

채굴자 간 합의가 되지않았을 경우 하드 포크를 진행하게 되는데,
그로 인해서 이더리움, 이더리움 클래식
비트코인, 비트코인 캐시, 비트코인 골드가 존재하게 되는 것이다.

또한, 이를 통해 블록체인이 업데이트되기도 한다.

아무튼, 이러한 이유로 블록체인의 장악은 정말정말 어려운 일이다.
돈도 필요한데, 49%의 눈치까지 피해야한다.

만약, 비트코인보다 그 규모가 작은 블록체인에 대해서 공격하는 것은?
규모가 작기 때문에 51%에 해당하는 파워도 작고, 그만큼 쉬워질 것이다.
이건 명백하게 취약점이 될 것이다.
이 경우가 바로 이더리움 클래식에서 발생했었다. 한 달 동안 3번의 51% 공격을 받았다고한다.

이게 바로 작업증명(pow)의 문제점이기도하다.
네트워크를 지키기 위해 많은 에너지를 필요로하는 네트워크만이 안전할 수 있다는 것이다.
전기를 많이 쓴 사람에게, 빠른 컴퓨터를 가지고 있는 사람에게 보상을 제공하는 것.
환경에도 좋지않다. 채굴때문에.

따라서, 빠른 컴퓨터에 보상을 주는 것이 아니라
코인을 지속적으로 보유하는 사람에게 보상을 준다면??
프로젝트를 믿는 사람에게 보상을 준다면??

이 것이 바로 3세대 블록체인에 등장하는 개념, 지분증명(Proof of Stake, pos)의 핵심이다.

지분증명(Proof of Stake, pos)

pos 시스템에서는 빠른 컴퓨터가 필요없다. 에너지 낭비도 없다.
pos 시스템에서는 블록을 채굴하고, 거래를 승인하고, 보상을 받는 것이
얼마나 코인을 보유하고 있느냐에 따라 달라진다!

즉, 네트워크에서 받는 보상의 양은
얼마나 네트워크에 참여(commit)했는지에 정확하게 비례하게 된다.

pos 시스템에서는 채굴자(검증자)로 참여하기 위해서는 그 프로젝트(블록체인)의 코인을 소유해야만 한다.
단순 소유에서 끝나는게 아니라, 스테이킹(staking)
즉, 네트워크에 고정적으로 맡겨야한다.

이렇게 네트워크에 코인을 잠그게 하는 이유는
만약 내가 나쁜 의도로 네트워크를 해치려고 한다면 나의 자산 또한 해치는 것이 되기 때문이다.
따라서, 내가 네트워크 공격에 성공하면 내가 맡겨둔 자산도 하락하게 되는 것이다.
그래서 51% 공격도 힘들어진다. 해당 코인의 51%를 소유하고 있어야만 하는 것이니까.
게다가, 네트워크 공격 중 발각되면 네트워크에서 추방될 뿐만 아니라, 내가 넣어둔 자산은 영원히 네트워크에 가둬지게 된다.

그래서 pos 시스템에 공격을 가하려면 공격에 성공해서 본인의 자산 하락을 감안하고 하든해야한다.
공격으로 인해 얻는 금전적 이득이 없는 것이다.

아무튼, 코인을 스테이킹 해놓는다고 해서 무조건 보상을 얻는 검증자로 선택되지는 않는다.
pos 시스템에서 검증자들은 그들의 지분에 비례해서 선택되게 된다.
만약 내가 지분이 많다면? 검증자로 자주 선택되게 되는 것이다.
그만큼 프로젝트에 관심이 많고 믿음이 있다는 것이기 때문에.

이런 시스템 덕분에 pos에서는 pow에서 처럼 전력을 엄청 소모하지않는다.
물론, 이런 시스템이 모든 블록체인에 동일하게 적용되고 있는 것은 아니다.
블록체인마다 pos의 적용법이 다르다.

가장 지분이 많은 사람에게 보상을 주는 방법도 있고,
오랜 기간동안 지분을 소유한 사람에게 보상을 주는 방법도 있다.

지분증명의 한계

pow에서는 빠른 컴퓨터를 소유한 사람에게 보상이 갔다.
pos에서는 부자에게 보상이 갈 가능성이 높다.
돈이 많을수록 검증자가 될 확률이 높고, 보상을 받을 확률이 높기 때문이다.
부자가 더욱 부자가 되는 것이다.

또 다른 것은, 먼저 참여한 사람에게 보상을 줄 확률이 높다는 것이다.
나중에 블록체인에 합류한 사람은 그 사이에 상승된 코인의 가격으로 인해 많은 코인을 소유할 수 없게되고,
검증자가 될 확률도 낮아질 것이다.
초기에 이 프로젝트에 참여한 얼리 어답터에게 유리하고, 뉴비에게 불리한 것이다.

이런한 문제점들을 해결하기 위해서 위임 지분증명(Delegated PoS)가 생겨났다.

위임 지분증명(Delegated PoS, DPoS)

pos에서는 누구나 검증자로 선택될 수 있다.
따라서, 컴퓨터를 켜놓고 항시 대기를 해야한다. 24시간 내내 검증자가 되는 것을 기다리고 있어야한다.

Delegated PoS에서는 "위임자들(Delegates)"이 있다.
이들은 항상 블록체인 소프트웨어를 운영하면서, 항상 온라인에서 검증자로 대기하는 사람들이다.
24시간 내내 컴퓨터 켜놓고 대기하기 힘든 우리들은 위임자를 뽑을 수 있다.
우리의 코인을 맡김으로써, 이 위임자를 뽑겠다고 투표를 할 수 있다.

그러면 위임자는 더 많은 지분(stake)를 가지게 되는 것이다.
많은 사람들이 그에게 표를 주었기 때문이다.(코인을 맡겼기 때문)

그렇게 알고리즘에 의하여 검증자로 선택된다면, 위임자는 보상을 받게되고,
투표해준 사람들과 그 보상을 나누게 된다.

따라서, 위임자는 우리가 코인으로 그를 뽑도록 설득해야한다.(선거 유세 같은..?)
그 덕에 자주 검증자로 선택될 수 있도록 말이다.

물론 DPoS도 지분증명의 한 가지 방법이다.
여전히 많은 지분이 필요하다. 코인이 많다는 것은 나의 투표가 영향력을 가진다는 것을 의미하기 때문이다.

만약, 위임자가 불성실하고, 보상 분배도 제대로 하지않으면
우리는 다른 위임자를 뽑으면 된다.

DPoS는 합의에 이르고, 네트워크를 지키는 더욱 민주적인 방법이다.
그럼에도 지분증명의 한계점은 오랜 기간 테스트되지 않은 방법이라는 것이다.
아직 비트코인만큼 성장한 지분증명 기반의 블록체인이 없다.
즉, 많은 공격시도를 경험해보지 못했다는 것이다!

그치만 이러한 한계에도 지분증명의 매력은
내가 암호화폐를 소유하고 있다면, 지금 당장 스테이킹을 할 수 있다는 것이다.
많은 거래소가 스테이킹을 지원하며, 지갑을 통해서 스테이킹을 할 수도 있고,
코인을 스테이킹 하는 것만으로도 이자를 얻을 수도 있다.

참고 자료

노마드코더 암호화폐 101 with Nico

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글