[Blockchain] Bitcoin mining process

오영주·2021년 12월 21일
3

블록체인

목록 보기
10/10
post-thumbnail
post-custom-banner

채굴의 의미

  • "새로운 블록과 비트코인이 블록 체인 네트워크 상에 추가되는 과정"
  • 채굴자
    • 블록 생성 위해서 어려운 수학문제를 푸는데 필요한(해시값을 찾아내기 위한) 네트워크에 컴퓨팅 파워 제공(PoW:Proof of Work)하고 보상(bitcoin 등)을 제공받는다. 이때 블록 생성 권한을 얻기 위해 각 노드들은 문제를 푸는데 있어서 속도 경쟁을 해야한다.
    • 채굴자는 네트워크상에서 발생하는 새로운 거래들을 승인(검증)한 후, 전 세계의 노드들이 가진 장부에 해당 거래들을 기록한다.
    • 새 블록에는 지난 블록 이후에 발생한 거래들이 포함되며, 블록의 일부가 되어 블록체인에 추가된 거래는 승인되었다고 간주된다.
  • 채굴 보상
    1. 새 블록으로부터 새로운 코인을 생성, 채굴자가 이를 소유할 수 있게 된다.
    2. 해당 블록 내에 들어있는 거래들에 대한 수수료를 받는다.

새 블록을 수신했다는 것이 다른 채굴 노드들에게 주는 의미

  • 채굴자는 새 블록을 생성하기 위해서 다른 채굴 노드들과 경쟁을 하게 되는데, 채굴 도중에 새로운 블록이 전파된다면, 노드 사이의 경쟁이 실질적으로 종료되었다고 볼 수 있다.
  • 즉, 새로운 블록을 수신한다는 것은, 해당 경쟁에서 다른 누군가가 이미 승리하고 본인이 패배했다는걸 뜻한다.
  • 또한 이 경쟁의 종료는 다음 블록을 위한 새로운 경쟁이 시작됐음을 뜻한다.

채굴노드

  • 비트코인 네트워크상에는 여러 종류의 노드들이 존재하는데, 이 중 몇몇 노드는 채굴자(miner)라고 부르는 특수 노드들이다.
  • 채굴 노드는, 즉 마이너는 비트코인 상에 있는 미승인 거래를 전송받아서 다른 노드들에게 전파하며, 또한 미승인 거래들을 새로운 블록에 추가하는 역할(채굴)을 한다.

마이닝 풀

  • 비트코인 개발 초기에는 개인들이 자신의 pc를 이용해 채굴에 참여했지만, 시간이 지날수록 경쟁하는 노드들이 많아지고, 채굴 난이도가 높아져서, 채굴이 어려워졌다. 채굴자들은 혼자 채굴하기보다는, 여러 사람들 개개인의 컴퓨팅 파워를 모아 함께 채굴하여 채굴 확률을 높이기 시작했는데, 이게 'mining pool'이다.
  • 혼자 마이닝을 한다고 했을 때 보상을 모두 독차지하는 반면 채굴 확률이 매우 떨어진다. 그러나 마이닝 풀에 참여하여 함께 채굴하면 수익을 셰어해야하지만, 채굴 확률이 높아지므로 적은 금액이라도 꾸준히 수익을 얻을 수 있다.
  • 현재 다양한 마이닝 풀이 존재하며, 각 마이닝 풀마다 보상금을 분배하는 다양한 방식이 존재하는데, 대부분의 경우 마이너가 PoW (Proof of Work) 방식을 통하여 풀에 얼마나 기여했는지에 따라 지분의 크기가 결정된다.
  • 마이닝 풀을 이용한 채굴 과정
    • 마이닝 풀별로 보상금을 분배하는 기준이 다르기 때문에 자신의 컴퓨터 사양 등을 고려하여, 자신에게 유리한 풀을 선택해야 이익을 극대화한다. 참여하고 싶은 풀을 찾았다면 해당 풀의 웹사이트에 계정을 만들고 채굴을 시작할 수 있다.

마이닝 전체적 과정

  • 위 그림에서 노드들은 비트코인 네트워크에서 모두 full node이고, 특히 노란색은 miner라고 가정해보자

트랜젝션 수신

  1. 몇몇 노드(full node 일수도 wallet 과 같은 light node일수도)들이 거래를 생성하면, 해당 노드는 자신과 연결된 peer node 들에게 생성한 transaction 을 broadcasting 한다.
  2. miner 가 이 전파된 transaction 을 받으면, 이 transaction 이 유효한지 검증한다.
  • (트랜잭션의 syntax와 structure가 올바른지, input으로 사용된 UTXO가 mempool이나 블록체인 안에 이미 포함된 것인지 등을 검사)
  1. 유효한 transaction 으로 판단되면 transaction 을 memory pool(=transaction pool)에 추가하고, 자신과 연결된 peer node들에게 전파시킨다.
    3-1. 유효하지 않다면 이 트랜젝션 버린다.

