본문 바로가기
Bitcoin

비트코인의 채굴심화 (Extra Nonce)

by PudgeKim 2021. 3. 22.

이 글은 선수지식으로는 비트코인의 기본채굴원리와 머클트리입니다. 아직 모르신다면 아래 링크를 참고해주세요.

비트코인의 채굴원리: up-to-date-items.tistory.com/103
비트코인의 머클트리: up-to-date-items.tistory.com/96

 

이전 글에서 이런 의문이 있었습니다. Nonce의 최대값이 약 42억정도면 그냥 block header의 Nonce를 빠르게 1부터 42억까지 돌리면    비트코인 채굴을 할 수 있는 것이 아닌가?

요즘 비트코인전용 채굴기의 경우 Nonce값의 범위(1~약 42억)를 전부 체크하는데 1초보다 훨씬 빠르게 계산해냅니다. 그러나 Nonce값을 전부 체크해보더라도 Target 값보다 같거나 작지않을 수가 있습니다. 대부분의 경우 Target보다 큽니다.

그럼 Nonce값을 전부 체크해보았는데도 Target보다 크다면 채굴을 어떻게 해야하는가라는 의문이 듭니다.

채굴자는 Nonce값 말고도 유효한 해쉬값(Target이하인)을 찾기위해 다른 값을 조절 할 수 있습니다.

 block header의 구성을 보면 아래와 같습니다.
- Version (4 bytes)
- Previous Block Hash (32 bytes)
- Merkle Root (32 bytes)
- Timestamp (4 bytes)
- Difficulty Target (4 bytes)
- Nonce (4 bytes)

사용자는 Merkle Root 역시 바꿀 수 있습니다. Merkle Root는 여러 transaction들의 결합으로 이루어지므로 같은 Nonce값이여도          다른 transaction들로 구성한 Merkle Root를 만들면 block header를 SHA-256함수에 넣었을 때의 결과 값은 완전히 달라집니다. (심지어는 같은 transaction이지만 순서만 바뀌어도 말입니다.)

예를들면 어떤 채굴자가 Memory pool에서 transaction 1, 2, 3, 4를 가져와서 Merkle Root를 만들었습니다. 그리고 Nonce값을 전부 체크해보았는데 채굴에 성공하지 못했다면 이번에는 transaction 1, 2, 5, 6을 가져와서 Merkle Root를 만든 후에 다시 Nonce값을 체크해보는 식으로 채굴을 진행할 수 있습니다.

 

Timestamp 역시 채굴에 영향을 줍니다. 1초마다 바뀌기 때문에 1초가 지나면 같은 Merkle Root, 같은 Nonce일지라도 완전히 다른 해쉬 값을 생성합니다.

 

이제 Extra Nonce에 대해 알아보겠습니다.

비트코인을 채굴하게 되면 새로운 비트코인과 transaction들의 수수료 합을 보상으로 받게 됩니다. 이때 새로운 비트코인을 받을 때는 기존에 없던 비트코인을 받게 되는 것이고 이 transaction을 coinbase transaction이라고 합니다.

coinbase transaction의 script에는 2~100bytes의 데이터를 저장할 수 있는데 채굴자는 채굴을 할 때 이 script에 data를 써서 Target이하의 새로운 해쉬 값을 찾기위해 사용할 수 있습니다. 

참고로 coinbase transaction은 Merkle Tree에 포함되기 때문에 coinbase script가 바뀐다면 Merkle Root 값 역시 바뀌게 됩니다.

 

미래에 하드웨어가 더 발전해서 위 방법들로도 부족하다면 timestamp를 1초보다 더 작은 간격으로 바꾸는 방법도 있을 것입니다.

'Bitcoin' 카테고리의 다른 글

비트코인의 51% attack  (0) 2021.03.24
비트코인의 Mining pool  (0) 2021.03.22
비트코인에서의 분기  (0) 2021.03.21
비트코인의 orphan block  (0) 2021.03.21
비트코인의 지갑  (0) 2021.03.19