ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [암호화폐]암호화폐 채굴 : 보상과 복잡성
    금융정보/04.대체투자(부동산, 코인 등) 2023. 2. 5. 04:24
    반응형

    암호화폐 채굴의 의미

    암호화폐 채굴이라고 해서 DB에 접속해서 암호화폐를 직접 생성하는 것을 상상하면 안된다. 채굴이라는 이름은 힘들고 시간이 들어간다고 해서 붙여진 것이고, 실제 채굴은 암호화폐 네크워크가 출제하는 문제를 맞추는 것이다. 문제는 아래와 같은 조건을 만족해야 한다.

    1. 채굴자의 "지식", "경험"과 상관없이 모두에게 동일한 난이도를 가져야 함(누구나 채굴 가능)

    2. 출제자는 출제/채점이 쉽고, 채굴자는 맞추기 어려워야 함(채굴로 무분별한 보상생성 방지)

    3. 난이도 조절이 쉬워야 함(채굴로 인한 적정 보상 유지)

    "수학문제" 같은 것으로 위 1 ~ 3 조건을 만족하는 문제를 만들기는 힘들다.( 수학문제는 문제 만들기도 어렵고 누구나 맞출 수 있는 것도 아니다.) 대부분의 암호화폐들은 1 ~ 3 조건을 만족하는 문제를 만들기 위해서 해시함수를 사용한다. 

    해시함수의 의미

    해시함수는 어떤 메시지를 입력하면 고정된 길이의 값을 출력해주는 함수이다. 우리가 해시함수를 직접 만들 것은 아니기 때문에 해시함수가 갖는 비가역성과 항상 일정한 길이를 갖는다는 특징만 알고 있으면 된다. ( [암호화폐]해시함수란 무엇인가? 참조 ) 이 특징을 이용해서 우리는 위의 1 ~ 3 조건을 만족하는 문제를 만들 수 있다.

    예를 들면 n 개의 "0" 으로 시작하는 해시값을 찾아라는 문제가 있을 수 있다. 무엇을 투입하면 어떤 해시값이 나오는지 모르는 상황에서 채굴자는 기초지식에 상관없이 투입변수를 바꿔서 답을 찾는 방법밖에 없기 때문에 조건 1을 만족한다. 문제가 단순하고 정답인지 아닌지 판단은 쉽지만 채굴자는 n 개의 "0"으로 시작하는 해쉬값을 찾기위해 투입값을 수백번 넣고 결과를 확인해야 하기 때문에 조건 2도 만족한다. 마지막으로 문제에서 단순히 n을 늘리면 난이도가 올라가고, n을 줄이면 난이도가 낮아지므로 조건 3도 만족하게 된다.

    실제로 https://www.blockchain.com/en/ 에서 비트코인을 검색해서 블록들을 조회하면 각 블록의 해시값들이 n 개의 "0"으로 시작한다. 

    그림1: 비트코인 해시값 예시( https://www.blockchain.com/explorer/assets/BTC )

    그림1에서 확인할 수 있듯이 비트코인의 경우는 채굴자에게 "글에서 예시로 제시한 문제"( n 개의 "0" 으로 시작하는 해시값을 찾아라 )와 비슷한 문제를 사용하는 것으로 볼 수 있다.

    채굴의 복잡성(난이도)

    채굴의 복잡성은 문제의 난이도이다. 위 예시 문제 n 개의 "0"으로 시작하는 해시값을 찾아라는 문제라면 n 이 늘어날수록 복잡성은 증가하게 된다. makehash 라는 해시함수를 만들어주는 함수,  findahash 라는 n 개의 "0" 으로 시작하는 해시값을 찾아내는 함수를 통해서 n 을 1 ~ 5 까지 부여하여 채굴하는 것을 아래 코드처럼 구현할 수 있다. 

    import hashlib
    
    data = "해시테스트"
    difficulty = 5
    
    # 해시값을 만들어주는 함수
    def makehash(data):
        data = str(data)
        hash = hashlib.sha256(data.encode('utf-8')).hexdigest()
        return hash.encode('utf-8')
    # n(difficulty) 개 만큼 0 으로 시작하는 해시값을 찾아내는 함수 
    def findhash(data, difficulty):
        i = 1
        result = makehash(data)
        while result[0:difficulty] != "0" * difficulty:
            i += 1
            data1 = data + str(i)
            result = makehash(data1)
            result = result.decode('utf-8')
            if result[0:difficulty] == "0" * difficulty:
                print("시행횟수: {0} \n결과: {1}".format(i, result))
                break  
    
    # 최초 실행함수 n(difficulty)이 1 ~ 5까지 각각 대입하면서 결과를 print
    if __name__ == "__main__":
        for i in range(1, difficulty+1):
            findhash(data, i)

     아래에 첨부된 결과 이미지처럼 n이 늘어날수록 시행횟수가 늘어나는 것을 확인할 수 있다. 

    그림2: n(difficulty)에 따른 시행횟수 증가 확인

    결국 아래와 같은 기사가 보이면 비트코인 채굴자들의 시행횟수가 늘어난다는 것을 뜻하고, 이는 비트코인 채굴에 대한 보상이 채굴자들에게 돌아가는 시간이 오래 걸린다는 뜻이다.(채굴이 오래걸리니까)

    기사1: ZDNET Korea 기사(https://zdnet.co.kr/view/?no=20230130090356 2023-02-05 AM 03:55 )

    채굴의 보상

    고생을 해서 얻어낸 채굴의 보상은 무엇일까? 바로 채굴의 대상이 된 암호화폐이다. 암호화폐도 역시 해시값으로 이루어져 있기 때문에 풀어낸 해시값 자체가 바로 채굴자에게 주어지는 보상이 되는 것이다. ( 위 그림 2 에서 나온 각 해시값들이 채굴자에게 주어지는 보상 ) 보상이 암호화폐이기 때문에 채굴은 암호화폐 공급을 늘려준다. 더 중요한 점은 보상이 암호화폐로 주어지면서 "블록체인"에 새로운 블록이 추가된다는 점이다. 이를 통해 채굴은 블록들간의 거래를 인증해주는 역할을 할 수 있다.

    아래 그림 3과 같은 블록체인을 가정하자. 

    그림3: 암호화폐 초기 상태

    이 때 2 번 코인에 거래가 일어나면 그 거래는 바로 블록체인 정보에 포함되는 것이 아니라 그림4처럼 블록체인의 메모리 풀에 저장된다. 일종의 임시저장 상태가 되는 것이다. 

    그림4: 2번코인 거래가 일어난 뒤

    이 후 채굴자가 3 번 코인을 채굴하면서 그림 5와 같이 메모리 풀에 저장된 거래들을 블록체인 안으로 넣어준다. 일종의 거래 인증이 완료되는 것이다. 블록체인에 최신의 정보를 입력해 주면서 그 사이의 과거 정보를 인증해주는 일련의 과정이다.

    그림5: 채굴로인한 신규 블록생성 & 거래 인증

    실제로  https://www.blockchain.com/en/ 에서는 비트코인의 메모리 풀에 임시저장된 거래량이 얼마인지에 대한 데이터를 아래와 같이 제공해 주고 있다. 

    그림6: 비트코인 메모리 풀 데이터( https://www.blockchain.com/explorer/assets/BTC )

    즉, 채굴은 암호화폐 통화량 공급과 거래 인증(보안성) 기능을 수행하면서 암호화폐 생태계를 유지해준다고 할 수 있다.

    반응형
Designed by Tistory.