1. 개요
2. 블록체인 기본 개념
3. 채굴이 그래서 뭐요?
4. POW란?
5. POW - hashcash
6. 여기서 다시 짚어보는 채굴 행위란?
7. 비트코인 채굴 난이도
8. 채굴 난이도 동적 조절
1. 개요
인터넷에 블록체인의 채굴에 대한 설명이 많은데 대략 어떤 느낌이구나... 싶은 글은 많지만 그런 글들을 읽어도 "그래서 채굴이 뭔데?" 라고 물어보면 비개발자는 물론이고 개발자도 충족시켜줄 만한 답변을 찾기 쉽지 않다.
왜 완벽한 이해가 안됐는지 돌이켜보면 사실 채굴 행위 자체에 대한 의해는 큰 의미가 없으며, 블록체인 세상에서 채굴이라는 행위가 갖는 맥락적인 이해까지 해야 진정한 의미를 알 수 있다.
그래서 일하면서 틈틈이 공부해서 얻어낸 채굴에 대한 전반적인 지식을 정리해서 배포해보도록 하겠다.
2. 블록체인 기본 개념
비개발자
채굴에 대한 이해를 하기 위해서 최소한 블록체인에 대한 이해를 해야 한다.
왜 이런 것이 생겨났냐? 지금 세상의 데이터의 관리 주체는 마치 당신의 핸드폰 정보를 삼성, 아이폰이 갖고 있는 것처럼 특정 개인이 하고 있다.
근데 이것이 맘에 안 들어서 세상 모두가 관리 주체가 되자는 느낌으로 탄생한 이념이 web3며 기반 기술은 블록체인이다.
"마치 우리 스스로 잘 해낼 수 있다!" 이를 탈중앙화라고 하며 IT계의 무정부주의 같은 느낌이다.
왜 탈중앙화를 해야 하나? 과거 네이버 실시간 검색어에 대한 조작 논쟁이 끊이지 않았던 것 기억하는가?
네이버 실시간 검색 랭킹을 누구도 조작할 수 없도록 시스템을 만든다고 생각하면 된다. 이념이 좀 이해가 되는가?
탈중앙화는 데이터에 대한 투명성을 보장해주며, 이는 곧 시스템에 대한 투명성으로 이어진다.
그럼 어떻게 우리 스스로 데이터를 배포하고 관리하느냐?
"데이터를 블록으로 쪼개고 우리 모두가 데이터를 읽는(read) 동시에 쓰면(write) 된다." 라고는 하지만 사실 우리는 읽기(read)만 하고 데이터를 쓰는(write) 사람을 나눠놨다. 그리고 보통 데이터를 쓰는 사람을 채굴자라고 하며 채굴을 통해 데이터를 블록체인상에 올릴 수 있다.
개발자
솔직히 블록체인 하도 많이 들어서 이런 얘기는 시시콜콜하죠?
네 압니다. pass
3. 채굴이 그래서 뭐요?
말이 길었다. 그래서 채굴이 뭐냐? 6번에서 한번 더 설명할 것이지만 일단 간단히 채굴이 뭔지 에피타이저로 맛보도록 하자.
비개발자
돈을 벌고 싶은 누군가가 본인의 컴퓨터를 사용하여 엄청나게 어려운 수학 문제를 푼다.
그 수학 문제를 풀면 블록체인 네트워크상에 데이터를 올릴 수 있는 방법을 알게 되고 그곳에 데이터를 올리고 싶은 사람의 데이터를 받아서 대신 올려준다. 그러면 문제를 풀고 데이터를 올려준 사람은 보상으로 코인을 얻게 된다.
이것이 채굴의 기본적인 의미다.
여기서 어려운 수학 문제를 Proof Of Work라고 하는데 아래에서 POW의 유래와 의미를 알아보도록 하자.
개발자
스택오버플로우에서 누군가가 mining을 이렇게 표현했다.
mining is doing the work of finding nonce so that sha256(sha256(data+nonce)) < difficulty
즉 누군가 올리고자 하는 데이터를 받아서 거기에 어떤 난수를 추가해서 해시를 엄청나게 돌리는데 그 해시의 값이 특정 조건을 만족할 때까지 난수를 찾는다.
여기서 만족하는 해시를 찾을 것을 POW라고 하며 다양한 POW가 존재한다. POW의 유래와 정확한 의미를 알아보자.
4. POW란?
Proof Of Work의 의미를 보면 스팸 방지를 위해서 만들어놓은 일정의 지연 장치다.
POW의 유래는 자꾸 스팸메일을 보내서 막기 위해 메일을 요청하기 전에 일정 시간을 쓸 수밖에 없도록 어떠한 조건을 걸어놓은 것이다.
이것을 이해하기 쉽게 비슷한 것을 들고 왔다. 바로 captcha다.
자꾸 사람들이 과도한 반복 요청, 매크로를 하니까 이를 막기 위해 어느 정도 시간이 걸리는 문제를 내는 것인데 거의 비슷하다고 보면 된다.
POW에는 다양한 형태가 있는데 사실 그건 중요하지 않다. POW라는 것이 과도한 요청을 막기 위해 존재한다는 것이 가장 중요하다.
비개발자
왜 10분이라는 시간이 지나야 데이터를 쓸 수 있도록 불편하게 설계해놨는지 궁금할 수 있는데 데이터의 읽고 쓰는 것이 너무 쉬워버리면 보안성, 효율성이 떨어지게 된다. 그렇기 때문에 비트코인은 문제를 푸는데 대략 10분이라는 시간이 걸리도록 세팅을 해놨다.
개발자
POW의 해결 시간을 왜 평균적으로 10분으로 해놨는지 다양한 의견이 있다. 그중 한 가지 예를 들자면 트랜잭션이 블록체인에 올라가면 전체 네트워크에 전파되기까지 약 1분 정도 걸린다고 한다. 그러면 1분 동안 채굴하기 위해 소모된 리소스가 아무 의미가 없어진다. 만약 10분이라는 시간이 POW의 해결 시간이면 대략 10%의 해시 파워가 낭비된다고 볼 수 있다. 만약에 이 시간이 2분으로 짧아지면? 50%의 해시 파워가 낭비되는 것으로 볼 수 있다.
비트코인은 왜 10분이라는 시간을 트랜잭션의 생성 시간으로 했는지 오래 탐구해봤는데 간단한 내용은 아니라서 추후에 다른 게시물에서 정보를 정리할 생각이다. 일단은 이 정도로만 알고 넘어가자!
따지고 보면 "갓토시 나가모토가 10분으로 해놔서" 가 정답이다 ㅋㅋ
5. POW - hashcash
블록체인의 POW에는 다양한 유형이 있다.
한번 알아보자
그만 알아보자
비트코인이 사용하는 POW는 hashcash라고 해서 최초의 작업 증명(POW)이며 유명하다.
비슷한 로직의 소스코드도 널리 퍼져있어서 hashcash POW에 대해서 탐구해보도록 하겠다.
비개발자
상식적으로 생각해보면 보통 수학 문제를 낼 때 잘 만든 문제를 내기 위해서는 출제자가 더 오래 고민한다. 그러면 문제를 어떻게 내주길래 고성능의 컴퓨터가 푸는데만 10분이 걸리는 문제를 생성할 수 있는 걸까?
hashcash POW의 원리는 문제의 정답을 알았을 때는 이것이 정답이라는 것을 순식간에 알 수 있지만 정답을 찾는 과정은 아직 현대 기술로는 엄청난 시간이 걸리는 형태의 문제다.
sha256이라는 암호화 기술이 있는데 아무 문자를 암호화시키면 해시 코드라고 해서 규칙성 없는 일련의 코드를 생성한다. 이 해시 코드의 특징은 해시 코드만으로는 원래 문자열이 뭔지 알아내기 힘들지만 원본 문자를 아는 경우 해당 원본 문자가 정말 해시 코드의 원본 데이터인지 진위여부를 판단하는 것은 굉장히 쉽다.
여러분의 계정 비밀번호도 위와 같이 암호화를 통하여 DB에 저장된다. 비밀번호 원문을 저장하는 건 법에 걸리기 때문에 여러분이 원문을 입력할 때마다 동일한 암호화를 통하여 해시값이 동일한지 판단하여 로그인을 시켜준다.
그럼 각설하고 POW의 hashcash는 어떤 형태의 값을 찾도록 하는지 말해보겠다.
데이터와 특정 문자를 합쳐서 sha256 암호화를 하면 해시가 생성되는데 그 해시의 맨 앞자리에 0으로 연속된 숫자가 나오도록 하는 것이다.
예를 들면 이번 데이터를 올리기 위해서 맨 앞자리가 0000으로 시작하는 해시를 필요로 하면 컴퓨터는 올리고 싶은 데이터에 랜덤 값을 추가해서 앞자리가 0000인 해시가 될 때까지 계속해서 연산 작업을 하는 것이다.
개발자
sha256과 해시에 대해서 충분히 알 것이라고 가정하고 얘기하도록 하겠다.
POW hashcash의 대략적인 로직은 위와 같다. 데이터를 올리고 싶은 사람의 data와 반복될 일 없는 nonce라는 값을 포함시켜서 sha256 해시를 만들고 그 해시의 앞자리에 difficulty 값만큼 0이 반복되는 해시가 나올 때까지 계속해서 돌리는 것이다.
6. 여기서 다시 짚어보는 채굴 행위란?
여기서 한번 더 큰 시점으로 채굴이라는 행위에 대한 이해를 해보자.
먼저 데이터를 올리고 싶은 수많은 이용자가 있을 것이고 채굴자는 이 중 수수료가 높은 데이터 위주로 데이터를 넘겨받아 POW를 통하여 해당 데이터를 블록체인상이 올릴 수 있도록 기여를 하고 보상으로 코인을 받는다.
근데 여기서 난이도라는 개념이 빠지면 또 섭섭하기 때문에 마지막은 채굴 난이도에 대하여 설명하면서 마치도록 하겠다.
7. 비트코인 채굴 난이도
채굴이 꿀이라는 소문이 여기저기 퍼지면서 채굴자는 기하급수적으로 늘어나기 시작했다. 채굴자가 많아진다면 아무래도 문제를 푸는 데 걸리는 시간은 더 짧아질 수밖에 없다. 하지만 비트코인은 채굴자가 많아지더라도 해당 상황을 인지하여 POW 문제를 해결하는 데 걸리는 시간을 절대적으로 동일할 수 있도록 난이도를 가변 변수로 설정해놨다. 즉 채굴자가 많아질수록 난이도가 높아지는 것이고 그렇게 되면 아까 POW에서 필요로 하는 앞자리 0의 개수를 점차 늘리는 것이다.
위 사이트는 과거 비트코인 채굴자의 채굴 이력을 볼 수 있는 페이지다.
해시를 보면 앞자리 0이 들어가 있는 것을 볼 수 있고 아래 당시 채굴 난이도(Difficulty)도 적혀있다.
위 그래프는 비트코인의 채굴 난이도를 의미한다. t는 trillion으로 조를 의미하며 난이도가 비트코인이 꿀이라는 소식이 여기저기 퍼지면서 점차 난이도가 상승하는 것을 볼 수 있다.
난이도가 상승할수록 채굴 대비 떨어지는 수익률이 줄어들기 때문에 자연스럽게 개인 채굴자는 줄어들 것이며 대형 채굴업체들이 다 같이 만족할 만큼의 인프라가 형성될 것이다.
채굴 비용이 너무 과하면 자연스럽게 채굴자가 줄어들 것이고 채굴 효율이 너무 좋으면 다시 채굴자가 늘어날 것이기 때문에 난이도라는 가변 변수 앞에 인간들이 통제된다고 볼 수 있다.(??)
위 사진은 난이도에 따른 해시값에 대한 예시다. POW - hashcash 방식이 대충 이런 느낌으로 돌아간다고 보면 된다.
8. 채굴 난이도 동적 조절
그럼 여기서 궁금한 것이 있다. 비트코인은 어떻게 난이도를 가변 변수로 설정해놨을까?
굉장히 복잡할 것 같지만 엄청 간단한 로직이라서 채굴 난이도 동적 조절에 대한 개념적인 부분까지 설명하고자 한다.
비개발자
채굴이 정상적으로 이뤄질 때마다 당시 시간이 기록된다.
비트코인의 이상적인 채굴 시간은 10분으로 설정되어 있는데 100번째 채굴이 10시 30분에 이뤄졌고 101번째 채굴이 10시 35분에 이뤄졌다면 예상했던 것보다 5분 빠르게 채굴된 것이기 때문에 난이도가 너무 쉬워졌다고 볼 수 있다.
블록체인 네트워크는 인지하여 난이도를 올리고 다음 블록은 해당 난이도를 반영하여 채굴하게 된다.
위의 그림과 같이 채굴이 너무 빠르면 난이도를 높여주고 채굴이 너무 오래 걸리면 난이도를 줄여주는 것을 볼 수 있다.
'블록체인 & 토큰 & NFT' 카테고리의 다른 글
WalletConnect 릴레이 서버 만들기 - 4 릴레이 서버 테스트 (0) | 2022.02.08 |
---|---|
WalletConnect 릴레이 서버 만들기 - 3 릴레이 서버 배포 (0) | 2022.02.08 |
WalletConnect 릴레이 서버 만들기 - 2 GCP 서버프로젝트 세팅 (0) | 2022.02.08 |
WalletConnect 릴레이 서버 만들기 - 1 Godday Cloudflare 연동 (2) | 2022.02.08 |
nodejs web3 스마트컨트랙트 이벤트 구독 끊기는 현상 (0) | 2022.01.20 |