2024. 2. 15. 22:32ㆍ블록체인/블록체인 기초
채굴
비트코인에서의 채굴(Mining)이라 함은 작업 증명(PoW, Proof of Work)과 보상을 합친 말이다. 블록체인상에서 일어난 일련의 트랜잭션을 누군가가 검증하고 블록에 담아 저장한 다음, 암호화 퍼즐을 풀어 체인에 등록한다. 이 과정이 작업 증명이고, 이에 대한 대가로 채굴자는 비트코인과 수수료를 얻고 새로운 블록이 생성된다. 1
쉽게 말하자면, 블록을 생성하고 보상을 받는 일련의 행위를 채굴이라 말하고, 작업 증명은 암호화 퍼즐을 품으로써 작업에 수행했다는 것을 증명하는 것을 말한다. 암호화 퍼즐을 푼다는 것은 특정 조건을 만족하는 블록의 해시값을 찾는 과정을 말한다. 2
채굴 개념은 P2P 네트워크에서 생기는 문제점을 해결하는 좋은 대안이다. 앞서 작성한 글에서 소개했다시피 블록체인은 P2P 네트워크이고, 이는 데이터를 소비하는 소비자만 늘어나고 다른 사용자들에게 공유하는 공급자의 수는 늘지 않게되는 문제가 생길 수 있다. 비트코인에서는 반드시 전체 원장, 다시 말해 전체 체인의 데이터를 가지고 있어야만 채굴에 참여할 수 있도록 함으로써 이를 해결하였다.
P2P 네트워크에서 각 노드들간의 물리적인 거리차등의 여러 요인에 따라, 서로 간에 가지고 있는 데이터에 불일치가 발생하게 된다. 이때 불일치하는 데이터 중 한 데이터를 옳은 데이터로 여겨 해당 데이터만 남기고 나머지를 버리는데, 이때 어떤 기준으로 옳은 데이터를 결정하는지에 관한 방법이 합의 알고리즘(Consensus Algorithm)이다. 이 글의 아래 부분에서 다루는 내용은 합의 알고리즘 중 작업 증명에 대한 소개이다.
작업 증명
이전에 블록에 대해 다루었던 글에서 블록들은 이전 블록의 해시 값을 가지는 것으로 암호화 링크를 활성화한다 이야기하였다. 다시 말해, 각 블록들은 이전 블록의 해시 값을 헤더에 가지고 있다. 여기서 블록 헤더의 나머지 데이터는 정해져 있으나, 채굴자가 임의로 조작할 수 있는 데이터 하나가 있는데 이것이 바로 논스(Nonce)다. 이 논스는 채굴에서 매우 중요한 역할을 수행한다. 3
블록의 해시 값은 아무 값이나 될 수 없다. 특정 수 이하의 값을 가지는 헤더 값이 되는 경우에만 체인에 등록할 수 있다. 비트코인 블록의 해시 값은 16진수의 숫자이다. 앞의 네 글자가 0000이 된다는 이야기는 16^4개의 해시 값당 1개의 해시 값만이 조건을 만족하는 해시 값이 되게끔 하는 것과 동일하다. 만약 앞에 오는 0의 개수가 5개가 된다면 16^5개의 해시 값 중 1개만이, 0의 개수가 6개가 된다면 16^6개의 해시 값 중 1개만이 조건을 만족하는 해시 값이 될 것이다. 즉 0이 한 개 붙을수록 해시 값을 구하는 난이도는 16배 증가하는 것과 같다. 이것을 작업 난이도 또는 채굴 난이도라 부른다. 4
앞서 말했듯이 논스 값을 제외한 나머지 데이터는 채굴자가 건드릴 수 없다고 이야기하였다. 따라서, 조건을 만족하는 해시 값을 찾기 위하여 채굴자는 브루트포스 기법으로 논스 값을 바꿔가며 블록의 해시 값을 계산한다. 위의 그림 2는 이러한 과정을 나타내었는데, 채굴자가 1부터 시작하여 논스값을 증가시켜 가며 해시 값을 계산하다 26989번째 계산에서 조건을 만족하는 해시 값을 찾아내었다. 5
채굴 난이도
채굴 난이도는 현재 대상(Current Target)을 최대 대상(Max Target)으로 나눈 값을 말한다. 여기서 현재 대상과 최대 대상이란 무엇을 의미하는가.
앞서 설명했듯이 채굴은 특정한 숫자보다 작은 값을 가지는 해시 값을 찾아내는 과정인데, 이 특정한 숫자가 바로 타겟(대상)이다. 사토시 나카모토는 비트코인을 개발하였을 때, 맨 앞 8자리의 수가 0이 되는 수가 되게끔 초기의 채굴 난이도를 설정하였다. 여기서 '00000000 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx'이라는 숫자가 바로 최대 대상이다. 6 7
비트코인은 2016개의 블록을 채굴하는데 2주가 걸리게끔 난이도를 조정한다. 이는 10분당 한 개의 블록이 채굴되는 것과 동일하다. 이러한 난이도 조정 작업은 2016개의 블록이 생성될 때마다 이루어지는데, 2016개의 블록이 2주보다 빠르게 채굴되면 난이도가 증가하고, 느리게 채굴되면 난이도가 줄어든다. 이는 중앙당국등이 조정하는 것이 아니며 노드들에 의해 난이도가 결정된다. 8 9
비트코인 통화 정책 (Bitcoin's Monetary Policy)
앞서 2016개의 블록을 채굴하는데 2주가 걸리게끔 난이도가 조정된다고 하였다. 이와 같이 비트코인은 새로 발행되는 코인의 개수와 최대 몇 개의 코인이 생성되는지도 조정한다.
최초에 비트코인은 블록 하나를 생성할 때마다 50BTC를 채굴자에게 보상으로 지급하였다. 보상으로 지급되는 비트코인의 양은 계속해서 50BTC로 고정되어 있지 않고, 21만 개의 블록이 생성될 때마다 절반으로 줄어든다. 위 그림 4와 같이, 210001번째 블록부터는 보상으로 25BTC가 지급된다. 최초의 블록으로부터 12년이 지난 지금은 보상으로 6.25BTC가 지급되며, 얼마 지나지 않아 840001번째 블록이 생성되며 다시 한번 보상이 절반으로 줄어들 것이다. 이렇게 보상이 반으로 줄어드는 시기를 반감기(The Halving)이라 한다.
채굴 난이도와 마찬가지로 통화 정책 또한 중앙 당국등이 관리하지 않는다. 이 또한 비트코인 프로토콜에 코딩되어 있는 알고리즘에 의해 자동으로 조정된다.
논스 값의 변화만으로 정답을 찾지 못하는 경우
그런데 가능한 모든 논스 값을 대입하여도, 조건을 만족하는 해시 값을 구하지 못하는 경우가 존재한다. 이는 논스 값의 자료형이 4 bytes unsigned int 이므로, 표현할 수 있는 수의 범위가 0 ~ 4,294,967,295으로 제한되어 있기 때문이다. 이런 경우에는 블록을 생성하지 못하는 것일까? 그렇지 않다. 크게 두 가지 방법으로 이를 해결할 수 있다.
첫 번째 방법은 타임스탬프의 값이 바뀌는 것이다. 헤더에는 블록이 생성된 시간에 대한 정보인 타임스탬프가 담겨있으며, 이는 1초 단위로 갱신된다. 그런데 이 방법 또한 완전한 대책은 되지 않을 것이다.
두 번째 방법으로는 바디에 담길 트랜잭션을 다른 트랜잭션으로 바꾸어 선택하는 것이다. 비트코인의 경우 바디에 최대 2000개의 트랜잭션이 담길 수 있는데, 채굴자는 블록에 담을 트랜잭션을 임의로 선택할 수 있다. 따라서 여러 트랜잭션의 조합을 이리저리 바꾸어보면서 해시 값을 계산해 볼 수 있다. 10
멤풀
멤풀(Mempools)는 새로 추가된 트랜잭션이 블록에 추가되기 전에 모이는 집결지와 같은 역할을 수행한다. 체인과는 다르게 모두가 공유하는 하나의 멤풀이 존재하지는 않는다. 대신에 블록체인의 각 참여자가 개별 멤풀을 가지고 있는다. 만약 새로운 트랜잭션이 멤풀에 추가가 된다면, 이는 네트워크를 통해 브로드캐스팅/릴레이 되고, 릴레이 된 모든 노드들이 해당 트랜잭션이 유효한 트랜잭션인지 검사를 수행한다. 만약 어떤 트랜잭션이 블록에 추가가된다면 블록은 네트워크를 통해 릴레이 될 것이고, 해당 트랜잭션은 멤풀에서 제거된다. 11
채굴자는 멤풀에 담겨있는 트랜잭션들을 블록에 추가한다. 비트코인의 경우 하나의 블록에 담을 수 있는 트랜잭션에는 1MB의 제한이 있으므로, 트랜잭션의 크기에 따라 최대 2000개의 트랜잭션을 담을 수 있다. 각 트랜잭션에는 수수료가 존재하며, 수수료는 거래 당사자가 임의로 설정할 수 있다. 당연하게도 채굴자는 더 높은 수수료를 주는 트랜잭션을 우선적으로 담으려 할 것이다. 위 그림 5와 같은 멤풀이 존재하고 최대 3개의 트랜잭션을 블록에 담을 수 있다면, 파란색으로 표시한 3개의 트랜잭션을 우선적으로 담고자 할 것이다.
- 비트코인에서는 사용자들 간에 비트코인이 오고 가는 거래를 말한다. [본문으로]
- 쉽게 말해, 정해진 숫자보다 작은 값을 가지는 해시 값을 찾는 과정을 말한다. 이에 대해서는 이 글의 아래 절에서 자세하게 다룬다. [본문으로]
- 바디에 담길 트랜잭션은 채굴자가 임의로 선택할 수 있다. 이것에 대해서는 글의 다음 절에서 자세히 다룰 것이다. [본문으로]
- 실제 채굴 난이도의 개념은 좀 더 복잡하다. 이는 이 글의 다음 절에서 좀 더 자세히 다루도록 한다. [본문으로]
- 앞의 네 글자가 0인 [본문으로]
- 사실 그의 정체가 일본인인지, 영국인인지, 개인인지 단체인지조차 명확하지 않지만 [본문으로]
- 비트코인의 타겟은 이 최대 대상 값보다 커지지 않기 때문에, 최대 대상이라는 이름이 붙었다. [본문으로]
- 비트코인 프로토콜에 코딩되어 있는 알고리즘이 자동으로 난이도를 조정한다. [본문으로]
- 선행 제로의 개수를 조정하는 단순한 방식이지만, 채굴자들의 CPU, GPU, ASIC 등의 채굴기 변화에도 시스템이 완벽히 작동하고 있다. 이는 탈중앙화 시스템이 중앙화 시스템보다 더 나은 성능을 발휘하는 방법의 좋은 예시이다. [본문으로]
- 블록에 담기 위한 트랜잭션들은 멤풀(Mempools)에 담겨있고, 여기서 채굴자가 트랜잭션을 선택하는 것이다. 이에 대한 자세한 설명은 글의 아래 절에서 설명한다. [본문으로]
- 멤풀에는 중앙화가 존재하지 않는다. [본문으로]
'블록체인 > 블록체인 기초' 카테고리의 다른 글
블록체인 - 6. UTXO (Unspent Transaction Output) (0) | 2024.02.22 |
---|---|
블록체인 - 4. 분산 P2P 네트워크 (Distributed Peer-to-Peer Network) (0) | 2024.01.24 |
블록체인 - 3. 불변 원장 (Immutable Ledger) (1) | 2024.01.23 |
블록체인 - 2. 해시 함수 (Hash Function), SHA256 (0) | 2024.01.23 |
블록체인 - 1. 블록 (Block) (1) | 2024.01.23 |