‘Mastering Bitcoin 2nd’ 세미나 15, 10장. Mining and Consensus 2/2

이번 세미나에서는 먼저 목표값에 대해서 좀 더 자세히 설명하고, 10장 Mining and the Hashing Race부터 진행합니다.

 

Target Representation

아래 정리한 내용을 먼저 읽고 본문 내용을 읽습니다.

 

채굴은 목표값보다 작은 블록 해시를 구하는 것이라고 했습니다. 블록 해시는 256비트 값이므로 목표값도 256비트 값으로 작성되어야 합니다.

목표값(target)은 블록 헤더의 항목으로 포함되는데, 블록 헤더에 작성되는 것은 실제적으로는 목표값이 아니라 4바이트 목표값 비트(target bits)입니다. 목표값은 다음과 같이 목표값 비트를 사용해서 계산되는 256비트 값입니다.

  • target = coefficient * 256exponent – 3
    • 지수(exponent): 목표값 비트의 첫 번째 1바이트
    • 계수(coefficient): 목표값 비트의 나머지 3바이트

 

Retargeting to Adjust Difficulty

아래 정리한 내용을 먼저 읽고 본문 내용을 읽습니다.

 

비트코인 시스템은 블록 생성 시간을 일정하게 유지하기 위해 난이도 조정이라는 개념을 사용합니다.

난이도는 블록 생성이 제네시스 블록 생성에 비해 얼마나 어려워졌는지를 나타내는 값입니다. 제네시스 블록의 난이도는 1입니다.

난이도는 다음과 같이 계산됩니다.

  • 난이도(difficulty) = 0xffff x 2560x1d-3 / 목표값
    • 제네시스 블록의 목표값 비트는 계수가 0xffff이고, 지수가 0x1d입니다. 이 값을 난이도 계산 식에 대입하면 1 값을 얻을 수 있습니다.

 

비트코인 시스템은 평균 10분마다 블록이 생성될 수 있도록 2016블록 마다 난이도를 조정합니다. 난이도 조정은 최대 4배까지(4배로 증가하거나 4배로 감소하거나) 조정이 가능합니다.

난이도 조정 기간이 되면 다음과 같이 새로운 목표값이 계산됩니다.

  • Actual Time of Last 2016 Blocks
    • 난이도 조정 기간의 마지막 블록 타임스탬프 – 난이도 조정 기간의 첫 번째 블록 타임스탬프
  • New Target = Old Target * (Actual Time of Last 2016 Blocks / 20160 minutes)
    • Actual Time of Last 2016 Blocks / 20160 minutes
      • 2016 블록을 생성하는게 걸린 시간을 2주의 시간으로 나눕니다. 이 값이 1보다 크면 실제 블록을 생성하는 시간이 2주 보다 더 걸렸으므로 난이도를 낮춰야 하고 1보다 작으면 난이도를 높여야 합니다. 난이도를 낮춘다는 것은 목표값을 높인다는 것이고 난이도를 높인다는 것은 목표값을 낮춘다는 것입니다.

 

* 블록헤더에는 목표값이 사용되는 것이 아니라 목표값 비트가 사용되어야 함으로 목표값을 목표값 비트로 변환할 수 있어야 합니다.

Mining and the Hashing Race

The Extra Nonce Solution

그림 7과 같이 채굴자들의 해싱 파워가 급격히 증가함에 따라 난이도 또한 급격히 증가합니다(목표값은 급격히 작아집니다). 난이도가 급격히 증가함에 따라 4바이트 넌스 만을 사용해서 목표값 보다 작은 해시를 찾을 수 없게 됩니다.

코인베이스 트랜잭션에는 채굴자가 자유롭게 작성할 수 있는 공간이 있는데, 채굴자들은 이것을 이용해서 넌스 공간 부족 문제를 해결합니다.

Mining Pools

채굴이 전문화되고 기업화되면서 소수의 채굴자들만이 채굴에 성공하는 채굴의 중앙화가 이루어집니다. 채굴 풀은 채굴의 중앙화를 막기 위한 방법으로 등장합니다.

채굴 풀 또한 중앙화 될 수 있기 때문에 탈중앙 채굴 풀이 등장합니다.

Consensus Attacks

흥미 위주로 빠르게 읽어 나갑니다. 아래 인용한 본문 내용만 주의 깊게 다시 한 번 읽어 봅니다.

Consensus attacks can only affect the most recent blocks and cause denial-of-service disruptions on the creation of future blocks.

Changing the Consensus Rules

The rules of consensus determine the validity of transactions and blocks. These rules are the basis for collaboration between all bitcoin nodes and are responsible for the convergence of all local perspectives into a single consistent blockchain across the entire network.

