SW/블록체인

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해

얇은생각 2022. 1. 29. 07:30
반응형

분산화된 합의

이미 설명해 드린 것처럼, 비트코인의 분산화된 합의는 네트워크상의 노드들 사이에서 독립적으로 일어나는 아래의 프로세스에 따라 이루어집니다. 첫 번째, 모든 풀 노드가 각 거래에 대해 독립적으로 검증을 실시합니다. 두 번째, 작업 증명 알고리즘을 이용하여, 마이너들은 검증된 거래들을 새로운 블록에 추가합니다. 세 번째, 모든 노드들이 새 블록을 검증한 후 블록체인에 연결합니다. 네 번째, 모든 노드가 작업증명을 통해 연결한 체인들 중 가장 긴 체인을 선택합니다.

이 네 가지 프로세스들에 대해 살펴본 후, 네트워크 전체의 합의를 얻어내기 위해 네 가지 프로세스가 어떻게 상호작용하는지 알아보겠습니다. 새롭게 생성된 거래는 비트코인 네트워크 내에 있는 이웃 노드들에게 전송된 후, 네트워크 전체로 전파됩니다. 이웃 노드들에게 거래를 전달하기 전에, 모든 비트코인 노드들은 전달받은 거래를 우선적으로 검사해야 합니다. 유효한 거래들은 검증 과정을 통해 네트워크상으로 전파되지만, 유효하지 않은 거래들은 첫 노드에서 폐기됩니다.

 

 

 

거래의 검증

다음은 거래를 검증하기 위해 확인해야 할 조건 중 일부를 서술한 것입니다. 첫 번째, 트랜잭션의 구문과 데이터 구조가 정확해야 합니다. 두 번째, 코인 베이스 거래는 전송할 수 없습니다. 새로운 블록이 생성될 때 보상으로 제공되는 코인 베이스의 경우, 일반적인 거래처럼 다른 노드에게 전송할 수 없습니다. 세 번째, 각각의 입력값에 대해, 참조 출력값이 풀 내의 어떠한 거래 내부에 이미 존재한다면 해당 거래는 거부되어야 합니다.

네 번째, 짝을 이루는 거래가 풀에 존재하지 않는 경우 고아 거래 풀에 추가됩니다. 다섯 번째, 각각의 입력값에 대해 참조 출력값은 존재해야 하며, 해당 UTXO가 이미 소비된 상태가 아니어야 합니다. 여섯 번째, 입력값 금액이 출력값 총액보다 작은 경우 해당 거래를 거절해야 합니다. 입력값이 출력값보다 작을 수 없습니다.

