** 파이썬으로 공부하는 블록체인 (일등박사) 서적 기반으로 작성 **
블록체인의 정의
블록체인은 데이터가 저장된 "Block"이 "Chain"으로 연결되어 있는 것이다.
데이터가 계속 생성되기 때문에 블록도 계속해서 생성되며, 이런 블록들의 연속성을 위하여 체인들이 각 블록을 연결한다.
기존에 많이 사용되는 데이터 저장 방식은 RDB(Relational Database) 로 데이터를 확인해보면 다음과 같다.
위 db에서는 현재 사탕을 3개 구매한 사람들의 기록을 저장하고 있는 것을 볼 수 있다.
이를 블록체인 방식으로 저장하면 다음과 같이 표현할 수 있다.
위 사진처럼 각각의 블록에 거래 내역 데이터가 저장되며 체인들이 이 블록을 연결하여 블록의 관계를 알 수 있다.
위 블록체인 구조를 파이썬 코드로 변환해보면 다음과 같다.
# 블록1
block1 = { 'INDEX':0,
'판매자' : '파이썬',
'구매자' : '김민수',
'개수' : '3개',
'시간' : '1990-01-01 00:00:00',
'previous_block' : None # previous_block이 chain 역할을 한다
}
# 블록2
block2 = { 'INDEX':1,
'판매자' : '김민수',
'구매자' : '김영수',
'개수' : '3개',
'시간' : '1990-01-02 01:02:03',
'previous_block' : block1 # 체인1
}
# 블록3
block3 = { 'INDEX':3,
'판매자' : '김영수',
'구매자' : '박명수',
'개수' : '3개',
'시간' : '1990-01-03 02:03:04',
'previous_block' : block2 # 체인2
}
여기에 앞서 RDB에 나와있던 6명을 모두 연결한 체인을 구현해보면 다음과 같을 것이다.
# 블록1
block1 = { 'INDEX':0,
'판매자' : '파이썬',
'구매자' : '김민수',
'개수' : '3개',
'시간' : '1990-01-01 00:00:00',
'previous_block' : None
}
# 블록2
block2 = { 'INDEX':1,
'판매자' : '김민수',
'구매자' : '김영수',
'개수' : '3개',
'시간' : '1990-01-02 01:02:03',
'previous_block' : block1
}
# 블록3
block3 = { 'INDEX':3,
'판매자' : '김영수',
'구매자' : '박명수',
'개수' : '3개',
'시간' : '1990-01-03 02:03:04',
'previous_block' : block2
}
# 블록4
block4 = { 'INDEX':4,
'판매자' : '박명수',
'구매자' : '이미래',
'개수' : '3개',
'시간' : '1990-01-04 02:03:04',
'previous_block' : block3
}
# 블록5
block5 = { 'INDEX':5,
'판매자' : '이미래',
'구매자' : '최용수',
'개수' : '3개',
'시간' : '1990-01-05 02:03:04',
'previous_block' : block4
}
# 블록6
block6 = { 'INDEX':6,
'판매자' : '최용수',
'구매자' : '강영희',
'개수' : '3개',
'시간' : '1990-01-06 02:03:04',
'previous_block' : block5
}
위 코드를 파이썬에서 실행시키면 모든 거래 내역이 포함되며 previous_block이라는 체인으로 연결된 블록체인으로 데이터를 저장할 수 있다.
지금 단 6개의 블록이 생성되었는데도 벌써 데이터의 길이가 상당한데, 비트코인은 75만개의 블록이 생성되었으며 실시간으로 약 10분당 1개씩 블록이 생성되고 있다.
또한 이더리움은 150만 개 이상의 블록이 생성되었으며 약 12초에 1개씩 블록이 생성되고 있다.
위 코드와 같은 방식으로 계속 거래가 이어진다면, 최후 블록의 길이는 너무나도 길어서 활용할 수 없을 것이다.
따라서 이를 해결하기 위해 다음의 '암호해시'라는 새로운 기술이 활용된다.
블록체인의 핵심 : 암호 해시
암호 해시에 사용되는 '해시'라는 용어는 잘게 부수고 다진다는 의미이다.
우리가 흔히 아는 해시브라운의 해시도 같은 의미인데, 이 해시브라운을 만들기 전 원료인 감자들의 모양은 각양 각색이지만, 감자를 잘게 다진 뒤 일정한 조리 과정을 거치면 동일한 모양의 직사각형 해시 브라운이 만들어지게 된다.
즉 원본과 무관하게 동일한 결과물을 나타낼 수가 있는데, 공교롭게도 이와 이름이 유사한 '암호 해시' 알고리즘이 블록체인 기술에서 핵심적인 역할을 수행한다.
앞서 블록체인을 파이썬으로 구현해보면서 블록의 개수가 증가할 때 그 길이도 계속 증가한다는 문제점을 발견했었다.
이 문제를 바로 암호'해시' 알고리즘이 해결해준다!
암호 해시도 앞서 예시를 들었던 해시브라운과 같이, 원본 텍스트의 길이와는 전혀 무관하게 같은 길이와 같은 모양의 결과 해시값을 출력해준다. 아래 예시를 통해 그 특성을 자세히 알아보자.
import hashlib
msg = hashlib.sha256(str("원본텍스트").encode()).hexdigest()
print(msg) # bd6341f9f5f40ffd309379c106165b4a064e8d90e9406016cc6b5638bed4f15c
msg1 = hashlib.sha256(str("원본 텍스트").encode()).hexdigest()
print(msg1) # 94a6771df8c6866a45d404598f230766a8faae53e7bd579eff9e5bdbe20b170a
msg2 = hashlib.sha256(str("1234").encode()).hexdigest()
print(msg2) # 03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
msg3 = hashlib.sha256(str("""동해 물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라 만세.
무궁화 삼천리 화려 강산
대한 사람, 대한으로 길이 보전하세.""").encode()).hexdigest()
print(msg3) # 7132cd3a3a40b18052461954fb00e924c1445e5ebb65a4d4c66dcdd4d8214747
msg = hashlib.sha256(str("원본텍스트").encode()).hexdigest()
print(msg) # bd6341f9f5f40ffd309379c106165b4a064e8d90e9406016cc6b5638bed4f15c
위 코드의 실행 결과를 통해 다음 사실을 알아낼 수 있다.
1. 모두 똑같은 양식의 결과값을 리턴한다.
- 위의 5가지 케이스 모두 숫자, 알파벳, 대/소문자가 섞인 64개의 글자를 리턴한다.
- input 값이 텍스트이든 숫자이든, 텍스트의 길이가 길든 짧든 무관하게 모두 64개의 문자가 조합된 결과값이 산출된다.
2. 미묘한 차이가 큰 차이를 만든다.
- 위 예시의 첫 번째와 두 번째 결과값을 비교해보면, 띄어쓰기 하나 차이인데 64개로 길이가 동일하다는 것을 제외하고는 완전히 다른 결과값을 보여준다.
- 이를 통해 원본 내용에서 조금만 조작이 발생하더라도 그 결과값은 완전히 달라진다는 것을 알 수 있다.
- 결국 결과값을 비교해보며 원본 내역을 알아차릴 수 없는 "비가역성 특성"을 가짐
3. 동일 input, 동일 return
- 암호 해시함수는 일관성이 있다. (동일한 값을 입력하면 항상 동일한 결과값을 출력)
- 첫 번째 예제와 시간이 흐른 뒤 마지막에 다시 값을 값을 해시 함수에 넣었을 때, 조금의 차이도 없이 똑같은 결과값을 생성하는 것을 볼 수 있다.
위 3가지 특징 덕분에 암호해시를 사용하면 64개의 숫자와 문자의 조합의 똑같은 형식을 원본 내용의 변화가 있었는지 확인할 수 있으며, 원본 내용을 유추할 수 없게 요약할 수 있다.
이 암호해시를 활용해서 앞서 보았던 블록체인 코드의 단점을 개선해보면 다음과 같다.
# 블록6
block6 = { 'INDEX':6,
'판매자' : '최용수',
'구매자' : '강영희',
'개수' : '3개',
'시간' : '1990-01-06 02:03:04',
'previous_block' : hashlib.sha256(str(block5).encode()).hexdigest()
}
두 블록을 연결하는 체인 부분인 previous_block이 기존에는 block5 전체 거래 내역이 들어가 있었다면, 변경 후에는 위와 같이 암호해시를 활용하여 암호화된 64개의 문자가 들어간 것이다.
그 결과 30줄이 훨씬 넘었던 긴 결과값이 암호해시를 통해 6줄로 단축되었다.
만약 거래 데이터가 100만 개가 쌓인다면 기존의 암호해시가 없는 방식에서는 5000만 줄이 넘는 블록이 만들어지겠지만, 암호해시를 활용할 경우 블록의 개수와 무관하게 "단 6줄"로 표현할 수 있다!
또한 과거의 데이터가 조금이라도 조작된다면 그 해시값은 완전히 다른 결과를 리턴할 것이기에 블록의 과거 이력을 조작하는 것 또한 불가능해진다.
블록체인 내의 과거 거래 내역을 바꾸려면 이후 모든 블록의 암호해시값을 바꾸어 줘야 하고 분산 저장된 여러 컴퓨터(노드)의 암호 해시값을 동시에 바꾸어 주어야 하므로 과거의 거래 내역을 수정하는 것은 불가능하다.
암호해시에 대하여...
인간의 역사에서는 적으로부터 비밀을 지키며 메시지를 주고받기 위하여 다양한 암호화 방식이 연구되고 개발되어 왔다. 고대 그리스에서 사자의 머리를 깎고 메시지를 쓴 후 머리를 길러서 보내던 방식과 로마의 시저 암호(ex. a는 3번 뒤로 이동하여 (K, x도 3칸 이동하여 a로 표기) 등 이 그 대표적인 예다. 근대에 다양한 전쟁을 거치며 에니그마 암호 등으로 발전하였으며 현대에 는 공개키 암호 양자 암호 등으로까지 발전하였다. 해시암호(SHA: Secure Hash Algorithm)는 1993년 미국의 국가안보국(NSA)이 제작하였으며 이후 위험성을 줄이고 안정성은 높이며 SHA2, SHA-3 등으로 발전해 오고 있다.
암호해시는 전처리와 해싱의 2가지 단계로 구성되어 있다.
우선 전처리 단계에서는 input 값의 길이에 관계없이 padding 알고리즘을 통하여 동일한 길이의 문자열(SHA-256의 경우 512bit) 을 만들며 해당 문자열을 다시 쪼갠다(SHA-256의 경우 32bit씩 16개로).
이후 해싱 단계에서는 내부 조건에 따라 H, K W라는 값을 구한 뒤 이 값들의 조합으로 최종 암호화된 값을 산출한다.
암호해시의 원래의 값으로부터 암호값을 알 수는 있지만 암호값으로부터 원래 값을 예측할 수 없는 역상저항성, 원본값이 단 1비트만 바뀌더라도 결과값이 완전히 바뀌어 버리는 Avalanche Effect 등의 특징이 있다. 이러한 특징 덕분에 대한민국의 인터넷 뱅킹, 윈도우 업데이트는 물론 블록체인 기술에서도 활용되고 있으며, 최근에는 영상을 암호해시화하여 영상의 내용을 알 수 는 없지만 필터링해야 하는 유해한 내용(폭력적 영상, 음란물 등)을 차단하는 역할까지 담당하고 있다.
블록체인의 구성요소
지금까지는 거래 내역 데이터를 바탕으로 하는 데이터로 샘플 블록을 만들고 체인으로 연결하는 간단한 방식으로 블록체인에 대해 알아보았다.
이제 실제(이더리움 & 비트코인)은 어떠한 요소로 구성되어 있으며 각 요소는 어떤 역할을 담당하는지 알아보자.
블록체인의 블록은 거미에 비유할 수 있다!
<머리(Header) 부분 : 블록의 고유 정보>
- 블록의 생성 번호 : 블록이 몇 번째로 생성되었는지에 관한 정보
- 블록의 생성 시간 : 블록이 생성된 시간
- 블록의 채굴자 : 블록을 채굴하여 그 보상을 받아간 지갑 주소
- 블록 채굴자의 보상값 : 채굴한 결과로 받은 보상값
- 블록 채굴 난이도: 블록을 채굴하기 위한 난이도
- 채굴 Nonce 값 : 채굴의 답안
- 블록 사이즈 : 블록에 저장된 데이터의 총 사이즈
- 이전 블록의 해시값 : 과거 데이터의 변조 여부 확인
- 이번 블록 몸통 내역의 해시값 : 이번 블록에서 데이터 위변조 여부 확인
<몸통(Body) 부분 : 블록의 거래 내역 정보>
- 거래 내역 : 해당 블록이 생성될 동안 발생된 모든 거래 내역
위와 같은 블록체인의 구성을 파이썬으로 구현하면 다음과 같다.
import datetime
import hashlib
block_body = { "거래내역1" : {
'판매자' : '파이썬',
'구매자' : '김민수',
'개수' : '3개',
'거래시간' : '1990년 1월 1일 00시 00분 00초',
'거래수수료' : '0.001개'
},
"거래내역2" : {
'판매자' : '김민수',
'구매자' : '김영수',
'개수' : '3개',
'거래시간' : '1990년 1월 2일 01시 02분 03초',
'거래수수료' : '0.001개'
}
}
block_header = {'블록의 생성 번호' : 0,
'블록의 생성 시간' : datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'블록의 채굴자' : "0xea674fdde714fd979de3edf0f56aa9716b898ec8",
'블록 채굴자의 보상 값' : 2.132,
'블록 채굴 난이도' : 12382889997310022,
'Nonce' : '0x7ccf42b8605d031f',
'블록 사이즈' : '178556 bytes',
'이전 블록의 해시값' : '0xelf3d0e83542e20735d453006cc6d8975920e7aec951c3b974eade52901e97e7',
'이번 블록 몸통 내역의 해시값' : hashlib.sha256(str(block_body).encode()).hexdigest()
}
body_hash = hashlib.sha256(str(block_body).encode()).hexdigest()
block1 = {
'header' : block_header,
'transaction' : block_body
}
print(block1)
그렇다면 실제 가동 중인 블록체인 네트워크에서도 정말 위와 같은 구성 요소들로 블록이 존재하는지 이더리움 블록체인 네트워크의 블록 정보를 확인해보자.
이더리움 블록체인 공개 사이트 접속 : https://etherscan.io/
가장 latest block을 눌러보았다.
블록을 클릭하면 위와 같은 화면이 나오는데, 블록의 생성 번호, 생성 시간, 거래 내역, 채굴자, 보상값, 난이도, 사이즈, 수수료, 이번 블록 Body의 해시, 이번 블록의 해시값 등의 세부 정보를 모두 열람할 수 있다.
블록 내의 transcation 관련 데이터도 열람할 수가 있다.
왼쪽부터 순서대로 거래 해시, 거래 구분, From 지갑 정보, to 지갑 정보, 해당 이더 개수 이다.
이처럼 실제 블록의 구성 요소를 현재 운영 중인 이더리움 사이트에서 확인할 수 있으며, 각 블록에 저장된 세부 거래 내역까지도 확인할 수 있다. (비트코인은 www.blockchain.com 에서 확인 가능)
그러나 국내 가상자산거래소에서 이더리움을 거래하면 그 거래 내역을 사이트에서 확인할 수는 없는데, 이는 가상자산거래소에서 거래하는 것이 가상자산거래소의 큰 ETH 지갑 내부에서 거래소의 중앙화 서버 내에 분리된 사용자의 계정으로 거래가 이루어진 것이기 때문이다.
블록체인의 채굴
<기존의 금융 시스템>
우리는 은행에 돈을 예치하고 은행 앱에서 잔액을 조회할 수 있는데, 이는 우리의 돈이 은행에 보관되어 있으며 이 정보는 은행이 소유한(중앙화된) 데이터베이스에 저장되어 있기 때문이다.
은행은 이 데이터를 보관하기 위해 각종 서버 운영 비용을 지불할 것이다.
그리고 그 비용은 최종적으로 은행을 이용하는 고객들이 여러 서비스를 이용하며 지불하게 된다.
<블록체인>
이더리움 네트워크를 생각해보면, 우리는 메타마스크에서 잔액을 조회할 수 있다.
이 메타마스크는 (탈중앙화된) 이더리움 네트워크에서 내 잔액 정보를 가져온다.
내 잔액 정보는 (탈중앙화된) 이더리움 네트워크에 저장되어 있다.
그렇다면 이더리움 네트워크에 저장된 데이터는 물리적으로 어디에 저장되어 있는 것이며, 이더리움 네트워크의 데이터 저장을 위한 운영 비용은 누가 지불하는 것일까?
가상자산 거래소에 저장되어 있는 가상자산의 경우는 다르다.
이는 은행 예금과 마찬가지로 가상자산거래소가 소유한 (중앙화된) 서버에 가상자산 소유 정보를 저장하고 있으며, 가상자산거래소가 운영비용을 지불한다. 여기세 거래에 참가하는 참가자들의 수수료로 이 비용을 충당한다.
이더리움 네트워크는 탈중앙화되어있기에 별도의 운영 주체가 없으며, 전 세계의 자유로운 참여자(노드)들이 본인의 PC 혹은 서버를 기반으로 이더리움 네트워크에 참여한다.
=> 따라서 각각의 참여자 (노드)들은 본인이 직접 하드웨어 비용, 전기세, 소프트웨어 비용, 관리 비용 등을 지불!
이런 서버 운영 비용에 대한 보상을 제공하기 위해 이더리움 네트워크에서는 채굴 보상을 지불하고 있다.
즉, 한 개의 블록에 거래 내역들이 저장되고, 그 블록을 생성한 노드에게 보상을 지불하는 것이다.
Q. 수 많은 노드 중 어떤 노드에게 이 블록 생성 권한을 부여?
A. 이더리움 네트워크는 모든 노드에게 동일한 문제를 내고 그 문제를 가장 빨리 해결하는(=채굴하는) 노드에 블록 생성 권한 (=블록 채굴에 따른 보상 수여 권한)을 부여한다.
import random
import string
import hashlib
# 이더리움 네트워크가 낸 문제
PROBLEM_WORD = "a" # 찾아야 하는 단어
PROBLEM_DIFFICULTY = 1 # 난이도 숫자, 숫자가 높아질수록 난이도가 높아짐
# 위 문제의 경우 해시의 값 1번째 자리가 a이면 문제 해결(=채굴 완료)
## 채굴
start_nonce = random.choice(string.ascii_letters)
i = 0
while True:
nonce = start_nonce + str(i)
nonce_result = hashlib.sha256((nonce).encode()).hexdigest()
print(i, nonce, nonce_result)
if nonce_result[0: PROBLEM_DIFFICULTY] == PROBLEM_WORD * PROBLEM_DIFFICULTY:
nonce = nonce_result
break
i += 1
위 파이썬 예제 코드를 살펴보면, 현재 이더리움 네트워크가 문제를 제시하였고 내용으로는 해시의 결과값 앞의 n자리 숫자가 동일하게 나오는 것을 제시하는 것이다.
따라서 노드에서는 랜덤으로 시작점을 잡고 (start_nonce) 이후 1씩 더해가며 암호해시의 결과값이 문제에 부합하는 담안을 찾는다.
위 예시에서는 현재 7번의 반복 끝에 암호해시를 통하여 a가 1번 반복되게 하는 nonce인 'L7'을 찾은 모습이다!
PROBLEM_DIFFICULTY를 2로 바꾸는 순간 위와 같이 난이도도 높아져 104번의 반복 끝에 답을 찾은 것을 볼 수 있다.
(Nonce 값은 "d104")
이러한 채굴을 위해서는 참여자의 컴퓨터나 서버(노드)가 계산이 많이 필요한 어려운 문제를 해결하기보다는 단순 반복 문제를 빠르게 해결해야 한다.
따라서 블록체인의 채굴에는 소수의 높은 연산력을 보유한 CPU보다, 다수의 낮은 연산력을 보유한 GPU가 그 이점을 발휘한다.
최종적으로 기존 금융 서비스 (중앙화 서버)와 블록체인 네트워크(탈중앙화 서버)의 송금 방식을 비교해보자.
기존 금융 서비스 => 송금을 요청하면 요청 내역이 서버에 기록되고 송금 완료됨
블록체인 네트워크 => 송금을 요청하면 요청 내역이 블록 생성 대기 중인 거래 내역 리스트에 추가 + 이후 어떤 노드가 블록체인 네트워크에서의 문제를 풀었을 때 (채굴에 성공) 송금 내역이 블록체인 네트워크에 기록되며 송금이 완료됨
따라서 블록체인 네트워크에서의 송금은 일정 시간의 delay가 발생!!
<채굴 난이도가 매번 조정되는 이유>
위의 채굴의 원리를 통해 블록 생성 주기 = 채굴 완료 주기 임을 알 수 있음.
그러나 블록체인 네트워크에 하드웨어를 제공하며 참여하는 참여자의 수는 일정하지 않다.
채굴은 참여 모수가 증가할수록 문제를 푸는 시간이 감소하고 참여자가 적을수록 문제 푸는 시간이 증가!
이렇게 채굴 완료 주기가 변동된다면 블록체인 네트워크의 사용자들은 안정감을 느끼지 못한다.
이에 실제로 비트코인 네트워크는 대략 10분에 1개의 블록이, 이더리움 네트워크에서는 대략 15초에 1개의 블록이 생성됨
결국 참여 노드가 많을 경우에는 난이도를 높게 하고, 노드가 적을 경우에는 난이도를 낮게 하여 블록의 생성 시간을 일정하게 유지한다.
비트코인 vs 이더리움 : smart contract
현재 블록체인 = 비트코인 으로 대표될정도로 비트코인은 '원조'라는 간판을 달고 있지만, 비트코인의 라이벌인 이더리움은 비트코인에 비해 시가 총액도 낮고 유명세도 현저히 낮으며, 법적 통화로 선포한 나라도 없다.
그러나 이더리움의 단 한 가지 특성 덕분에 비트코인과 맞먹는 세계 2번째 블록체인 네트워크로 인정받고 있고 '디지털 원유'라고 불리우는데, 이 차이는 바로 "스마트 컨트랙트(smart contract)"이다!
import datetime
import hashlib
# 스마트 컨트랙트가 있는 블록체인의 블록 구조 (이더리움)
block_body = { "transaction1" : {
'판매자' : '파이썬',
'구매자' : '김민수',
'개수' : '3개',
'timestamp' : 1652247422892844,
'smart_contract' : {}
},
"transaction2" : {
'판매자' : '김민수',
'구매자' : '김영수',
'개수' : '3개',
'timestamp' : 165224743233231,
'smart_contract' : {}
}
}
block_header = {'블록의 생성 번호' : 0,
'블록의 생성 시간' : datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
'블록의 채굴자' : "0xea674fdde714fd979de3edf0f56aa9716b898ec8",
'블록 채굴자의 보상 값' : 2.132,
'블록 채굴 난이도' : 12382889997310022,
'Nonce' : '0x7ccf42b8605d031f',
'블록 사이즈' : '178556 bytes',
'이전 블록의 해시값' : '0xelf3d0e83542e20735d453006cc6d8975920e7aec951c3b974eade52901e97e7',
'이번 블록 몸통 내역의 해시값' : hashlib.sha256(str(block_body).encode()).hexdigest()
}
body_hash = hashlib.sha256(str(block_body).encode()).hexdigest()
block1 = {
'header' : block_header,
'transaction' : block_body
}
print(block1)
차이는 아주 간단한데, 블록의 Body에 오직 'smart_contract'라는 인자가 하나 추가된 것이다.
그러나 이 smart contract는 많은 기능을 수행하는데, 예로 장영희의 결혼식 기념 사진 파일이나, 김민수의 생애 첫 이력서 파일을 파일명과 파일 데이터와 함께 smart_contract 인자에 넣어서 저장할 수 있다.
이 덕분에 단순히 거래 내역만을 저장하던 비트코인과 다르게 더욱 다양한 정보를 저장하게 되었고, 이는 스마트 컨트랙트를 활용하여 NFT를 제작한 것으로 볼 수 있다!
이 외에도 새로운 토큰인 PGB에 대한 정보를 넣으면 Layer2 코인인 PGB 토큰이 발행되었다고 볼 수도 있고, PGB_DEFI 라는 함수를 스마트 컨트랙트에 정의하면 누구도 위변조할 수 없는 함수를 호출하여 블록체인 네트워크에 Defi를 제작한 것으로 볼 수 있게 된다.
블록체인과 DApp
국가원수를 선출하는 방식에 따라 다양한 정치 체제가 존재하듯, 블로게인 네트워크에는 블록을 형성하는 원장을 선정하는 방식에 따라 다양한 LAYER1 블록체인 네트워크들이 존재한다.
그리고 그 Layer1을 실행하는 블록체인 네트워크의 흥망성쇠에 따라 각 블록체인 체제의 장단점이 분석된다.
지금의 대표적인 Layer1 방식은 비트코인과 이더리움이 채택했던 POW이며 이보다 새로운 강점을 가진 블록체인 기술들이 기존의 합의 방식에 도전하기도 한다.
한편, 각각의 합의 방식으로 구성되는 LAYER1 블록체인에는 여러 LAYER2 토큰들이 존재한다.
예를 들면 은행(DeFi), 게임회사(P2E), 증권사(DEX)의 역할을 하는 Layer2 토큰들이 이더리움 네트워크에도 있고, 바이낸스 네트워크에도 있을 수 있다.
(Layer1 네트워크의 특성에 따라 Layer2 토큰이 존재하지 않을 수도 있다. 예: 스마트 컨트랙트 방식을 제공하지 않는 비트코인 네트워크에서는 P2E 토큰이 존재하기 어렵다.)
1) LAYER1 코인
위의 Layer1 코인들은 정치 체제로 예시가 되었다. 다양한 참여자(국민)가 어떠한 방식으로 국가 원수를 선택하느냐에 따라 각각의 정치 체제가 결정된다. 마찬가지로 여러 참여자(노드)가 존재하는 분산원장의 특성을 가진 블록체인의 네트워크에서는 다양한 참여자(노드)들이 어떠한 방식으로 블록체인 네트워크의 의사결정에 합의하는가에 따라 LAYER1의 방식이 구분된다. 대표적인 합의 방식으로 PoW, PoS, dPoS, PBFT, PoH 등이 존재한다.
- PoW (Proof of Work, 작업 증명): 현 블록체인 네트워크 합의 체계의 1 대장
- 주요 블록체인 네트워크인 비트코인에서 사용중이며 이더리움 네트워크 또한 PoS로 변경되기 전까지 PoW 방식을 활용하였음
- 블록체인 네트워크에서는 지속적으로 작업 (문제)을 발생시키며, 수많은 참여자 (노드)는 작업 (문제) 을 해결하기 위해 노력 (채굴) 함
- 그 중 가장 처음 작업 (문제)을 증명 (해결, 채굴)한 사람이 권리를 가지고 블록을 체결한다. 작업 (문제)은 간단한 수학 문제와 같은 종류로 고성능의 중앙처리장치 (CPU)혹은 그래픽카드 (GPU)를 필요로 한다.
- 작업을 성공 (채굴)한 참여자 (노드)에게는 보상 (채굴 비용)이 주어지고, 이에 수많은 참여자 (노드)는 그 보상을 노리고 고성능의 하드웨어에 전기를 소비한다. 그렇기 때문에 전력 낭비를 한다는 치명적인 단점이 있다.
- 시험에서 1등한 사람이 네트워크의 의사결정자가 된다.
- PoS(Proof of Staking. 지분 증명): 기존의 1대장 Pow를 가장 강하게 견제하는 방식
- 과거 Pow 방식을 채택하였던 이더리움 또한 업그레이드되며 이 PoS 방식으로 변화 해당 블록체인 네트워크의 가상자산을 예치 (Staking)해야만 블록체인 네트워크에 참여가 가능
- 참여자들은 PoW처럼 연산 능력으로 경쟁하는 것이 아닌, 예치(Staking)한 지분이 많아질수록 블록을 체결할 가능성(Pow의 채굴 성공)이 높아진다. 참여자가 지분을 기반으로 참여한다는 점에서 51% 공격에서 보다 안정성을 가진다 (많은 가상자산을 가진 참여자가 해당 블록체인 네트워크를 공격할 경우 본인의 지분 가치가 하락하기에 비현실적이기 때문)
- 또한, 높은 연산 능력을 함용하지 않기에 전력 소모 등 환경문제에서 자유로움
- 다만 지분을 보유해야만 참여자(노드)가 될 수 있기에 진정한 탈중양화인가에 대한 의문이 존재
- 주주들의 투표에서 1등한 사람이 네트위크의 의사결정자가 된다.
- dPoS(delegated Proof of Stake, 위임 지분 조명)
- PoS의 단점인 탈중앙화에 대한 의문성을 해결하기 위하여 등장한 합의 방식
- 대표적인 가상자산으로 이오스, 스팀이 존재한다.
- 지분을 가지고 블록체인 네트워크에 참가한 참여지들은 투표권을 가지고 모든 의사결정에 직접 참여하는 것이 아니라 대표자(delegate)를 선정하여 그 대표자들 간의 의사결정을 통하여 블록체인 네트워크의 의사결정을 진행
- 대표자들 간의 소통만으로 진행될 수 있기에 블록 체결 속도가 월등히 빠르며 모든 참여자가 간접적으로나마 의사결정에 참여한다는 점에서 탈중앙화에 조금 더 가깝다는 의미가 있음
- 단점으로는 대표자의 수가 적으면 그 대표자의 보안 수준이 낮을 경우 위험이 발생할 수 있으며 대표자의 수가 늘어나게 되면 결국 PoS와 동일한 문제점을 가지게 됨
- 국민들이 선정한 국회의원들의 투표에서 1등한 사람이 네트워크의 의사결정자가 된다.
- PBFT(Practical Byzantine Fault Tolerance. 프랙티컬 비잔틴 장애 허용)
- Pow, PoS와 같이 모든 대중이 참여자(노드)로 활동이 불가하며 인증 기관에서 발급한 인증서를 보유한 참여자(노드)들만이 블록체인 네트워크에 참여 가능
- 대표적인 가상지산으로 리플, 네오, 질리카 동이 있다.
- IBM이 오픈소스로 공개한 하이퍼레저 블복체인 네트워크 또한 PBFT 방식을 활용
- 인증서 기반으로 운영되기에 채굴이 불필요하며 초기에 네트워크에 필요한 가상자산(코인)들이 모두 생성된다.
- 인증서를 받은 노드들의 다수결에 따라 협의 알고리즘이 진행된다.
- 국가의 설립에 기여한 귀족들에 의해 네트워크 의사결정자가 선발된다.
- PoH (Proof of History, 역사 증명): 이더리움 타도를 내세우며 나타난, 솔라나 네트워크가 제시한 합의 방식
- PoS로부터 그 개념을 발전시켰다.
- 블록체인 네트워크상의 노드들이 거래 발생 시점을 참여자 (노드)들이 함께 검증하고 합의를 거친 뒤에 거래 내역에 저장
- 거래 내역과 시간 정보를 함께 암호화하여 검증 필요 내용이 감소하고 이에 따라 블록체인 네트워크의 속도 증가
- 단점으로는 해당 네트워크의 참여자(노드)가 되기 위해서는 PoS보다 높은 수준의 하드웨어가 요구된다는 것
2) LAYER2 이상 토큰
비트코인 이후 스마트 컨트랙트 기술을 탑재한 이더리움 네트워크가 나타났고, 그 이후 BNB Chain, Solana Chain 등 다양한 블록체인 네트워크가 탄생했다.
다음 단계로는 이 블록체인 네트워크를 활용하여 어떤 비즈니스 모델 (DApp)을 만들 것인지가 핵심 이슈가 되었다.
블록체인 기술을 활용하여 탈중앙화 거래소를 만들고, 탈중앙화 게임, 작품 경매 등 다양한 DApp 아이디어들이 탄생하고 소멸되고 있다.
DApp 제작사에서는 DApp 기반 내에서 통용될 화폐(토큰)을 만들며 우리는 이들을 Layer2 코인이라고 부른다.
<현재까지의 대표적인 DApp 분야>
- DeFi(Decentralized Finance, 탈중앙화 금융)
- 기존의 금융 서비스는 모두 은행, 보험사 등 중앙화된 기업을 통해 진행됨
- DeFi는 이와 대비된 탈중앙화 금융 서비스로 사용자들은 DeFi를 통하여 대출을 받거나 예금을 할 수도 있다.
- 또한 일정 금액을 지불하여 어떤 사건이 발생할 경우 보상을 받는 보험에 가입할 수도 있다.
- P2E(Play To Earn, 게임)
- 기존의 게임들은 모두 중앙화된 게임사의 서버 내에서 진행된다.
- 따라서 게임사가 부도가 나서 서버가 폐쇄되 게임 내 사용자들의 모든 자산은 사라진다.
- 하지만 P2E에서는 게임 이력이 탈중앙화된 블록체인 네트워크에 남는다.
- 게이머들은 게임을 통해 얻은 소득을 블록체인 네트워크의 가상자산으로 인출할 수 있고 이를 거래소에서 현금과 거래할 수 있다.
- 게이머들은 돈을 벌기 위해 게임을 하게 된다(Play To Earn).
- DEX(Decentralized Exchange, 탈중앙화거래소)
- 기존의 거래소들은 거래소 서버 내에서 참여자들 간에 거래가 일어난다.
- 거래소의 규칙에 따라 수수료를 지불하며 서버가 다운되면 일시적으로 모든 거래가 중단된다.
- DEX는 DeFi와 같은 탈중앙화된 거래소로 블록체인 네트워크 기반으로 거래가 이루어진다.
- 스마트 컨트랙트에 명시된 기준에 따라 거래가 이루어지며 수수료 또한 블록체인 네트워크에 가스비 형식으로 지불된다.
- Social Media
- SNS에 글을 쓰면 작성자는 ‘좋아요’를 받는다. 그것이 대가의 전부다(물론 최근에는 PPL, 광고 수익 등 다양한 방식으로 이득을 얻기도 한다).
- 하지만 Decentralized Social Media(탈중앙 소셜미디어)에서는 글 작성자들이 콘텐츠의 소비 내역에 따라 이익을 얻는다.
+ 아래 사이트를 통해 다양한 DApp을 알아볼 수 있다!
https://dappradar.com/rankings
'Blockchain' 카테고리의 다른 글
[Blockchain] Block Wallet 사이트 만들기 (0) | 2024.10.05 |
---|---|
[Blockchain] 파이썬으로 만드는 비트코인 (PoW) - 노드 구축 및 운영해보기 (0) | 2024.09.29 |
[Blockchain] 블록체인 네트워크 구축을 위한 준비 - SQLite, flask, JS (3) | 2024.09.21 |