초보자를 위한 Blockchain 강좌 #8 채굴 - 상세 동작

토픽 내용을 시작하기 전에 먼저 다음과 같이 마음속으로 속삭여 보시라고 말씀드리고 싶네요.
"나는 내용이 아무리 어렵게 쓰여 있어도 아주 쉽게 받아 들일 수 있다!"
방금 학습에 있어서 매우 중요한 것을 알려드렸습니다.
어떤 것을 접하더라도 할 수 있다는 믿음이 있다면 그 학습 능력은 놀랄만치 올라간다는 것을요.

작업 증명이 실제로 어떻게 작동하는지 살펴보겠습니다. 아래 그림은 블락체인의 예를 보여 주고 있습니다. 이전 토픽에서 본 블락체인과 구성이 조금 다릅니다.
3.png
[블락체인, 출처]

위 블락체인 그림에서 하나의 블락의 구성 요소가 나타나 있습니다. 실제의 블락 구성은 이것보다 좀 더 복잡하지만 간단히 주요 요소만 표시되어 있습니다. 하나의 블락은 크게 두 부분으로 나누어져 있습니다. 파란 박스로 되어 있는 블락헤더(Block Header)부분과 트랜잭션들의 정보입니다. 하나의 블락에는 여러 개의 트랜잭션들이 있습니다.
블락헤더부분의 구성요소는 크게 세 가지로 구성되어 있습니다.

  • 이전 블락헤더 해쉬값: 이전 블락헤더를 해슁한 값
  • 현재 블락의 트랜잭션 요약값: 트랜잭션 데이터를 요약한 값
  • nonce: 임의값

블락체인은 각 블락이 연결되는 구조인데, 그 연결은 현재 블락에 이전 블락의 해쉬값을 포함하는 방식으로 동작합니다. ​블락을 생성한다는 것은 그 블락의 해쉬값을 정한다는 것입니다.

블락을 생성한다는 것은 블락의 해쉬값을 정한다는 것!



해쉬 함수의 특성을 다시 짚어 보겠습니다.
4.png
[해쉬 함수의 특성, 출처]

Y=h(X)와 같은 함수식처럼 해쉬함수 h에 입력값 X를 넣으면 출력값 Y를 매우 쉽게 계산할 수 있습니다. 하지만 해쉬 함수의 특징은 출력값 Y로 입력값 X를 계산하기가 매우 어렵습니다. Y로 부터 X를 찾아내는 유일한 방법은 X를 대입해서 그것의 해쉬값 즉 h(X) 값이 Y와 같은지를 보는 것입니다. 해쉬 함수의 중요한 또하나의 특징은 입력값 X가 조금만 바뀌어도 전혀 다른 출력값 Y를 얻는다는 것입니다. 이 두 가지 특징을 생각해 두시고 아래 내용을 보시면 이해가 되실 것입니다.

해쉬 함수의 역방향 계산은 매우 어렵습니다.



블락의 구성요소 중에 nonce라는 것이 있습니다. 이것이 임의의 값이라고 되어 있습니다. nonce 이외의 값들은 임의가 아니라 정해져 있습니다. 즉 트랜잭션 정보라든지 이전 블락의 해쉬값이라던지 이것들은 변경되는 값들이 아닙니다. 오로지 nonce라고 되어 있는 값만 변경되는 미지수 같은 것입니다. 따라서 블락을 생성하는데 있어서, 즉 블락의 해쉬값을 정하는데 있어서 이 nonce값을 얼마로 하느냐에 따라 달라지게 됩니다.

감을 잡으신 분들도 있겠지만, 바로 블락을 생성하는 작업, 즉 채굴 노드들이 경쟁하는 것은 바로 이 nonce를 찾아내는 작업입니다. 어떤 nonce를 찾으면 될까요? 그건 블락체인이 정해줍니다. 예를 들어 새로 생성될 블락의 해쉬값은 아래와 같이 앞의 40비트가 0으로 되어야 한다는 제약을 둡니다. 그러면 채굴 노드는 nonce값을 바꿔가며 해쉬값을 계산하여 그것이 제약 조건을 만족하는지, 즉 해쉬값의 앞 40비트가 0으로 되는지를 검토하게 됩니다. 여기서 앞의 40비트 이외에 뒤에 오는 비트는 무슨 값이 오더라도 상관이 없습니다.

5.png

블락을 생성하기 위해 제약 조건을 만족하는 nonce값을 찾아야 합니다.



블락체인은 블락이 생성되는 속도를 조절해야 합니다. 비트코인의 경우는 약 10분마다 블락이 생성되도록 만들어 졌습니다. 따라서 블락체인 네트워크에서 블락이 10분마다 생성될수 있도록 난이도를 조절합니다. 난이도를 조절하는 방법은 앞에서 설명된 블락 생성의 제약 조건을 바꾸면 됩니다. 즉 블락 생성을 늦추고 싶다면 블락의 해쉬값의 앞 비트가 0이되는 비트수를 늘리면 되고, 빠르게 하고 싶다면 0이 되어야 하는 비트수를 줄이면 됩니다. 예를 들어 난이도를 높이고 싶으면 해쉬값의 앞 100개의 비트가 모두 0이어야 한다는 제약을 걸면 됩니다. 반대로 난이도를 낮추고 싶다면 앞 10개 비트만 모두 0이면 되게 제약 조건을 완화하면 됩니다.

블락체인은 일정한 블락 생성을 위해서 난이도를 조절합니다.



해쉬함수의 특징 중 입력값이 조금만 변경되어도 출력값이 전혀 달라진다는 것이 있습니다. 따라서 nonce값이 조금만 변경되어도 출력값은 전혀 달라지므로, 원하는 해쉬값을 찾기가 쉽지 않습니다. 이 때문에 채굴 노드는 nonce에 임의값을 넣어보고 그 결과가 제약 조건을 만족하는지 검토해 보는 것입니다. 블락체인 네트워크의 여러 채굴 노드들은 가장 먼저 제약 조건을 만족하는 nonce를 찾아내는 경쟁을 하는 것입니다. 이 경쟁에서 이기는 방법은 최대한 많은 계산을 하는 방법 뿐입니다. 즉 최대한 많은 그래픽 카드를 이용해서 단순 계산을 반복하는 방법입니다. 아래 실제로 채굴에 성공한 예를 보여주고 있습니다.

6.png

Nonce: 0x4d4176436d0e012b가 제약 조건을 만족하는 값입니다. 이걸 다른 채굴 노드보다 먼저 찾아낸 것이죠.

채굴 작업은 블락 해쉬값의 제약조건을 만족하는 Nonce값을 찾는 것입니다.



이번 토픽의 홈워크는 다음 질문에 대한 답을 댓글로 남기는 것입니다.
Q) 어떤 두 채굴 노드가 동시에 Nonce를 찾게 되면 어떻게 될까요?


포스팅한 내용이 유익했다면 아래의 스팀잇의 게시글 하단에 투표해주세요!
투표하셔도 스팀이나 스팀파워가 소모되지 않습니다.

강좌를 오픈튜토리얼스에서 온라인 강좌형태로 보실 수도 있습니다.
오픈튜토리얼스 바로가기


초보자를 위한 Blockchain 강좌 시리즈

H2
H3
H4
3 columns
2 columns
1 column
3 Comments