일곱 번째, 새로운 블록에 포함되기에 거래 수수료가 너무 작은 경우, 해당 거래를 거절할 수 있습니다. 자세한 조건들은 비트코인 위키에 (https://en.bitcoin.it/wiki/Protocol_rules) 설명되어 있으니 참고하시기 바랍니다.

 

 

 

거래를 블록에 추가

그렇다면, 네트워크상에서 생성된 거래들이 블록에 추가되는 과정은 어떻게 이루어질까요? 비트코인 노드는 검증된 거래들을 메모리 풀 또는 거래 풀에 추가합니다. 이 거래 풀은 미승인 거래들이 블록에 포함되기 전까지 대기하는 장소입니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 1

 

간단히 예시를 들어 거래가 블록에 추가되는 과정을 설명 드리겠습니다. 앨리스라는 사람이 비트코인을 이용해 커피 한 잔을 사려고 합니다. 앨리스가 커피를 구매할 때쯤, 비트코인 네트워크상에 277314번까지의 블록이 생성되어 있는 상태입니다.

이때, 채굴 노드는 다른 노드들처럼 거래를 수집하고 검증하며, 다른 노드들에게 전파하려 합니다. 노드가 채굴하는 동안 비트코인 네트워크를 통해 277315번째 블록을 전달받습니다. 이렇게 새로운 블록이 도착했다는 것은 277315번 블록에 대한 경쟁이 끝나고, 다음 번 블록, 277316번 블록을 생성하기 위한 경쟁이 시작된다는 것을 의미합니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 2

 

이전 10분 동안 노드는 277315번 블록을 위한 문제를 푸는 동시에, 다음 번 블록에 대비하여 거래들을 수집하고 있었습니다. 따라서 메모리 풀에는 수백 개의 거래가 있다고 가정합니다. 277315번 블록이 도착해서 검증되자마자, 노드는 메모리 풀 내에 있는 거래들 중 277315번 블록에 포함된 거래들을 모두 삭제합니다.

이후 남아있는 거래들은 모두 미승인 상태이며, 새로운 블록에 기록되기 위해 대기 중입니다. 따라서 노드는 즉시 비어 있는 블록을 새로 만들며, 이 블록이 277316번째 블록이 될 수 있는 후보가 됩니다. 이 블록은 아직 증명되지 않아, 유효한 블록이 아니기 때문에 후보 블록이라고 칭하며, 뒤에 설명할 작업증명 알고리즘에 대한 솔루션을 찾은 경우에만 유효화됩니다.

따라서 앨리스가 커피를 구입한 것에 대한 거래가 포함된 후보 블록이, 채굴 노드에 의해 채굴되면 비로소 277316번째 블록에 앨리스의 거래가 추가됩니다.

 

 

 

비트코인 마이닝 원리

이번 모듈에서는 지난 시간에 간단하게 설명해 드렸던 비트코인 마이닝의 원리에 대해 자세히 설명 드리겠습니다. 비트코인이 합의 알고리즘으로 채택하고 있는 방식은 Proof of work 방식이라고 말씀드렸습니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 3

 

여기서 work는 일련의 수학 문제를 푸는 것을 의미합니다. 다시 말해, 가장 빠르고 많이 수학 문제를 푸는 노드가 블록을 생성할 수 있는 권한을 더 많이 갖게 되는 것입니다. 그렇다면, 채굴자들이 해답을 찾아야 하는 수학 문제란 무엇일까요? 새로운 블록을 블록체인에 추가하기 위해서는 블록 헤더의 해시를 계산해야 합니다.

이 블록 해시값이 블록 내에서 설정한 숫자, 즉 난이도보다 작다면 문제의 해답을 찾았다고 할 수 있습니다. 해시값은 원본 데이터에 따라 결과값이 달라지게 되는데요, 블록 헤더의 필드들 중 nonce를 제외한 나머지 필드는 그 값이 고정되어 있습니다. 따라서 PoW 알고리즘에서는, 특정 범위에 포함되는 출력값을 얻기 위해, 적절한 nonce 값을 찾는 것이 목표입니다.

즉, nonce 값은 이 nonce 값을 입력값 중 하나로 취하여 계산되는 블록 해시값이 특정 숫자보다 작아지게 하는 값을 말합니다. 해시 함수의 특성에 따라 역방향 계산이 어렵기 때문에 특정 결과에 도달할 때까지 nonce 값을 무작위로 바꿔가며 값을 찾아야 합니다. 현재, 네트워크상에 314번까지 블록이 생성된 상태에서, 여러 채굴 노드가 마이닝을 위해 수학 연산을 푼다고 합시다.

반복 연산을 통해, 315번째 블록의 헤더가 될 필드들의 해시값이 특정 범위에 속하게 되는 nonce 값을 찾는다면 새로운 315번째 블록을 생성할 수 있게 되는 것입니다. 블록 헤더에 있는 정보 중 유일하게 고정되어 있지 않고 변경될 수 있는 값이 nonce 값입니다. 때문에 이 nonce 값을 1씩 증가시키면서 반복적으로 해시값을 계산합니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 4

 

이 그림은 블록 헤더 내에 명시된 블록 난이도 값(: 000000b58…)보다 작은 nonce 값들을 찾는 과정을 보여줍니다. Nonce 값이 0일 때와 1, 2일 때는 해시값이 미리 정해진 난이도 값보다 크기 때문에 작업 증명에 실패했음을 알 수 있습니다. 이렇게 연산을 반복하다가, nonce 값이 72,198,453이 되면 비로소 명시된 값보다 작은 결과를 얻어 작업을 증명하게 됩니다.

이러한 연산은 어렵고 복잡한 연산은 아니지만, 특정 nonce 값을 찾기 위해 기하학적인 횟수의 연산을 실행해야 합니다. 이는 굉장히 많은 에너지를 필요로 하는 반복 작업이기 때문에, 이 값을 빠르게 찾기 위한 높은 해시 파워가 필요합니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 5

 

그렇다면 결과값의 기준이 되는 이 난이도 값은 어떻게 결정되는 걸까요? 이 난이도는 블록 헤더 내의 ‘난이도 비트’ 정보에 따라 결정됩니다. 해당 필드는 얼마나 많은 리딩 비트가 0이어야 하는지 나타내는 단위로, 목표값의 0의 개수가 많을수록 난이도가 더 어려워집니다.

리딩 0의 숫자를 1비트씩 증가시킬 때마다, 가능한 검색 공간의 크기가 절반으로 줄어들기 때문입니다. 이는, 한정된 범위를 만족하는 특정 값을 도출해내는 것이 더 어려워짐을 의미합니다. 0의 개수가 많아질수록 허용 가능한 범위가 더 작아집니다. 따라서 1비트씩 난이도가 상승할 때마다, 솔루션을 찾는 데 걸리는 시간이 기하급수적으로 증가합니다.

 

 

 

난이도

그렇다면 보통 이 난이도는 어떻게, 누가 조정할까요? 비트코인 네트워크상에서 블록은 10분에 하나씩 블록이 생성됩니다. 이 생성 주기를 바탕으로 통화 발행 빈도와 거래 정상 속도가 결정됩니다. 블록의 생성 시간을 10분으로 유지하기 위해서, 채굴의 난이도는 컴퓨터 능력의 증가 속도와 채굴에 참여하는 컴퓨터의 수에 따라 조정하게 됩니다.

난이도 재설정은 풀 노드 전부에서 독립적으로 실행합니다. 2,016 개의 블록이 네트워크상에 추가될 때마다 노드들은 난이도 목표값을 재설정합니다. 난이도 재설정 동작은 다음과 같은 방정식으로 요약할 수 있습니다. 2,016개의 블록이 생성되는데 소요되는 시간이, 평균 시간인 20,160분보다 오래 걸린다면, 채굴 난이도를 낮추고, 적게 걸린다면 채굴 난이도룰 높입니다.

이러한 난이도 조정에 따라 블록이 생성되는 주기를 10분으로 유지합니다. 이 난이도는 노드 별로 다른 값을 가지는 것이 아니라, 블록체인 전체에 걸쳐 일률적으로 적용되는 수치입니다. 후보 블록을 구성하기 위해서 각 거래에 우선순위를 부여합니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 6

 

가장 높은 우선순위를 가지는 거래를 우선적으로 후보 블록에 추가함으로써 메모리 풀에서 거래를 선택합니다. 거래의 우선순위는 소비될 UTXO의 나이를 근거로 정해집니다. UTXO의 나이는 블록체인에 기록된 이후 지난 시간과 같습니다. 해당 UTXO가 블록체인상에 얼마나 깊이 파묻혀 있는지를 나타냅니다.

나이가 많고 큰 입력값을 가진 UTXO가 나이가 어리고 작은 입력값을 가진 UTXO에 비해 높은 우선순위를 가집니다. 트랜잭션의 우선순위는 입력값의 가치와 나이의 총합을 거래의 크기로 나누어 계산합니다. 블록 내부의 첫 50KB는 우선순위가 높은 거래들에게 할당되어 있습니다.

거래 수수료에 상관없이 우선순위에 의해서만 거래를 선택하기 때문에, 수수료 없이도 처리될 수 있습니다. 블록의 최대 크기 이내의 나머지 공간을, 최저 수수료 이상을 포함하고 있는 거래들로 채웁니다. 이때는 최고 수수료를 가진 거래부터 우선적으로 선택합니다.

메모리 풀에 남겨진 거래들은 다음 블록에 포함되기 위해 메모리 풀에 머물러 있습니다. 메모리 풀에 머물러 있는 동안 UTXO의 나이가 증가하게 되고, 그에 따라 우선순위가 점점 증가합니다. 자신이 생성한 거래가 블록에 빨리 포함되길 원하는 경우, 수수료를 높임으로써 시간을 줄일 수 있습니다.

앞서, 채굴을 위해 투자한 노력의 대가로, 두 가지 형태의 보상이 제공된다고 말씀드렸습니다. 이 두 가지에는 코인베이스와 거래 수수료가 포함됩니다. 코인베이스란 블록을 생성하면서 새롭게 생성된 코인을 의미합니다. 블록에 첫 번째로 추가되는 거래는 특수 형태의 거래로, 생성 거래 혹은 코인베이스 거래라고 부릅니다.

코인베이스 거래는 채굴 작업에 대한 보상을 제공해주는 거래로, 새로 생성된 코인베이스 보상금과 블록에 포함된 모든 거래에서 얻은 거래 수수료의 합을 보상으로 제공합니다. 코인 베이스 보상금은 네트워크의 반감 횟수에 따라 결정됩니다. 최초의 비트코인 코인베이스는 50비트코인이었습니다.

210,000개의 블록마다 반감기가 한 번 발생하기 때문에, 현재 블록의 높이를 반감기 간격으로 나눔으로써 반감 횟수를 결정할 수 있습니다. 반감 횟수만큼 보상금이 절반씩 감소합니다. 거래 사이에서 발생하는 수수료에 대해선 이미 설명해 드린 적이 있습니다. 간략히 정리해보면, 블록 내에 포함되어 있는 거래의 입출력 값을 각각 더한 후, 두 값을 빼 줌으로써 거래 수수료의 총액을 계산할 수 있습니다.

예시를 통해 블록 채굴에 대한 인센티브가 어떻게 책정되는지 알아보겠습니다. 그림은 277316 높이의 블록 생성 거래를 보여줍니다. 비트코인은 210,000개의 블록이 생성될 때마다 보상이 절반씩 줄어드는 시스템으로, 현재 높이에서 반감 횟수는 1입니다. 따라서 초기 50코인에서 절반 줄어든 25비트코인이 보상금으로 제공됩니다.

다시 말해, 현재 높이에서의 코인 베이스는 25비트코인이라는 것을 뜻합니다. 거래 수수료의 총액을 계산하기 위해서는 다음 식을 이용합니다. 트랜잭션 결과에 따라 수수료의 합이 0.09094928비트코인이라는 것을 알 수 있습니다.

 

 

 

새로운 블록 검증

아래 항목들은 채굴된 블록이 유효한지, 그렇지 않은지 검증하기 위한 기준들입니다. 해당 항목들을 충족하지 못하는 경우, 해당 거래는 거절됩니다. 해당 블록의 데이터 구조는 문법적으로 유효해야 합니다.

또한 PoW의 원리에 따라, 블록 헤더의 해시값은 사전에 정의된 목표 난이도보다 작아야 합니다. 해당 블록의 타임 스탬프는 향후 2시간 이내입니다. 해당 블록의 크기가 허용 가능한 한도 내에 있어야 합니다.

 

 

 

블록체인 연결

마지막으로, 블록 내에 포함되는 제일 첫 거래는 코인베이스 생성거래입니다. 비트코인 합의 메커니즘의 마지막 단계는 블록을 체인 안에 모아 가장 많은 작업 증명을 보유하고 있는 체인을 선택하는 것입니다. 노드가 새로운 블록을 검증하고 나면, 해당 블록을 기존의 체인에 연결함으로써 체인을 연장하려고 합니다.

블록체인에는 메인 블록체인에서 나와 브랜치를 형성하는 2차 체인이 존재합니다. 누적 난이도가 가장 큰 값을 가진 블록들로 구성된 체인이면 어떠한 것이라도 메인 체인이 될 수 있습니다. 대부분의 경우, 가장 많은 블록으로 연결된 체인이 메인 체인이 됩니다. 이때, 블록체인 네트워크상에서 동시에 둘 이상의 새로운 블록이 생성되면, 블록체인의 분기(fork)가 발생합니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 7

 

이 그림과 같이, 네트워크상에 2개의 블록이 동시에 생성되었다고 가정해봅시다. 네트워크상에 같은 높이로 존재하는 두 블록을 각각 초록색과 주황색으로 표시하였습니다. 이 블록들은 가까운 이웃 노드들에게 전파됩니다. 이 상태에서, 한 노드의 마이닝에 의해 초록색 블록을 부모 블록으로 가지는 새로운 검정색 블록이 생성되었다고 합시다.

이 검정색 블록이 네트워크상에서 전파되어 나가다가, 주황색 노드가 체인에 연결된 노드를 만납니다. 주황색 블록이 체인에 연결되어 있는 노드들의 경우, 새롭게 전달받은 검은색 블록의 부모 블록인 초록 블록이 존재하지 않습니다.

 

블록체인 : 비트코인 마이닝 알고리즘 원리, 이해 : 네트워크 분기 합의 알고리즘 원리, 이해 8

 

이러한 경우 블록체인의 분기가 발생합니다. 주황색 블록을 연결하고 있던 노드의 경우는 그림과 같이 분기된 체인을 형성하게 됩니다. 이때 주황색 체인이 2차 체인으로 변경되고, 더 긴 길이를 가지는 녹색-검은색 블록을 메인체인으로 연결하게 됩니다.

2차 체인으로 분류된 주황색 블록은 녹색-검정 블록이 메인체인으로 연결됨에 따라 고아 블록이 됩니다. 유효한 블록이긴 하지만, 부모 블록이 현 체인에서 발견되지 않는 블록을 고아 블록이라고 합니다. 기록은 있으나 메인체인에서 유지되지 않기 때문에 아무런 의미를 지닐 수 없는 블록입니다.

분기된 두 체인에서 동시에 블록이 생성되어 연결되는 경우가 있을 수 있습니다. 이 경우, 두 체인은 체인을 더 길게 연결하려는 경쟁을 하게 됩니다. 이 경쟁에서 승리해 더 긴 체인을 유지하는 체인이 메인체인이 되는 것입니다. 그렇다면, 주황색 블록에 포함된 거래들은 어떻게 되는 것일까요? 생성된 거래들은 네트워크 전체로 전파되기 때문에, 주황색 블록에 포함된 거래들은 이미 녹색 또는 검은색 블록에 포함되었거나 추후에 포함될 것입니다.

거래 자체가 유효하기만 한다면, 시간이 걸릴 뿐 반드시 블록에 포함되게 됩니다. 앞서 설명해 드렸던 것처럼, 블록들은 체인을 형성하는 과정에서 분기가 일어날 수 있습니다. 이 경우, 누적 난이도가 높거나 길이가 긴 블록을 가진 사이드 체인이 메인 체인으로 인정받게 됩니다. 분기가 일어나지 않도록 2,016개의 블록이 생성될 때마다 난이도를 조절하지만, 분기는 언제든 발생할 수 있습니다.

 

 

 

컨퍼메이션

컨퍼메이션은 특정 트랜잭션이 블록에 포함된 이후 몇 개의 블록이 뒤에 더 추가되었는지를 알려주는 지표입니다. 컨퍼메이션이 충분히 크다는 것은, 이 트랜잭션은 충분히 오랫동안 변동 없이 블록에 보관되어왔기 때문에, 취소될 가능성이 적다라는 것을 의미합니다.

1 컨퍼메이션은 해당 거래가 블록에 포함되어 블록체인에 연결되었음을 나타냅니다. 체인이 분기된 경우, 분기된 체인 중 하나의 체인이 확실히 메인 체인으로 선택되기까지의 기준을 6 컨퍼메이션으로 정하고 있습니다. 두 체인이 경쟁하게 된다 하더라도 새로운 블록이 6개가 추가로 생기기 전에 경쟁이 끝나게 됩니다.

따라서, 자신이 생성한 거래가 포함된 블록이 체인에 연결된 이후 6 컨퍼메이션을 가진다면, 해당 블록이 추후에 버려질 가능성이 없다는 것을 의미합니다. 이번 시간에서는 비트코인 마이닝 절차에 대해 자세히 설명해 드렸습니다. 트랜잭션을 검증하기 위한 조건과 비트코인이 채택하고 있는 합의 알고리즘인 PoW에 대해 설명 드렸습니다.

그리고 비트코인 채굴을 위한 노력의 대가로 얻는 보상에 대해 말씀드렸습니다. 채굴 과정을 거쳐 새롭게 생성된 블록은 각 노드에서 독립적으로 검증과정을 거친다는 것을 배웠고, 검증 과정을 거친 블록이 실제 블록체인 네트워크상에 어떻게 연결되는지 배웠습니다.

 

 

 

참조

http://www.kmooc.kr/courses/course-v1:POSTECHk+CSED490U1+2021_T1/about

 

블록체인 입문

블록체인과 암호화폐 기술을 깊이 배우기에 앞서, 비 전공자들도 이해를 할 수 있는 수준으로 블록체인과 암화화폐에 대한 high-level 설명 및 응용 예시를 제공하고 실제 상황에 적용할 수 있다.

www.kmooc.kr

반응형