마이닝

  • 마이너들은 쉬지않고 마이닝을 한다. 마이닝 도중에도 transaction 을 수신, transaction 을 검증, memory pool 에 채우기를 반복한다.
    • 마이너가 마이닝을 중단했다는 것은 알맞은 nonce 값을 찾았거나 다른 마이너가 생성한 새로운 블록을 수신했다는 것을 의미한다.
  1. nonce 값을 찾은 경우
  • 새로운 블록을 만든 후, 브로드캐스팅을 하며, 바로 그 블록의 블록헤더 해시를 PreviousBlockHash 에 넣고, 새로운 블록 바디를 구성하여 마이닝을 다시 시작합니다.
  1. 다른 마이너가 생성한 블록을 받았을 경우(경쟁에서 진 것)
  • 그 블록의 유효성을 검증하고, 유효하다면, 수신한 블록의 블록헤더 해시를 PreviousBlockHash에 넣고, 새로운 블록 바디를 구성하여 마이닝을 다시 시작한다.

새로운 블록 바디 만드는 과정

    1. 마이너에게 보내는 코인베이스(블록체인 생성한 자에게 코인을 주는 거래) 트랜잭션을 추가한 후, memory pool에 있는 트랜잭션 중 우선순위가 높은 트랜잭션을 우선적으로 블록 바디에 추가(마이너 자신의 memory pool에 있는 트랜잭션 중에서 새로 생성된 블록에 포함될 트랜잭션들을 제거)
    1. 이 블록 바디에 있는 트랜잭션들을 이용해서 머클루트를 계산하고, 이것을 블록헤더의 머클루트값으로 사용한다.
    1. 1,2의 과정으로 후보블록 구성을 완료하고 나면 마이닝 과정을 시작한다.
    1. 마이닝
    • 위에서 구성한 블록 헤더 전체와 nonce 값을 포함한 값의 hash 값이 bitcoin network 상의 difficult target 값과 비교해서 이 값보다 작거나 같아야 블록 체인 네트워크에 포함시킬 수 있다.
    • nonce 값은 후보 블록에서 유일하게 변경되는 값이기때문에, 이 값을 0부터 시작해서 1씩 증가시켜보면서 전체의 해시값이 적절한지를 비교하게되는데, 이 과정을 마이닝이라고 부르게 된다.
    • nonce 값을 증가시켜 가며 해시값을 계산하는 것을 반복하는 과정은 많은 컴퓨팅 파워를 필요로 하게 되는데, 이렇게 자신의 컴퓨팅 파워를 소모하는 작업을 증명하는 것이 mining의 핵심인 PoW이다.
    1. 알맞은 nonce 값을 찾고 나면 성공한 블록을 주변 peer 노드들에게 전파한다.
    1. 새로 생성된 블록을 전달받은 노드들은 블록의 유효성을 검증하고, 블록 유효성 검사를 제대로 통과하면, 각 노드는 자신이 보유하고 있는 local blockchain에 해당 블록을 연결한다.

여러 마이너가 동시에 블록을 생성한 경우

  • 위의 블록 바디를 만드는 과정은 하나의 마이너만 하는게 아니기 때문에, 여러 마이너가 동시에 블록을 생성한 경우가 발생할 수 있다. 이때 p2p 네트워크에서 지연 등의 이유로 각 노드는 다른 local blockchain을 보유하게 된다.
  • 위의 그림에서 3번 노드는 2번 마이너로부터 생성된 블록을 더 빨리 전달받아서 자신의 local blockchain에 연결했고, 그 이후 5번 마이너로부터 생성된 블록을 전달받아서 이를 고아 블록으로 처리한다.(상황 종료)
  • 우선 두 마이너가 동시에 블록 생성에 성공했을 때, 블록의 전파지연으로 블록의 분기(fork)가 발생할 수도 있다. 위의 그림에서처럼 블록체인이 분기된 경우 비트코인에서는 가장 긴 체인을 메인체인으로 정하게 된다. 그림에서는 블록이 하나 더 연결되어 있는 검은색 선의 체인이 메인 체인이 될 것이다.
  • 그러면 어떻게 해서 검은색 선의 체인에 블록이 하나 더 연결된 것일까?
    • 왼쪽 그림을 보면 3개의 node가 하늘색 블록을 연결했고, 2개의 node가 파란색 블록을 연결했다.
    • 이 비트코인 네트워크는 축소된 것이라 마이너가 둘밖에 없지만, 사실은 수많은 마이너 들이 비트코인 네트워크에 분포되어 있다. 이런 상황이라면, 상대적으로 해시 파워가 큰 마이너들이 previous 블록으로 연결한 하늘색 블록 뒤에 새로운 블록을 연결할 것이다. 즉, 결국 하나의 메인체인으로 수렴하게 될 것이다.

Reference

profile
data scientist
post-custom-banner

0개의 댓글