블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출
채굴은 새로운 블록과 비트코인이 블록체인 네트워크상에 추가되는 과정입니다. 새로운 블록을 생성하기 위해서 채굴자들은 네트워크에 컴퓨팅 파워를 제공하고, 그에 대한 보상으로 비트코인을 지급받는 것입니다. 이러한 보상을 받기 위해 채굴자들은 자신의 컴퓨터를 이용해 암호화 해시 알고리즘을 기반으로 하는 어려운 수학 문제를 푸는데, 이것이 채굴의 기본이라고 할 수 있습니다.
블록체인 네트워크상에서 이 문제를 다른 노드들보다 빨리 해결해야 하고, 블록을 생성할 권한을 얻기 위해 비트코인 생성원리 각 노드들은 서로 경쟁하게 됩니다. 이 문제에 대한 해답을 찾는 과정을 작업증명 (Proof of Work)이라 하고, 이것은 채굴자가 새 블록을 생성하기 위해 어려운 계산을 하려고 했다는 사실을 증명하는 역할을 합니다. 또한 채굴을 통해, 동일한 비트코인 금액이 여러 번 소비되는 거래인 이중 지불을 방지할 수 있습니다.
채굴자들은 네트워크상에서 발생하는 새로운 거래들을 승인한 후, 전 세계의 노드들이 가진 장부에 해당 거래들을 기록하게 됩니다. 새 블록에는 지난 블록 이후에 발생한 거래들이 포함되며, 블록의 일부가 되어 블록체인에 추가된 거래는 승인되었다고 간주됩니다. 승인된 거래를 전달받은 노드는, 거래에 포함된 비트코인을 소유할 수 있습니다.
채굴자들은 마이닝을 위해 자신의 컴퓨팅 파워를 제공함에 따라 두 가지 종류의 보상을 받습니다. 하나는 새 블록으로부터 새로운 코인을 생성하는 것이고, 나머지 하나는 해당 블록 내에 들어있는 거래들에 대한 수수료입니다.
채굴로부터 생성된 새로운 블록의 의미
네트워크상에서 새롭게 생성된 블록들은 특별한 의미를 지니게 되는데, 그 블록들이 어떤 중요한 의미를 가지는지 설명해 드리겠습니다. 채굴자는 새로운 블록을 생성하기 위해, 다른 채굴 노드들과 경쟁하게 된다고 이미 설명 드렸습니다. 이때, 새로운 블록이 전파된다면 노드 사이의 경쟁이 실질적으로 종료되었다고 볼 수 있습니다.
즉, 새로운 블록을 수신한다는 것은 해당 경쟁에서 다른 누군가가 이미 승리하고, 본인이 패배했다는 것을 의미합니다. 하지만 이러한 경쟁의 종료는, 또 다음 블록을 위한 새로운 경쟁의 시작이 되는 것입니다. 다음으로, 비트코인의 채굴에 직접적으로 관여하는 노드에 대해 소개하겠습니다.
비트코인 네트워크상에 있는 몇몇 노드들은 채굴자라고 불리는 특수 노드들입니다. 채굴 노드는, 즉 마이너는 비트코인 상에 있는 미승인 거래를 전송받아서 다른 노드들에게 전파합니다. 또한 미승인 거래들을 새로운 블록에 추가하는 역할을 하기도 합니다.
마이닝 풀
초기에는 개인이 자신의 PC를 이용해 채굴에 참여했으나, 시간이 지날수록 경쟁하는 노드들이 많아지고 채굴의 난이도가 높아져 채굴이 어려워졌습니다. 이때 혼자 채굴하던 개인 채굴자들이 다른 사람들과 함께 마이닝 하여 채굴 확률을 높이도록 한 것이 바로 ‘마이닝 풀’입니다.
개개인의 컴퓨팅 파워를 인터넷을 통해 모아 채굴 확률을 높이고, 투자된 지분만큼 수익을 배분받습니다. 솔로 마이닝의 경우, 즉, 혼자 마이닝을 한다고 했을 때 보상을 모두 독차지하는 반면 채굴 확률이 매우 떨어집니다. 이렇게 마이닝 풀에 참여하여 함께 채굴하는 경우, 보상금을 나누어 갖지만, 채굴 확률이 높아지므로 적은 금액이라고 하더라도 꾸준히 수익을 얻을 수 있다는 장점이 있는 것입니다.
현재 다양한 마이닝 풀이 존재하며, 각 마이닝 풀마다 보상금을 분배하는 다양한 방식이 존재합니다. 대부분의 경우 마이너가 PoW (Proof of Work) 방식을 통하여 풀에 얼마나 기여했는지에 따라 지분의 크기가 결정됩니다.
마이닝 풀을 이용해 채굴하는 과정
자신이 얻고자 하는 암호화폐를 선택해야 합니다. 비트코인을 포함하여 다양한 화폐가 존재하기 때문에 마이닝 풀 목록을 참고하여 풀을 찾아야 합니다. 그리고 마이닝 풀별로 보상금을 분배하는 기준이 다르기 때문에 자신의 컴퓨터 사양 등을 고려하여, 자신에게 유리한 풀을 선택해야 이익을 극대화할 수 있습니다. 자신이 참여하고 싶은 풀을 찾았다면 해당 풀의 웹사이트에 계정을 만들고 채굴을 시작할 수 있습니다.
블록체인 : 비트코인 네트워크에서 합의가 비트코인 생성원리 필요한 이유 : 마이닝 과정을 통한 합의 도출 1
비트코인은 총 발행량이 정해져 있는 암호화폐입니다. 각 블록은 평균적으로 10분마다 생성된다고 말씀드렸습니다. 새로운 블록이 210,000개가 생성될 때마다 새로 생성되는 비트코인의 양이 절반으로 줄어듭니다. 이러한 규칙에 따르면, 평균적으로 약 4년의 주기를 가지고 통화 발행량이 감소하는 셈입니다. 비트코인 발행량은 시간이 갈수록 기하급수적으로 감소하여, 2140년경에는 더 이상 새롭게 발행되는 비트코인이 없게 됩니다.
그래프는 시간이 갈수록 점점 적은 양의 비트코인이 발행되고, 결국 한정된 양의 비트코인이 네트워크상에서 유지될 것이라는 것을 보여줍니다. 이렇게 되면 새로운 블록을 생성함으로써 얻는 비트코인 보상이 없어지기 때문에, 비트코인 채굴 수익의 많은 부분이 거래 수수료에서 발생하게 될 것입니다.
마이닝에 대한 전체적인 과정
마이닝을 하는 이유는 블록을 생성해서 블록체인에 연결하기 위함입니다. 또한, 블록을 생성하는 이유는 생성된 거래(트랜잭션)들을 블록에 포함시켜 거래를 확정시키기 위함입니다. 따라서 우선 비트코인 네트워크에 있는 몇몇의 노드들이 거래를 생성하는 것부터 시작하겠습니다. 이 노드들은 full node가 될 수도 있고, wallet 같이 light node가 될 수도 있습니다.
블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출 2
그림에 있는 비트코인 네트워크에서는 모두 full node이며, 노란색 노드는 miner의 역할을 수행하는 노드라고 가정하겠습니다. 몇몇 노드에서 트랜잭션을 생성하고, 해당 노드는 자신과 연결된 peer 노드들에게 생성한 트랜잭션을 브로드캐스팅합니다.
블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출 3
이 그림에서는 마이너가 트랜잭션을 받았을 때, 어떤 일을 하는지에 대한 설명입니다. 마이너는 우선 수신한 트랜잭션이 유효한지 검증을 합니다. 예를 들어서 트랜잭션의 syntax와 structure가 올바른지, input으로 사용된 UTXO가 mempool이나 블록체인 안에 이미 포함된 것인지 등을 검사합니다. 검사 결과 유효한 트랜잭션으로 판단되면, 이 트랜잭션을 memory pool(transaction pool)에 추가시킵니다.
또한, 이 트랜잭션을 자신과 연결된 비트코인 생성원리 peer 노드들에게 전파시킵니다. 만약 트랜잭션이 유효하지 않다고 판단되면, 이 트랜잭션을 버려서 무시합니다. 추가적으로 설명한 트랜잭션 검증 프로세스는 마이너 뿐만 아니라 비트코인 네트워크에 있는 모든 full node가 동일한 일을 수행합니다.
블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출 4
마이너들은 항상 쉬지 않고 마이닝을 합니다. 마이닝 하는 도중에 트랜잭션을 수신하게 되면, 검증을 완료한 뒤 해당 트랜잭션을 자신의 Memory pool에 채웁니다. 마이너가 마이닝을 중단했다는 것은 알맞은 nonce 값을 찾았거나 다른 마이너가 생성한 새로운 블록을 수신했다는 것을 의미합니다.
자신이 nonce 값을 찾아 새로운 블록을 만든 후, 브로드캐스팅을 했다면, 바로 그 블록의 블록헤더 해시를 PreviousBlockHash 에 넣고, 새로운 블록 바디를 구성하여 마이닝을 다시 시작합니다. 만약 다른 마이너가 생성한 블록을 받았을 경우라면, 그 블록의 유효성을 검증합니다.
그 블록이 유효하다면, 수신한 블록의 블록헤더 해시를 PreviousBlockHash에 넣고, 새로운 블록 바디를 구성하여 마이닝을 다시 시작합니다. 이때 새로운 블록 바디를 구성하는 절차에 대해서 말씀드리면, 우선 마이너 자신의 memory pool에 있는 트랜잭션 중에서 새로 생성된 블록에 포함된 트랜잭션들을 제거합니다.
그리고 먼저 마이너에게 보내는 coinbase 트랜잭션을 추가한 후, memory pool에 있는 트랜잭션 중 우선순위가 높은 트랜잭션을 우선적으로 블록 바디에 추가합니다. 그리고 이 블록 바디에 있는 트랜잭션들을 이용해서 머클루트를 계산하고, 이것을 블록헤더의 머클루트값으로 사용합니다. 이렇게 새로운 후보 블록이 구성되었다면, 마이닝이 시작됩니다.
블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출 5
Proof of Work(PoW)는 작업을 증명해서 블록체인 생태계에 기여하는 것입니다. 여기서 작업이란 결국 알맞은 nonce 값을 찾는 것이 됩니다. nonce 값은 후보 블록에서 유일하게 변경되는 값입니다. 따라서 이 값을 0부터 시작해서 1씩 증가하며 블록 헤더의 해시값을 계산합니다.
이때 계산된 해시값을 DifficultyTarget 값과 비교하는데, 이 값보다 작거나 같은 해시값이 나온다면, 맞는 nonce 값을 찾은 것입니다. nonce 값을 증가시켜 가며 해시값을 계산하는 것을 반복하게 되면 맞는 nonce 값을 찾기까지 아주 많은 컴퓨팅 파워가 필요합니다. 이렇게 자신의 컴퓨팅 파워를 소모하는 작업을 증명하는 것이 mining의 핵심인 PoW입니다.
블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출 6
DifficultyTarget보다 같거나 작은 해시값을 도출하는, 알맞은 nonce 값을 찾은 후, 마이닝에 성공한 블록을 자신과 연결되어있는 peer 노드들에게 전파해야 합니다. 새로 생성된 블록을 전달받은 노드들은 먼저 블록의 유효성을 검증합니다.
예를 들어서 블록의 syntax나 structure가 올바른지, 블록 헤더의 해시가 DifficultyTarget보다 작은지 등을 검사합니다. 블록 유효성 검사를 제대로 통과하면, 각 노드는 자신이 보유하고 있는 local blockchain에 해당 블록을 연결합니다. 블록은 하나의 마이너만 생성할 수 있는 것이 아니기 때문에 여러 명의 마이너가 동시에 블록을 생성할 수도 있습니다.
이때 p2p 네트워크에서 지연 등의 이유로 각 노드는 다른 local blockchain을 보유하게 됩니다. 그림은 두 마이너가 동시에 마이닝에 성공해서 생성된 블록을 전파했을 때 나타나는 상황입니다. 3번 노드는 2번 마이너로부터 생성된 블록을 더 빨리 전달받아서 자신의 local blockchain에 연결했고, 그 이후 5번 마이너로부터 생성된 블록을 전달받아서 이를 고아 블록으로 처리했습니다. 블록이 생성되어 전파까지 이루어졌습니다. 하지만 고려해야 할 것들이 남아있습니다.
블록체인 : 비트코인 네트워크에서 합의가 필요한 이유 : 마이닝 과정을 통한 합의 도출 7
우선 두 마이너가 동시에 블록 생성에 성공했을 때, 블록의 전파지연으로 블록의 분기(fork)가 발생할 수 있습니다. 분기된 블록체인을 보여주는 아래의 그림에서, 검은색 선으로 연결된 체인이 메인 체인이고, 중간에 회색으로 분기된 체인에 연결된 블록이 고아 블록입니다.
그러면 블록체인이 분기된 상황에서, 어떻게 검은색 선을 메인체인으로 정할 수 있을까요? 비트코인에서는 가장 긴 체인을 비트코인 생성원리 메인 체인으로 정하게 됩니다. 그래서 블록이 하나 더 연결되어 있는 검은색 선의 체인이 메인 체인이라는 것을 알 수 있습니다. 그러면 어떻게 해서 검은색 선의 체인에 블록이 하나 더 연결된 것일까요?
그림을 보면 3개의 node가 하늘색 블록을 연결했고, 2개의 node가 파란색 블록을 연결했습니다. 이 비트코인 네트워크는 축소된 것이라 마이너가 둘밖에 없지만, 사실은 수많은 마이너 들이 비트코인 네트워크에 분포되어 있습니다. 그래서 이렇게 생각해 볼 수 있습니다.
상대적으로 해시 파워가 큰 마이너들이 previous 블록으로 연결한 하늘색 블록 뒤에 새로운 블록을 연결할 것이기 때문입니다. 결국은 하나의 메인체인으로 수렴하게 된다는 것입니다. 추가적으로 비트코인 네트워크는 10분마다 블록이 생성되는 것을 목표로 하기 위해서 2,016개의 블록이 생성될 때마다 DifficultyTarget값을 조정합니다.
블록체인과 암호화폐 기술을 깊이 배우기에 앞서, 비 전공자들도 이해를 할 수 있는 수준으로 블록체인과 암화화폐에 대한 high-level 설명 및 응용 예시를 제공하고 실제 상황에 적용할 수 있다.
비트코인 생성원리
이번 글의 선수지식으로는 비트코인의 transaction과 block에 대한 개념을 알고 있어야 합니다.
비트코인이 어떻게 채굴되는지에 앞서 여러 기본 지식을 먼저 알아보겠습니다.
우선 비트코인이 한정된 수량(2100만개)이란 것은 모두가 알 것입니다. 그런데 많은 사람들이 잘못 알고 있는 사실이 하나 있습니다. 2100만개의 비트코인이 모두 채굴된 후에는 채굴로 얻는게 아무것도 없다는 것입니다. 이는 잘못된 사실입니다.
채굴에서 얻을 수 있는 것은 채굴로 인한 새로운 비트코인뿐만 아니라 블록내의 transaction fee들도 얻을 수 있습니다.
즉, 2100만개의 채굴이 끝나더라도 채굴자들은 블록내의 수수료로 이득을 취합니다.
비트코인의 경우 초창기에는 한 블록을 채굴할때마다 50개의 비트코인을 얻었는데 210,000개의 블록마다 (약 4년) 반감기가 존재하므로 시간이 많이 지날수록 채굴로 얻는 새로운 비트코인 보다는 채굴로 얻는 수수료가 더 높아질 것입니다.
* 반감기란 채굴로 얻는 새로운 비트코인의 개수가 절반으로 줄어드는 것을 뜻합니다.
채굴이란 transaction들을 모아서 새로운 블록을 만드는 것입니다. 그럼 우선 transaction들을 모아야겠죠? 이 transaction들을 모아놓는 곳을 memory pool 또는 transaction pool이라고 부릅니다. (이 글에서는 memory pool이라고 부르겠습니다.)
예를 들어 Alice라는 Full Node가 있다고 가정해보겠습니다. Alice는 여러 transaction들을 각 transaction이 유효한 transaction인지를 확인하는 여러 규칙과 비교해보고 맞으면 memory pool에 집어넣습니다.
그리고 블록생성을 위한 계산을 합니다. (이 계산은 아래에서 자세히 알아보겠습니다.) 이 계산을 다른 노드들보다 빨리 해낸다면 Alice는 memory pool에 있는 transaction들로 블록생성을 완료하고 나머지 노드들에게 자신이 블록생성을 했다고 알립니다.
여기서 Kane이라는 노드가 있다고 가정해봅시다. Kane역시 여러 transaction들을 memory pool에 담으며 블록생성을 위한 계산을 하고 있었는데 Alice가 먼저 계산을 끝내고 블록생성을 완료해서 새로운 블록을 받았다고 해봅시다. 그럼 Kane은 새로운 블록의 transaction들과 자신의 memory pool에 있는 transaction들을 비교하여 이미 새로운 블록에 들어있는 transaction들은 제거합니다.
위에서 채굴로써 얻는 수익은 새로운 비트코인뿐 아니라 transaction들의 수수료도 얻을 수 있다고 하였습니다. 그렇다면 채굴자들은 높은 수수료가 있는 transaction들을 위주로 memory pool을 구성할 가능성이 높습니다. 그래야 블록을 생성했을 때 자신이 얻는 수익이 더 높아질테니까요. 그러므로 비트코인 송금시에 적당한 수수료를 지불해야 나의 transaction이 빠른시간안에 반영될 것입니다.
이제 어떤 계산을 통해 채굴이 이루어지는지 알아보겠습니다.
비트코인의 블록헤더에는 Target과 Nonce가 들어있습니다.
Nonce는 아직 결정되지 않은 숫자입니다. (Target은 이미 결정되어 있습니다.)
채굴은 block header를 SHA-256 함수에 넣어서 나온 값이 Target과 같거나 낮으면 됩니다. Target은 4bytes이며 앞에 몇개의 자리수가 0으로 나타내어집니다. 예를 들면 0000F2423. 이런식입니다.
위의 예시처럼 Target이 0000F2423. 이라면, 채굴자는 block header SHA-256함수에 넣어서 나온값이
00000A32424F. 이런식이면 채굴에 성공하고 블록생성을 하게 됩니다.
왜냐하면 현재 SHA-256을 통해 나온 값은 앞자리 0이 5개이므로 앞자리 0이 4개인 Target보다 낮은 숫자이기 때문입니다.
(*Target값과 같아도 채굴에 성공합니다.)
그런데 block header에서 Nonce는 아직 결정되지 않은 숫자라고 했습니다. 즉, 채굴자는 Nonce 값을 조절하면서 Target보다 낮은 값을 찾을 수 있습니다. 예를 들어보겠습니다.
block header에서 Previous Block Hash, Version, Merkle Root 등의 정보가 있습니다. 이 정보들과 155라는 Nonce값을 SHA-256 함수에 집어넣으면 어떠한 값이 나오겠죠? 그런데 그 값이 Target보다 낮으면 채굴자는 이번에는 이 정보들과 2555라는 Nonce값을 SHA-256 함수에 넣어보는 겁니다. 이런식으로 Nonce값을 조절하면서 Target보다 낮은 값을 만들어내면 채굴에 성공하게 됩니다.
**하지만 Nonce값은 4 bytes입니다. 즉, 32비트이므로 unsigned int를 적용시 최대값은 약 42억정도 입니다. 여기서 이런 의문이 들 수 있습니다. 42억정도면 최근 기술로 봤을 때 금방 연산 가능할거같다고 말입니다. 이런 부분에 대해서는 채굴 심화편에서 다루겠습니다.
이번에는 난이도 조절에 대해 알아보겠습니다.
비트코인은 평균 10분마다 채굴이 되는 것을 목표로 난이도를 재설정하게 되는데 이 난이도는 2016개의 블록마다 재설정됩니다. 대략 2주의 기간인데 2주마다 블록생성시간을 확인해보고 평균값이 10분보다 빠르다면 난이도를 높이고 10분보다 느리다면 난이도를 낮추게 됩니다.
난이도를 높인다는 것은 Target값을 더 내리는 것입니다. 예를 들어 기존 난이도가 앞에 5개의 자리수가 0인 것보다 작은 값을 찾는것이였다면 6개의 자리수가 0인 것보다 작은 값을 찾게 만들면 난이도는 더 올라가게 됩니다.
예를 들어 1부터 1억까지 적혀있는 제비뽑기 종이가 있다고 가정하면 1000만보다 낮은 숫자를 뽑을 확률보다 1만보다 낮을 숫자를 뽑을 확률이 훨씬 낮기 때문입니다.
이렇게 어떤 노드가 채굴에 성공하면 자신이 채굴을 성공했다는 것을 주변 노드들에게 전파하고 주변 노드들은 유효한 채굴인지 검증을 하고 검증에 성공하면 그 블록을 연결시킵니다.
여기까지 비트코인의 채굴의 기본원리에 대해 알아보았습니다. 조금 더 자세히 알아보고 싶으신 분은 아래 링크를 참고하시길 바랍니다.
채굴심화:
분산화된 합의
이미 설명해 드린 것처럼, 비트코인의 분산화된 합의는 네트워크상의 노드들 사이에서 독립적으로 일어나는 아래의 프로세스에 따라 이루어집니다. 첫 번째, 모든 풀 노드가 각 거래에 대해 독립적으로 검증을 실시합니다. 두 번째, 작업 증명 알고리즘을 이용하여, 마이너들은 검증된 거래들을 새로운 블록에 추가합니다. 세 번째, 모든 노드들이 새 블록을 검증한 후 블록체인에 연결합니다. 네 번째, 모든 노드가 작업증명을 통해 연결한 체인들 중 가장 긴 체인을 선택합니다.
이 네 가지 프로세스들에 대해 살펴본 후, 네트워크 전체의 합의를 얻어내기 위해 네 가지 프로세스가 어떻게 상호작용하는지 알아보겠습니다. 새롭게 생성된 거래는 비트코인 네트워크 내에 있는 이웃 노드들에게 전송된 후, 네트워크 전체로 전파됩니다. 이웃 노드들에게 거래를 전달하기 전에, 모든 비트코인 노드들은 전달받은 거래를 우선적으로 검사해야 합니다. 유효한 거래들은 검증 과정을 통해 네트워크상으로 전파되지만, 유효하지 않은 거래들은 첫 노드에서 폐기됩니다.
거래의 검증
다음은 거래를 검증하기 위해 확인해야 할 조건 중 일부를 서술한 것입니다. 첫 번째, 트랜잭션의 구문과 데이터 구조가 정확해야 합니다. 두 번째, 코인 베이스 거래는 전송할 수 없습니다. 새로운 블록이 생성될 때 보상으로 제공되는 코인 베이스의 경우, 일반적인 거래처럼 다른 노드에게 전송할 수 없습니다. 세 번째, 각각의 입력값에 대해, 참조 출력값이 풀 내의 어떠한 거래 내부에 이미 존재한다면 해당 거래는 거부되어야 합니다.
네 번째, 짝을 이루는 거래가 풀에 존재하지 않는 경우 고아 거래 풀에 추가됩니다. 다섯 번째, 각각의 입력값에 대해 참조 출력값은 존재해야 하며, 해당 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에 대해 설명 드렸습니다.
그리고 비트코인 채굴을 위한 노력의 대가로 얻는 보상에 대해 말씀드렸습니다. 채굴 과정을 거쳐 새롭게 생성된 블록은 각 노드에서 독립적으로 검증과정을 거친다는 것을 배웠고, 검증 과정을 거친 블록이 실제 블록체인 네트워크상에 어떻게 연결되는지 배웠습니다.
블록체인과 암호화폐 기술을 깊이 배우기에 앞서, 비 전공자들도 이해를 할 비트코인 생성원리 수 있는 수준으로 블록체인과 암화화폐에 대한 high-level 설명 및 응용 예시를 제공하고 실제 상황에 적용할 수 있다.
비트코인 생성원리
Welcome to Junksupply.com. DYI Ski and board builders manufacturing material supplies.
Our products and services: Ski and snowboard manufacturing material supplies, kiteboard manufacturing materials, splitboard, splitboard clips, diy ski and snowbaord, diy kiteboard and wakeboard, make own snowboard, make your own skis, make own kiteboard, make own surfboard, making own wakeboard, ptex base uhmwpe, abs sidewalls, base for skis and snowboard, topsheet materials, bio based natural epoxy resin for performance, hemp and flax bcomp perfomance fabric materials for skis and snowbaord, triaxial glass fabric, m6 metal inserts, ski and snowboard edges, carbon fiber fabric, paulownia wood cores, wood cores for skis and snowbaords 비트코인 생성원리 and kiteboard and wakeboards, surf board repair, glass fabric cloth for surfboards, sidewall and insert materials for skis and snowboards, rail abs material for skis and snowbaords and kiteboards and wakeboards, ski package kits, snowboard package kits, wakebaord and kiteboard kits packages.
0 개 댓글