비트코인 시스템에 있어 합의 규칙의 변경은 소프트웨어 업그레이드로 반영됩니다.

Unlike traditional software development, however, upgrades to a consensus system are much more difficult and require coordination between all the participants.

전통적인 중앙화 시스템은 소프트웨어 업그레이드 또한 중앙 통제하에서 이루어지지만, 비트코인 시스템과 같은 탈중앙화 시스템(P2P 시스템)은 네트워크에 참가자들의 자발적인 결정에 따라 이루어지기 때문에 더 어렵고 모든 참가자 간 조정이 필요합니다.

Hard Forks, Soft Forks

There is another scenario in which the network may diverge into following two chains: a change in the consensus rules.

포크는 채굴 경쟁에 의해 발생할 수도 있고, 합의 규칙 변경에 의해 발생할 수도 있습니다. 합의 규칙 변경은 소프트웨어 업그레이드로 반영됩니다.

소프트웨어는 이전 버전 호환성을 지원하기도 하고 그렇지 않기도 합니다. 이전 버전과의 호환성을 고려한 소프트웨어 업그레이드를 소프트 포크라고 하고 그렇지 않은 경우를 하드 포크라고 합니다.

The term soft fork was introduced to distinguish this upgrade method from a “hard fork.” In practice, a soft fork is not a fork at all. A soft fork is a forward-compatible change to the consensus rules that allows unupgraded clients to continue to operate in consensus with the new rules.

One aspect of soft forks that is not immediately obvious is that soft fork upgrades can only be used to constrain the consensus rules, not to expand them. In order to be forward compatible, transactions and blocks created under the new rules must be valid under the old rules too, but not vice versa. The new rules can only limit what is valid; otherwise, they will trigger a hard fork when rejected under the old rules.

소프트 포크는 이전 버전과의 호환성을 지원하기 때문에 이름과는 달리 실제적으로는 포크가 발생하지는 않습니다.

하드 포크는 이전 버전과의 호환성을 지원하지 않기 때문에 네트워크가 나누어질 수 있습니다. 합의 규칙이 변경 됨에 이전 버전의 합의 규칙을 따르는 노들들과 새로운 합의 규칙을 따르는 노드들로 나뉘어지고, 노드들이 나뉘어짐에 따라 서로 다른 두 개의 진실(블록체인)이 존재하게 됩니다.

그렇다고 모든 하드 포크가 네트워크의 분리(서로 다른 블록체인)를 가져오는 것은 아닙니다. 네트워크에 참여하는 노드들 중에 새로운 합의 규칙에 반대하는 세력이 없으면 하드 포크는 발생하지 않습니다.

As miners diverge into mining two different chains, the hashing power is split between the chains.

하드 포크에 의해 네트워크가 분할된다는 것은 해싱 파워가 분할 됨을 의미합니다. 난이도는 이를 반영해서 계산되지 않기 때문에 채굴 시간이 길어지는 문제가 발생할 수 있습니다.

Soft Fork Signaling with Block Version

A number of soft forks have been implemented in bitcoin, based on the re-interpretation of NOP opcodes. Bitcoin Script had ten opcodes reserved for future use, NOP1 through NOP10.

소프트 포크하는 방법 중 하나는 NOP 연산 코드를 사용하는 것입니다.

The mechanism for “activating” a soft fork is through miners signaling readiness: a majority of miners must agree that they are ready and willing to enforce the new consensus rules. To coordinate their actions, there is a signaling mechanism that allows them to show their support for a consensus rule change. This mechanism was introduced with the activation of BIP-34 in March 2013 and replaced by the activation of BIP-9 in July 2016.

소프트 포크에 합의하는 좀 더 발전된 방법은 블록 버전을 사용해 채굴자들의 준비도를 표시하도록 하는 방법입니다.

BIP-34는 1000개의 블록을 기준으로 채굴자들이 합의 규칙 변경을 받아들였는지 비율을 구하고, 그 비율을 기준으로 합의 규칙을 활성화합니다.

BIP-65가 활성화되고 난 후, BIP-34에 대한 시그널링과 활성화 메커니즘은 없어지고, BIP-9 시그널링 메커니즘으로 대체되었습니다.

BIP-9에서는 블록 버전을 정수 대신에 비트 필드로 해석하게 함으로 동시에 29개의 다른 제안에 대한 준비 상황을 표현할 수 있도록 했고, 시그널링과 활성화에 최대 시간을 설정해 두었습니다. 최대 시간이 넘어 활성화 되지 않으면 거절당한 것으로 간주합니다.

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*