우리는 이전 포스트에서 블록체인의 구조에 대해 알아보았다. 그 중에서도 논스, 비츠(난이도), 타임스탬프 같은 개념들은 채굴과 난이도 조절에서 더 자세히 다뤄보기로 하였다.

이 포스트에서는 블록체인의 채굴과 채굴의 난이도를 블록체인이 어떻게 스스로 조절하는지에 대해 살펴본다.

채굴

광석을 캐는 것과 같은 노동을 컴퓨터가 하도록 시키는 것

채굴 행위를 통해 블록체인에서 보상을 받는다. 채굴자가 받는 보상은 거래의 수수료와 채굴 보상으로 주는 코인이다. 비트코인 기준으로 채굴 보상 코인은 처음에는 50BTC였다가 4년마다 반감기를 거쳐 현재 기준 참고로 6.25BTC이다. 비트코인의 총 발행량은 2100만개로 정해져있다. 조금 다른 말이지만, 발행량이 정해져 있는 화폐란, 결국 인플레이션이 없는 화폐라고도 말할 수 있다. 이 부분에 대해서는 다른 포스트에서 후술하도록 하겠다.

컴퓨팅 파워를 사용해서 뭘 한다는 것인지 사실 이해가 잘 되지 않을 수 있다. 채굴은 컴퓨팅 파워를 이용해서 결국 해시 값을 찾아내는 것이다.

블록 헤더를 해시 함수에 돌려서 나온 해시값과 난이도를 통해 조절된 목표값을 비교한다. 블록 난이도에 따라 자동으로 설정된 '목표값'보다 더 작은 블록 해시값을 찾아낼 경우 채굴에 성공한다.

해시는 랜덤하게 생성되기 때문에, 수없이 많은 연산을 반복해서 미리 정해진 목표값 이하의 해시값이 나오도록 해야 한다. 이랜덤한 해시값을 생성할 수 있도록 매번 논스값을 바꾼다. 조건을 충족하면 채굴이 되는 것.

해시와 논스값은 최종까지 결정되지 않는다. 논스 값이 결국 해시값이기 때문에. 해시값(결과값)은 16진수이다. 타겟 값보다 수가 낮아야 한다.

Q. 왜 목표값보다 낮은 값이 나와야 하는 걸까?

개인적으로 이 부분을 이해하는 것이 가장 까다로웠다.

sha256은 256비트, 즉 64자리로 고정이 되어 있는데, 자리가 고정되어 있을 때는 타겟값이 낮을 수록(나올 수 있는 숫자가 낮을수록) (맞출 수 있는)확률이 내려간다. 주사위를 생각해보자. 6 이하로 나오는 확률은 100%이다. 그러나 4 이하로 나올 확률은 6 이하로 나올 확률보다 낮다.


난이도 조절(자가 제한 시스템)

Target = Previous target Time/2016 10 minutes

블록체인의 난이도 변화

위에 적은 공식은 타겟값을 구하는 공식이다.

Difficulty는 새로운 블록을 찾는 것이 얼마나 어려운가에 대한 측정이다. 특정 타겟 이하의 해시값을 찾는 난이도를 말한다. 난이도 공식은 아래와 같다. Difficulty == Target이다.

타깃 값의 목표는 약 10분마다 블록이 생성되도록 난이도를 조절하는 것이다. 블록체인은 블록 생성 간격을 스스로 조절한다. 이 과정에서 타임스탬프가 활용이 된다. 비트코인의 경우 2016개 기준으로 2주에 한 번씩 난이도가 조절이 된다.

이 때 블록 헤더에 기록이 된 타임스탬프가 활용이 된다. T4 - T0을 했을 때 평균 생성 시간이 나온다. 이 평균 생성 시간이 10분보다 낮은지, 높은지를 판단한다.

블록 채굴에 걸리는 시간이 평균인 10분보다 높으면 난이도를 낮추고, 10분보다 낮으면 난이도를 높이면서 난이도 조절을 하는 것이다.


동시에 채굴된다면 어떻게 될까?

동시에 채굴되는 상황을 포크가 일어났다라고 표현한다.

비트코인은 포크가 일어났을 때 가장 긴 체인을 옳은 체인이라고 선택한다.

같은 길이지만, 마지막 블록 헤더가 다른 체인끼리 부딪치면 일단 보류한다. 이것을 충돌(포크, 분기)라고 한다. 이 충돌된 체인 중에서 먼저 길어진 체인 A가 모든 노드에게 또 모든 체인을 넘겨주는데, 이때 부딪쳤던 블록도 같이 넘겨준다. 여기서 충돌을 일으켰던 B(체인이 더 짧은)의 블록은 교체된다.

그 블록 안에 있던 거래들은 취소된다.

profile
우주로 가버린 고앵

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN