NEW 기획 디자인 개발 프로덕트 아웃소싱 프리랜싱

개발

중국의 채굴 금지, 괜찮을까? 비트코인 외계어 쉽게 이해하기, 4편

소화가 잘되는 비트코인 지식

 

최근 중국이 비트코인 거래 금지에 이어 채굴마저 금지하기 시작했습니다. 전 세계 채굴량의 65%를 차지하는 중국이었기에 이 금지 정책의 파장은 더욱 컸죠.

 

흠… 문득 이런 걱정이 듭니다.

어...? 채굴은 새로운 거래내역을 적는 작업이랬는데… 비트코인 채굴자가 35%만 남게 되면 거래가 엄청 느려지는 거 아냐?

 

분명 비트코인은 10분마다 채굴 및 거래가 이뤄져야 한다고 했는데, 65%의 채굴자들이 우르르 도망갔다면 채굴 속도가 한참은 떨어졌을 겁니다. 10분씩 걸리던 거래가 30분이 됐다면, 아마 엄청나게 답답하겠죠.

 

다행히 비트코인 시스템은 자동으로 난이도를 조정하는 기능이 있습니다. 채굴자가 많아지면 난이도를 높이고, 줄어들면 난이도를 낮춰 채굴 시간을 10분으로 맞추죠. 덕분에 이번 중국의 채굴 금지 정책은 결국 거래속도 저하가 아닌 비트코인 채굴 난이도의 급락으로 이어졌는데요. 도대체 비트코인 시스템은 채굴을 어떻게 시키길래, 난이도를 조절할 수 있을까요? 오늘은 블록의 구조와 함께 이 방법을 간단하게 알아보겠습니다.

 

오늘의 글은

  1. 채굴자들이 채굴을 하는 정확한 방법과
  2. 비트코인 시스템이 난이도 조절을 하는 방법

에 대한 답을 담고 있습니다.

 

1. 비트코인의 채굴 미션과 난이도

비트코인 시스템이 채굴자들에게 내는 문제는 해시함수를 기반으로 하고 있습니다. 해시함수는 입력한 값을 변환해 [b2718..1a53]과 같이 복잡한 형태의 결괏값을 뱉어내는데요. 채굴이란 이런 복잡한 결괏값을 만든 입력값이 무엇인지 찾는 겁니다.

해시함수는 결괏값인 [b2718...1a53]를 봐도, 이게 해시함수에 어떤 값을 넣어서 나온 값인지 예측할 수 없는데요. 이 때문에 채굴자들은 [b2718...1a53]를 만드는 입력값을 찾기 위해 다양한 숫자를 직접 넣는 수고를 거쳐야 합니다.

(*해시함수에 대한 설명은 비트코인 3편을 참고하세요)

 

사실 비트코인 시스템은 위처럼 [b2718..1a53]와 같이 특정한 결괏값을 찾아내는 문제를 내주진 않습니다. 그 이유는 문제가 저럴 경우엔 아무도 답을 구할 수 없기 때문인데요. 실제로 저렇게 특정한 값을 한 번에 찾을 확률은 약 40억*40억*40억*40억*40억*40억 분의 1에 불과하거든요.

채굴 미션이 실제로 이 정도였다면 전 세계 채굴자들이 지구가 탄생했을 때부터 채굴을 해왔어도 세상의 빛을 본 비트코인은 하나도 없었을 겁니다. 다행히, 비트코인 시스템은 난이도를 조절하는 방법이 있습니다. 실제 비트코인 시스템이 내주는 문제는 특정 값을 만드는 입력값을 찾는 게 아닌 "1000보다 작은 결괏값을 뱉어내는 입력값을 찾아줘"와 같은 형태죠. 이렇게 정답의 범위를 알려주는 요소는 “목푯값”이라는 이름으로 블록에 포함되어 있고요.

 

*실제 비트코인의 해시값은 최소 0에서 최대 2의 256승으로 "a92c..de"와 같이 복잡한 형태로 표현되지만, 본 편에선 이해의 용이성을 위해 해시값을 0~1000만사이로 가정하고 설명했으니 양해 부탁드립니다.

 

2. 실제 블록체인의 구조와 채굴 성공 조건

그렇다면 블록체인의 블록이 어떻게 생겼는지 보죠.

블록체인의 블록은 거래내역이 저장되는 블록바디와 거래 위변조 확인에 쓰이는 블록헤더, 그리고 블록 해시값으로 구성됩니다. 비트코인 시스템은 블록헤더를 해시함수에 넣어 다음 블록의 블록 해시값을 만들어내는데요.

 

이 블록헤더에는 머클루트, 앞서 말한 해시의 목푯값, 그리고 이전 블록의 해시값 등이 포함됩니다. 이전 블록 해시값은 말 그대로 이전 블록의 블록 해시값이고요. 머클루트는 블록바디에 담긴 거래내역들을 해시함수에 넣은 해시값입니다. 목푯값이란 앞서 말한 채굴 성공의 조건이죠.

 

채굴자들은 앞서 말한 3개의 값에 랜덤으로 숫자를 추가해 목푯값에 해당하는 결괏값을 찾게 되는데요. 이때 추가하는 숫자를 논스라고 부르죠.

 

위 경우를 보면 채굴자들은 블록헤더에 논스값을 0부터 1씩 추가했습니다. 결국 381이라는 값을 넣었을 때 목푯값 1000보다 작은 해시값인 91을 찾아냈고, 이내 비트코인을 받게 됐죠.


정리하자면 비트코인 시스템은 채굴자들이 문제를 적당한 속도로 풀게 하기 위해 난이도를 조절합니다. 그 난이도는 블록체인의 블록헤더에 ‘목푯값’이라는 요소로 포함되고요. 이 블록헤더를 해시함수에 넣으면 다음 블록의 해시값이 나오는데, 해당 해시값이 목푯값보다 작다면 채굴에 성공하게 됩니다.

 

앞서 말했던 중국 채굴 금지 이슈를 다시 한번 돌아볼까요?

 

중국의 채굴 금지 정책에 중국 채굴업체들은 채굴을 멈추기 시작했을 겁니다. 이에 전체 채굴자들의 채굴 능력은 감소했겠죠. 비트코인에서 이 전체 채굴자들의 채굴 능력은 해시율(해시레이트)이라고 부르는데요.

 

해시율이 떨어졌으니 한동안 채굴 속도는 줄어들었을 겁니다. 하지만 얼마 지나지 않아 비트코인 시스템은 채굴이 10분마다 일어나도록 하게 하기 위해 비트코인의 난이도를 낮추겠죠. 바로 블록체인의 블록헤더에 있는 목표값을 “1000보다 작은”에서 “1100보다 작은”으로 바꾸는 방법으로 말입니다.

댓글 0

돌망

스타트업, IT 회사, VC 등을 경험하다 현재는 카이스트에서 Business Analytics를 공부하고 있습니다. 클릭 한번에 전문지식이 쏟아지는 시대, 고급스럽기보단 소화가 잘 되는 지식을 전하려 노력합니다.

같은 분야를 다룬 글들을 권해드려요.

요즘 인기있는 이야기들을 권해드려요.

일주일에 한 번!
전문가들의 IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.

일주일에 한 번! 전문가들의 요즘 IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.