ABOUT ME

-

Today
-
Total
-
  • [Bitcoin] 비트코인 블록에는 무엇이 담겨있을까?
    Study/Blockchain 2019. 8. 29. 11:00
    반응형

     

     

    블록체인은 도대체 어떻게 탄생하게 되는 것일까?

    블록체인을 구성하는 핵심 요소인 'Block'에 대해서 알아보자.

     

     

    Block + chain = ?

     

    블록체인은 왜 블록체인이라고 불리는 것일까?

    이유를 쉽게 설명하자면 블록이 사슬처럼 연결되어 있기 때문이다.

    첫 번째 블록 생성 이후 두 번째 블록이 생성될 때를 살펴보면,

    두 번째 블록에는 이전 블록의 해시값이 담기기 때문에 사슬처럼 연결되어 있다고 볼 수 있다.

    그래서 'Blockchain' 이라고 불리는 것이며 각각의 '블록'이 서로 연결되어 '체인'을 형성하는 것이다.

     

     

     

     

    블록의 구조를 들여다보자

     

    블록체인을 이루는 블록에는 무엇이 담겨있고 어떤 구조로 이뤄져있을까?

    기본적으로 블록은 1) 현재 블록 해시 2) 블록 Header 3) 거래 개수 4) 블록 Body 5) 기타정보 로 이뤄져있다.

     

    즉, 블록은 일정 기간 동안 발생한 거래들을 기록한 장부이고

    블록체인이란 이 블록들이 길게 연결되어 있음을 의미한다.

    그리고 모든 참여자가 똑같은 장부를 가지고 있기 때문에 위변조가 어렵다.

     

    비트코인 블록은 자바스크립트의 데이터 형식인 json 형식으로 기록된다.

    따라서 비트코인 json 데이터를 확인해보면 보다 자세한 정보들을 확인할 수 있다.

     

     

     

    비트코인의 json 데이터

     

     

    비트코인 데몬을 통해 블록을 직접 생성하고 블록 데이터를 확인할 수 있다.

     

     

    bitcoin-cli -regtest  getblockhash 102

     

    이는 블록 해시를 구하는 명령어이고, 102번의 해시값을 알 수 있다.

     

     

    bitcoin-cli -regtest getblock 블록해시값

     

    블록을 확인하기 위해서는 위 명령어에 해당 블록의 해시값을 입력하면 된다.

    입력하면 아래와 같은 결과값을 얻을 수 있고, 블록에 담긴 데이터를 볼 수 있다.

     

    user@ubuntu:~/bitcoincore$ bitcoin-cli -regtest getblock 2e19497ab369be33a158a08f905d295e041c54c5f97379887b3a096c61f565b2
    {
      "hash": "2e19497ab369be33a158a08f905d295e041c54c5f97379887b3a096c61f565b2",
      "confirmations": 2,
      "strippedsize": 227,
      "size": 263,
      "weight": 944,
      "height": 101,
      "version": 536870912,
      "versionHex": "20000000",
      "merkleroot": "0c0e2a6dfc994bd0edd1412e423ae14ae3369ab2b63e7dc3c6eb8ce843e44663",
      "tx": [
        "0c0e2a6dfc994bd0edd1412e423ae14ae3369ab2b63e7dc3c6eb8ce843e44663"
      ],
      "time": 1523694481,
      "mediantime": 1523694480,
      "nonce": 1,
      "bits": "207fffff",
      "difficulty": 4.656542373906925e-10,
      "chainwork": "00000000000000000000000000000000000000000000000000000000000000cc",
      "previousblockhash": "782d4e6d2ed36b8b06f693fd73410a589dc2e45bf4a071fd2894d578e44f23f4",
      "nextblockhash": "671c5bf491db5dfef801e4ca5d5d003865fcbd99df59be0270f75f186fe712c2"
    }
    

     

     

    거래, 블록 헤더 그리고 블록 생성

     

    [ Block Header ]

     

    블록 헤더는 version, previous blockhash , merkle root hash, time stamp, bits, nonce 로 구성되어 있다.

     

    ① 버전(version) : 프로토콜의 업그레이드 및 변경 사항을 추적하는 데 사용한다.

    ②이전 블록 해시(previous blockhash) : 마지막으로 추가된 이전 블록헤더의 해시이다. 이는 SHA256으로 암호화된 64자 코드이다. 체인을 형성하는 가장 중요한 요소이며, 위변조 방지를 위한 핵심 데이터이다. 그리고 반드시 부모 블록 뒤에 현재 블록이 오도록 하고 있다.

    ③타임스탬프(time) : 타임스탬프는 블록의 생성 시간을 의미한다. 타임스탬프는 채굴자에 의해 지정될 수 있으며 헤더를 해싱하기 시작한 Unix epoch 시간이다. 실제 현실의 시간과는 다른 개념의 시간이라고 볼 수 있다.

    ④난이도목표(bits) : 작업 증명(PoW) 난이도는 4byte 크기에 해당하는 bits로 부터 계산할 수 있다. 난이도는 nonce 값 계산의 어려운 정도를 측정한 것이다. 비트코인 난이도는 2주마다 변경된다.

    비트코인은 PoW에 기반하여 블록생성을 하는데, 블록을 생성하는 '채굴(mining)' 이란 nonce 값을 찾아내는 것이다.

    (※PoW : 블록 해시가 특정 숫자보다 낮게 나올 때의 nonce 값을 찾아내는 것이 작업 증명)

    Hashing 속도가 빠르다면 10분이 아니라 더 단축할 수 있지만, 비트코인은 작업 난이도를 bits 값으로 조절한다.
    즉, 블록 1개 생성 시간이 평균 시간인 10분보다 오래 걸리면 난이도는 낮아지고 적게 걸리면 높아지는 방식을 사용한다. 

    ⑤넌스(nonce) : nonce 값은 nonce값을 블록헤더의 입력값 중 하나로 해서 계산되는 블록 해시 값이 특정 숫자보다 작아지게 하는 값을 의미한다. 이 때 특정숫자는 bits에 의해 결정되며 모든 채굴자들은 이에 따른다.

    즉, 생성되는 블록의 블록 해시는 블록헤더를 hashing 하여 만들어지는데 이 때 nonce 값에 의해 블록 해시값이 결정된다고 볼 수 있다.

     

    nonce 값은 0부터 시작해서 조건을 만족하는 해시값을 찾을 때까지 계속 1씩 증가하며 변조된다.

    nonce 값을 변경시켜가며 hashing한 결과 값이 특정 숫자보다 낮게 나오는 경우,

    이 때 nonce 값이 바로 작업 증명을 나타내는 nonce 값이고, hashing한 결과 값이 생성된 블록의 해시 값으로 결정된다.

     

    nonce를 찾는 동안의 거래는 어디에 보관되고 있는가?

    현재 블록 생성이 완료되기 전까지 거래는 별도의 보관소에 담겨져있고,

    nonce 값을 찾은 후에 다음 블록에 거래들이 추가적으로 들어가게 된다.


    ⑥머클루트해시(merkle root hash) : 블록에 포함된 모든 트랜잭션의 해시라고 볼 수 있다. 개별 거래 정보의 거래 해시를 2진 tree 형태로 구성할 때, tree의 root에 해당하는 해시값을 의미한다.
    머클루트의 결과값을 통해 각 거래 정보들이 변경되었는지 무결성을 검증한다. 또한, 개별 거래 모두를 하나의 해시값으로 변환하기 때문에 거래 개수에 관계없이 데이터 크기를 일정하게 유지할 수 있다.

     

    [ Block hash ] 

     

    어떤 블록인지 구분할 수 있는 역할을 하는 것이 블록 해시이며, 블록 헤더의 6가지 정보를 입력값으로 하고 해시 함수를 거쳐 나온 값을 의미한다.

     

     


    작업 증명의 보상


    블록체인은 설명했다시피 새로운 블록을 생성하고 계속 체인으로 이어 붙이면서 연결하는 구조이다. 
    이렇게 새로운 블록을 생성하며 블록에 포함된 거래를 확정시켜주기 위해서는 계산 문제를 풀어야하고,

    처음으로 문제를 푼 사람에게 블록 작성 권리를 부여하고 보상을 준다.

    채굴자는 보상으로 블록 생성당 2019년 기준 12.5BTC와 해당 블록에 포함되는 거래 수수료를 받는다.

     

     

     

    https://www.blockchain.com/en/btc/block-height/585078

     

     

    블록체인 탐색기 웹페이지에 들어가보면 비트코인 뿐만 아니라 이더리움 등등

    암호화폐들의 블록과 블록에 담긴 정보들을 볼 수가 있다.

    블록헤더의 내용과 더불어 채굴자가 얼마의 보상을 받았는지, 총 거래 내역 갯수 등을 확인할 수 있다.

     

     


     

     

    블록체인의 블록 하나에는 이렇게나 많은 정보들이 담겨있고, 누구나 볼 수 있다는 특징이 있다.

     

    반응형

    댓글