블록체인에서 가장 이해가 안될수도 있는 채굴에 대해서 알아보겠다. 채굴은 퍼블릭 블록체인에서 상당히 중요한 개념이며, 보상과 사용자에게 참여를 유도시키는 핵심기술중 하나이다.
다들, 채굴이 뭔지는 대충은 알고 있을 것이다. 비트코인을 예로 들면, 문제를 맞춘 정답자에게 비트코인을 주게 되는 것이고, 퀀텀은 소유한 양에 맞춰서 이자를 주게 되는 방식이 있다. 그리고 이오스같은 경우는 간접 민주주의 방식으로 모든 사용자에게 동등한 권리를 주지 않고, 대표자들에게 채굴의 권한을 준 후 나눠주는 방식이 있다.
이러한 채굴에 대해서, 하나둘 모두 비교를 하고 싶으나 내용이 워낙 방대할 수 있어서 여기에는 일반적인 비트코인에서 사용되는 채굴 방식을 사례로 들겠다.
채굴의 의미
블록체인에서 채굴을 한다고 할 때, 사실 의미를 2가지로 해석을 할 수 있다. 하나는 코인을 캐내어서 얻는다는 대표적인 사전적 의미인 채굴 또 하나는 의미있는 값을 찾아낸다라는 뜻의 마이닝이라는 의미가 있다. 전자는 일반적인 사전적인 용어이고, 후자는 데이터 마이닝, 데이터 분석쪽에서 쓰이는 용어이다.
블록체인 저자에 따라, 전자 혹은 후자로 해석을 하는 경우가 있지만, 둘다 맞기 때문에 굳이 나눌 필요 없이 보상 즉 리워드와 올바른 답을 찾아내는 과정의 마이닝 둘다 있다로 해석을 하는게 편할 것이다.
채굴이 왜 필요한가?
어떠한 문장이 와도, 일정한 길이의 난수값으로 리턴이 되는 것 정도로 해석할 수 있는 해시값이 바로 채굴에서 상당히 중요한 기술이다. 참고로 여기서 설명하는 채굴은 비트코인에서 사용하는 POW(Proof-of-work)라는, 작업증명방식 채굴만을 설명하고 있다.
비트코인은 탈중앙화 방식이다. 탈중앙화 방식은 개개인의 컴퓨터 즉 노드가 거미줄처럼 엮여 있는 것이고, 서로간의 감시를 통해서 장부를 기록을 하게 된다. 이런걸 퍼블릭 블록체인이라고 하는데, 이때 과연 누가, 자신의 컴퓨터를 전기세를 감안하고 노드를 유지하려 할까?
쉽게 생각했을 때, 토렌트의 시드를 계속 유지하는 사람들 중에는 어떤 데이터를 받는 과정이어서 유지를 하거나 정말 공유하는 마음으로 유지를 하는 사람이 있지만, 대다수는 다운이 완료되는 순간 시드를 삭제한다. 전기세 나가니까. 결국 그 사람들에게 무언가의 보상이 필요하다. 그것이 바로 채굴로 통한 보상이다.
채굴 로직
채굴은 문제를 가장 빨리 맞춘 사람에게 보상(코인)을 받고, 블록의 생성 권한까지 받게 된다. 사람들은 비트코인이라는 코인을 얻기(보상) 위해서, 사람들은 자신의 컴퓨터와 전기세를 기꺼이 헌납을 하고 채굴을 한다.
노드를 유지하고 채굴을 하면서, 사람들은 장부의 조작을 감시하고 문제를 푸는 작업을 수행하게 된다. 아래는 문제의 방식을 쉽게 설명하기 위한 그림이다.
예시의 그림에서는 비트코인재단에서 앞자리가 "8f"인 해쉬값을 찾으라고 하였다. 사용자는 저 문제를 맞추기 위해서 무작위로 문자열을 생성하여 해시함수(Hash Function)에 보낸다. 이 방식을 무작위공격(Brute force attack, 브루트포스 공격)이라고 한다. 그림에서는 처음에 "iamaboy"를 해시함수에 넣으니 "8e"로 시작하는 문자열이 나왔다.
정답이 틀렸으니, 문자열을 바꿔본다. 그리고 다시 해시함수에 던지며, 정답과 비교한다. 이것을 계속 변경해보면서, 해시함수에 연산 요청을 하다가 정답과 맞게 되는 순간에 보상으로 코인을 획득하게 되며, 문제를 맞춘 사용자 즉 노드는 블록을 생성할 권한을 받게 된다.
난이도 변경 방법
초창기 비트코인은 개인의 노트북으로도 충분히 많은 양의 채굴을 할 수 있었다. 문제를 푸는 사람도 없었을 뿐더러 문제의 난이도가 매우 쉬웠기 때문이다. 초창기의 비트코인의 문제처럼 내게 되면, 매우 빠른 시간내에 비트코인은 모두 발행을 하게 될텐데, 이를 방지하기 위해서 다양한 방식으로 난이도를 올리는 방식을 사용한다. 여기서는 몇몇가지의 난이도를 변경하는 방법에 대해서 설명하겠다.
위 문제에서 8f말고, 앞자리가 100이하인 숫자를 가져오라라는 것이 문제였다면 어땠을까? 그럼 당연히 000부터 100까지 정답이 나올 수 있게 된다. 비트코인재단에서 문제의 난이도를 위해서, 1009값을 추가하면 어떨까?
숫자가 하나만 추가됐는데 난이도는 기하급수적으로 올라간다. 이렇게 문자열을 조절하는 방식으로도 난이도를 조절을 할 수 있고, 블록의 생성 시간을 강제적으로 조정을 할 수도 있다. 그러나 이런식의 값을 늘리게 되면 난이도가 너무 올라가기 때문에 이런식으로도 조절이 가능할 것이다. "080"이하의 값을 찾아라. 100에서 80으로 줄었으니 난이도는 20% 올라가게 된다.
퀴즈를 어렵게 내는 것을 떠나서 블록의 생성주기를 늦게 하여, 보상에 대한 획득수를 조절 할 수도 있다. 예를 들어 보상을 5분마다 했었는데, 이 시간을 10분으로 늦춘다면 아무리 문제를 빨리 맞춰도 하루동안 받는 비트코인의 개수는 어쩔수 없이 줄어들게 될것이다. 비트코인의 가격이 계속 오르는 이유는 바로 이 공급이 점점 줄어들기 때문이다.
공급이 꾸준히 유지가 된다면, 수요가 공급을 따라가야 가격이 오르게 되는데 수요가 따라가지 못하면, 당연히 코인의 가격은 내려가게 될 것이다. 이런 원리이기 때문에 비트코인의 가격은 생각지도 못하게 가격이 올랐던 것이다.(공급이 계속 줄어들기 때문..., 비록 지금은 떡락이지만.....)
Reference:
https://needjarvis.tistory.com/240