의견.png

비츠

위키원
gamsin98 (토론 | 기여)님의 2019년 8월 2일 (금) 11:13 판
이동: 둘러보기, 검색

비츠(bits)는 블록의 작업증명(PoW) 합의 알고리즘에서 사용하는 채굴 난이도 목표값이다. 비츠는 논스값을 계산하는데 기준이 되는 특정 숫자를 나타내며 블록체인 전체에 걸쳐 일률적으로 적용된다. 작업증명 방식에서 블록해시가 특정 숫자보다 낮게 나왔을 때 논스값을 찾아내는데, 작업 난이도는 이 논스값의 어려운 정도를 나타낸다. 작업 난이도는 블록헤더 정보 중에서 비츠값으로 조절된다.

개요

블록해시가 특정 숫자보다 낮게 나올 때의 논스(nonce) 값을 찾아내는 것이 작업 증명이다. 작업 난이도는 논스(nonce) 값 계산의 어려운 정도를 나타낸다. 작업 난이도는 블록 헤더 정보에서 비츠(bits)라는 값으로 조절된다. 블록해시는 32바이트의 숫자라고 했을 때, 이해를 쉽게 하기 위해 블록해시를 부호 없는 1바이트의 숫자라고 해보자. 그럼 1바이트의 숫자값을 블록 해시값으로 산출하는 해시함수는 0 ~ 255 사이의 값을 결과로 산출한다. 블록해시가 128보다 작아야 한다고 하면, 0 ~ 255 사이의 값을 산출하는 해시함수를 적용해서 128보다 작은 블록 해시값이 나올 확률은 128보다 작은 수(0~127)의 개수 = 128/해시 함수가 산출할 수 있는 모든 값(0~255)의 개수 = 256, 즉, 128/256이므로, 50%의 확률이다. 블록해시가 64보다 작아야 한다면 64/256, 즉 25%의 확률로 논스(nonce) 값을 구할 수 있다. 블록해시가 32보다 작아야 한다면 확률은 12.5%로 줄어든다. 여기서 128, 64, 32라는 특정 숫자가 바로 블록 헤더 정보의 비츠(bits)이다. 실제로 비츠(bits)의 값이 128, 256 이런 식으로 저장되지는 않고, 지수와 계수를 사용하는 별도의 표현 방식이 있다. 난이도는 2,160개의 블록이 생성되는데 소요되는 시간이 평균 시간인 21,600분(10분/블록 * 2,160블록)보다 오래 걸리면 낮아지고, 적게 걸리면 높아지는 방식으로, 대략 21,600분을 주기로 전체적으로 평균 10분이 소요되는 하나의 난이도가 전체에 적용된다. 블록헤더의 비츠(bits)는 논스(nonce) 값을 계산하는데 기준이 되는 특정 숫자를 나타내며, 블록체인 전체에 걸쳐 일률적으로 적용되는 숫자다.[1]

사용 예시

비트코인의 304756 블록헤더json 데이터

비트코인의 작업증명(POW;proof of work)은 블록체인에 추가할 블록을 누가 만들 것인가를 정하기 위한 작업이다. 이를 위해 모든 노드들이 참여하는데, 특정 숫자(난이도)보다 낮은 블록해시값을 가장 빨리 찾는 노드가 블록을 만들 수 있다. 따라서 성능 좋은 그래픽카드, 즉 해시값을 빨리 계산할 수 있는 컴퓨터가 확률적으로 더 빨리 목표값을 찾는다. 즉 목표 해시값을 찾을 확률은 그래픽카드의 성능에 비례하는 것이다. 이때 특정 숫자보다 작은 해시값을 먼저 찾은 노드가 블록을 생성할 권한을 가지고 그 보상으로 비트코인을 받게 되는 것이다.

현재 그림의 블록해시값은 000000000000000041cbd5ba9607416285167b4b6ff65bda651ac0f55e03bbd6 이고, 이전 블럭 해시값은 000000000000000005fca80796201fe3fbdf2b695b64feb84e60b5d0c4ba2a99이다. 하지만 블록의 해시값을 간단히 나타내기 위해서, 위의 해시값 중에서 앞의 0인 부분을 없애고 1cbd5ba9607416285167b4b6ff65bda651ac0f55e03bbd6 만을 표시하며, 이것이 지갑에는 트랜잭션 아이디(Transaction id), 텍시드(Txid)라고 표시된다. 이것이 현재 블록을 구분하는 이름과 같은 역할을 하며, 따라서 거래는 이 블록 해시값인 텍시드(Txid)에 의해서 구별되고, 블록엑스퍼러(blockexplerer)에서 블록 해시값을 입력하면 거래 내역을 바로 알 수 있다. 블록체인은 그림과 같이 json 데이터에서 현 블록에 이전 블럭 해시(prev_block)가 포함되는 것을 말한다.[2]

난이도

비트코인 채굴에는 난이도가 설정되어 있다. 암호를 풀면 블록이 생성되는데 그 암호를 푸는데 모든 네트워크가 참여했을때 10분이 걸리도록 설정한 것이다. 이는 초저속 인터넷 속도를 자랑하는 오지의 사람들까지 블록이 골고루 전파되는 시간을 고려한 것이다. 또한 빠른 블록 생성은 전파 시간과의 괴리로 인해 체인분리, 즉 포크를 더욱 자주 발생시키므로 하나의 체인으로 확정되기까지 더 많은 확인이 필요하게 된다. 이렇게 블록타임을 일정하게 하기 위해서 블록을 풀어내는 암호의 난이도를 조절한다.[3]

난이도 구하는 방법

비트코인의 블럭 헤더부 비츠(Bits)로부터 난이도를 구하는 방법

일단 비츠(bits)에서 타깃(target)을 구한다. 먼저, 비츠(bits)를 16진수로 바꾸고, 앞의 두개의 수와 뒤의 6개의 수를 분리하여 타깃(target) 공식에 넣고 계산을 하면 된다. 그림의 빨간색, 파란색 부분에 해당하는 16진수 비츠(bits)를 넣어주면 되며, 이때 계산된 값이 커런타깃(current_target) 이 된다. 그리고 맥시멈 타깃(maximum_target)은 상수로서, 0x00000000FFFF0000000000000000000000000000000000000000000000000000 로 미리 정해져 있다. 이때, 난이도는 아래 수식으로 구한다.

                 difficulty  = maximum_target / current_target

따라서, 커런타깃(current_target)이 작으면 비트코인의 난이도가 높아지며, 커런타깃(current_target)이 맥시먼 타깃(maximun_target)일 때 난이도가 1이 된다. 최대 난이도는 맥시먼 타깃(maximum_target) / 1이며, 약 2^(224)이다. [4]

각주

  1. 블록체인 기초 개념〉, 《호모에피시오》, 2016-01-23
  2. 하나로움, 〈비트코인의 블럭에 대한 이해 1〉, 《투게더》, 2014-06-18
  3. 트윈블레이드, 〈비트코인과 난이도 개념, 트위터〉, 《스팀잇》
  4. loum(럼), 〈비트코인의 난이도 구하는 방법〉, 《스팀잇》, 2016년도

참고자료

같이 보기


  의견.png 이 비츠 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.