ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비트코인 채굴(마이닝, mining)이란?
    Cryptography 2021. 10. 24. 21:16
    반응형

    비트코인 채굴(mining)은 새로운 블록이 블록체인에 추가되는 프로세스입니다. 트랜잭션들을 포함한 블록은 비트코인 네트워크 상의 '채굴 노드'의 채굴 프로세스를 통해서 인증(validated)됩니다. 채굴되고 검증된 블록은 블록체인에 추가되며 블록체인의 크기는 계속 커져갑니다.

     

    이 프로세스는 PoW 요구사항으로 인해서 자원을 많이 사용하게 됩니다. PoW 요구사항으로 인해서 채굴자들은 네트워크 상의 타겟 난이도(difficulty target)보다 작은 숫자를 찾기 위해 서로 컴퓨팅 경쟁을 해야하기 때문입니다. 정확한 값을 찾아야 하는 이 난이도는 새롭게 추가되는 블록이 허용되기 전에 채굴자들이 요구되는 자원을 소비하도록 만듭니다. 그러한 채굴자들은 partial hash inversion 문제라고도 알려진 이 PoW 문제를 해결함으로써 새로운 코인을 만들어냅니다. 이 프로세스는 컴퓨팅 파워와 전기 등의 많은 자원을 소비합니다. 이 프로세스는 또한 조작과 중복 지불 공격으로부터 시스템을 보호함과 동시에 새로운 가상화폐가 비트코인 환경에 추가될 수 있도록 해줍니다. 

     

    대략 하나의 새로운 블록은 10분마다 생성되는데, 이는 비트코인의 발생 빈도를 조절하기 위함입니다. 이 빈도는 비트코인 네트워크 상에서 조정되는데요. 비트코인 코어 클라이언트 코드 상에 "money supply"를 조절하기 위해 인코딩되어 있습니다. 

     

    대략 하루에 144개 블록, 1,728개의 비트코인이 매일 생성됩니다. 실제로 생성되는 코인의 수는 매일 다른데요. 그러나 생성되는 블록의 수는 일평균 144개로 비교적 일정합니다. 또한, 비트코인의 공급은 제한이 있습니다. 2140년에, 2100만개 비트코인이 모두 생성되어 이후에는 새로운 비트코인이 생성될 수 없습니다. 그러나 비트코인 채굴자들은 트랜잭션 수수료를 부과하면서 여전히 이익을 발생시킬 수 있습니다. 

     

    이번 글에서는 비트코인 채굴과 관련해 아래의 사항들을 알아보겠습니다:

     

    • 채굴자가 하는 일
    • 채굴 보상
    • Proof of Work (PoW)
    • 채굴 알고리즘
    • hash rate

     


    채굴자가 하는 일

    비트코인 네트워크에 노드가 연결된 이후에, 비트코인 채굴자는 아래와 같은 작업을 수행합니다:

     

    1. 네트워크와의 동기화

    비트코인 네트워크에 새로운 노드가 참여하게 되면, 새로운 노드는 다른 노드에 블록 히스토리를 요청하여 블록체인을 다운로드 받습니다. 여기서는 채굴자의 관점에서 기술하였으나, 이러한 다운로드는 채굴자만 수행하는 것은 아닙니다.

     

    2. 트랜잭션 인증

    네트워크 상의 트랜잭션 브로드캐스트는 풀 노드에 의해서 서명과 아웃풋을 검증하여 인증됩니다. 

     

    3. 블록 인증

    채굴자와 풀 노드는 특정 규칙에 대한 검증을 수행하여 받은 블록에 대한 인증을 수행합니다. 이 프로세스는 nonce 값을 확인하는 것과 블록 내의 각 트랜잭션을 검증하는 것으로 구성됩니다. 

     

    4. 새로운 블록 생성

    채굴자는 새로운 블록을 인증한 이후에 트랜잭션 브로드캐스트를 결합해서 네트워크 상에 새로운 블록을 제안(propose)합니다. 

     

    5. PoW 수행

    이 작업은 채굴 프로세스의 핵심이며 컴퓨팅적인 퍼즐을 풀어서 채굴자가 새로운 유효한 블록을 찾는 방식입니다. 블록 헤더(header)는 32비트 nonce필드를 가지고 있으며 채굴자는 결과 해시값이 사전에 정의된 타겟 난이도보다 적을 때까지 반복적으로 nonce 값을 변경하여야 합니다. 

     

    6. 보상 수령

    노드가 PoW를 해결하면, 해당 노드는 즉각 그 결과를 브로드 캐스트하고 다른 노드들은 그것을 검증하고 수용하게 됩니다. 아주 낮은 확률로 거의 동시에 다른 노드가 블록을 발견하여, 발견한 블록이 네트워크 상에서 받아들여지지 않는 경우가 존재합니다. 하지만, 일단 블록이 수용되면 채굴자는 12.5 비트코인과 연관된 트랜잭션의 수수료를 받게 됩니다. 

     

     

    채굴 보상

    채굴자는 PoW를 풀어서 새로운 블록을 발견했을 때에 새로운 코인으로 보상받습니다. 또한, 채굴자는 보상으로 제안한 블록에 포함되는 트랜잭션들의 트랜잭션 수수료를 받습니다. 새로운 블록은 대략적으로 고정된 10분마다 생성됩니다. 새로운 비트코인의 생성율은 매 210,000 블록마다 50% 줄어들게 되며, 이는 대략 4년 주기입니다. 2009년 비트코인이 시작할 때에 채굴 보상은 50 비트코인이었습니다. 210,000 블록 이후에 블록 보상은 반으로 줄었습니다. 2012년 11월 25 비트코인으로 줄었고 현재는 2020년 5월 이래로 블록 당 6.25 비트코인입니다. 이 메커니즘은 비트코인에 하드코딩되어서 인플레이션을 조절하고 비트코인 공급을 제한합니다. 

     

     

    Proof of Work

    PoW는 유효한 블록을 만들기 위해서 충분한 컴퓨팅 자원이 사용되었음에 대한 증명입니다. PoW는 매번 새로운 블록을 생성하기 위해 랜덤노드가 선택된다는 아이디어에 기반합니다. 이 모델에서, 노드들은 선택되기 위해 서로 컴퓨팅적 능력으로 경쟁합니다. 아래 공식은 비트코인에서의 PoW 요구사항을 합산합니다:

     

    H(N || P_hash | | Tx || Tx ... Tx) < Target

     

    여기서 N은 nonce이고, P_hash는 이전 블록의 해시값이며, Tx는 블록의 트랜잭션을 나타내고, Target은 타겟 네트워크 난이도 값입니다. 이것은 위에서 보인 concat된 필드의 해시값이 타겟 해시 값보다 작아야 한다는 의미입니다.

     

    이러한 조건을 만족하는 nonce를 찾는 방법은 brute force 방법 밖에 없습니다. 채굴자는 이러한 nonce를 발견하면, 그 블록은 즉시 브로드캐스트되고 다른 채굴자에 의해 인증됩니다.

     

    채굴 알고리즘

    채굴 알고리즘은 아래와 같은 단계로 구성됩니다:

     

    1. 비트코인 네트워크로부터 이전 블록의 헤더를 얻습니다.
    2. 네트워크 상에서의 트랜잭션 브로드캐스트 세트를 제안할 블록에 넣어서 합칩니다.
    3. 이전 블록 헤더값의 double 해시를 계산하고 nonce와 새롭게 제안된 블록을 SHA256 알고리즘을 사용해 결합합니다.
    4. 결과 해시값이 현재의 타겟 난이도보다 낮은지 체크하고, 낮다면 PoW를 푼 것입니다. PoW 성공 시, 발견된 블록은 네트워크에 브로드캐스트되고 채굴자는 보상을 받습니다.
    5. 만약 결과 해시값이 현재의 타겟 난이도보다 낮지 않다면, 위 과정을 반복하며 nonce값을 증가시킵니다.

     

    비트코인 네트워크의 해시율이 올라가면서, 32 비트 nonce의 총량이 거의 소진되었습니다. 이러한 이슈를 해결하기 위해서, 추가 nonce 솔루션이 구현되었으며, 코인베이스 트랜잭션이 채굴자가 검색할 수 있는 큰 범위의 nonce를 제공하기 위해 사용되었습니다.

     

    Image from Author inspired by [1]

    채굴 난이도는 시간이 지나며 증가하고 한때 단일 CPU 노트북 컴퓨터로 채굴이 가능했던 비트코인은 이제 PoW를 위해서 특별한 채굴 센터를 필요로 하게 되었습니다. 현재 난이도 레벨은 아래와 같이 비트코인 CLI를 통해 확인할 수 있습니다:

     

    $ bitcoin-cli getdifficulty
    12876842089683.48

     

    이 숫자는 비트코인 네트워크 상의 난이도를 나타내는데요. 타겟 난이도보다 낮은 해시 값을 찾기가 얼마나 어려운지 나타냅니다. 이 숫자는 매 2,016 블록마다(약 2주) 평균적으로 10분마다 새로운 블록이 발생하도록 조정하기 위해 변경됩니다. 

     

    난이도는 아래와 같이 변경되어 왔습니다:

    Bitcoin Network Difficulty - Image from [2]

     

     

    해시율(Hash Rate)

    해시율은 기본적으로 초당 해시 계산 갯수 비율을 나타냅니다. 다른 표현으로는, 블록을 찾기 위해 비트코인 네트워크 상의 채굴자들이 해시를 계산하는 속도입니다. 비트코인 초기에 이 값은 CPU가 사용되었기에 꽤 낮았습니다. 그러나, 전문 마이닝풀과 Application Specific Integrated Circuits(ASICs)가 도입되며, 해시율은 기하급수적으로 증가하였습니다. 이 결과 비트코인 난이도도 급격하게 증가하였습니다.

     

    아래 그래프는 초당 terahashes 변화를 보여줍니다. 150m terahashes / s는 15,000,000,000,000,000,000개의 해시값이 초마다 계산됨을 의미합니다.

    Image from [2]

     

     

     

     

    Reference

    [1] Mastering Blockchain

    [2] https://www.blockchain.com/charts/difficulty

     

     

    반응형
Kaden Sungbin Cho