채굴 거래정보의해쉬값은당가포함된블록merklhas계산

채굴 에 대해 쓴 글 요약 하자면 아래와 같다.

그리고 블록 해쉬는 작업 증명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래
정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다 채굴은 블록에
담긴 거래 정보를 유효한 것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Pro

of of Work)과 그에 따른 보상을 합친 개념이다. 블록 해쉬가 특정 숫자보다 낮게
나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다 작업 난이도는 블록 헤더 정
보에서 bits 라는 값으로 조절된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce

채굴 BlockChain 기초 개념
채굴 상당히 피상적으로만 알고 있던, 그래서 얘기하다가 서로 질문을 던져보면 너도 모르고 나도 모
르는. 블록이 정확히 뭘 말하는 거냐

..
그래서 채굴이 정확히 뭐라는 거냐
..

어려운 문제를 푼다는데 그게 대체 무슨 문제라는 거냐
..
분산된 어쩌구라는데 뭐가 어떻게 분산되어 있다는 거냐

..
사실 국내에서 찾을 수 있는 이런 저런 자료를 봐도 우연의 일치일까, 딱 어떤 정해진 선까지
만 다루고 더 깊은 얘기가 없다 그래서 그 수준까지의 내용을 보고 떠오르는 질문에 대한 답을

밑에 정보를 보면 자세히 알수 있다.

찾기는 쉽지 않았는데, 이 책에 바로 그 수준 너머에 있는 내용이 담겨 있다 블록체인에 칭
칭 감길 수 있게 해주는 길잡이로서 많이 좋은 책이다 하지만 원문이 원래 그런건지 아니면 번
역이 좀 그런건지, 여튼 번역 결과는 그리 높은 점수를 줄 수는 없을 듯. 시작하기 전에 블

록체인과 비트코인의 구분 정도는 해보자 블록체인은 비트코인의 운영 바탕이 되는 체계이고, 비
트코인은 블록체인을 화폐 발행과 운영에 응용한 것이다 고로 핵심이 되는 기본 기술 체계는 블
록체인이고, 비트코인은 블록체인을 바탕으로 만들어낸 서비스의 하나이다 그럼 블록체인이 어떻게

작동하는지 기초부터 한 번 들여다보자 BlockChain
블록체인은 최초의 블록(Genesis Block)부터 시작해서 바로 앞의 블록에 대한 링크를
갖고 있는 링크드 리스트다 블록체인은 여러 노드에 걸쳐 분산되어 저장 및 관리되며, 블록

에는 거래 정보가 포함되어 있으므로, 블록의 집합체인 블록체인은 모든 거래 정보를 포함하는
거대한 분산 장부라고 할 수 있다 Block 블록은 블록체인의 원소로서 개념적으로는 다수의
거래 정보의 묶음을 의미한다 블록은 블록 헤더와 거래 정보, 기타 정보로 구성된다

블록 헤더는 version , previousblockhash , merklehash , t
ime , bits , nonce 이렇게 6개의 정보로 구성된다 , , , , , 이렇게 6
개의 정보로 구성된다 거래 정보는 입출금과 관련한 여러가지 정보를 보유하고 있다

기타 정보는 블록 내에 있는 정보 중에서 블록 헤더와 거래 정보에 해당하지 않는 정보를 말하
며, 블록 해쉬 계산에 사용되지 않는다 Block Header
블록 헤더는 다음의 6가지 정보로 구성

version : 소프트웨어/프로토콜 버전 previousblockhash : 블록 체인에서
바로 앞에 위치하는 블록의 블록 해쉬 merklehash : 개별 거래 정보의 거래 해쉬를
2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값 time : 블록이 만들어진 시간

bits : 난이도 조절용 수치 nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값
을 찾아낼때까지의 1씩 증가하는 계산 회수 Block Hash 블록의 식별자 수행을 하는 블
록 해쉬는 6가지의 블록 헤더 정보를 입력값으로 하고, 여기에 SHA256 해쉬 함수를 2회

적용해서 계산되는 값으로, 32바이트의 숫자값이다 이름은 블록 해쉬이지만 그 값은 블록 전
체를 해쉬한 값이 아니라, 블록 헤더를 해쉬한 값이다 지금까지의 내용을 바탕으로 블록 해쉬를
구하는 과정을 그림으로 나타내면 다음과 같다 이제 이 그림을 중심으로 얘기를 풀어가보자 완

료된 거래 정보의 변경이 사실상 불가능한 이유 거래 정보의 해쉬값은 해당 거래가 포함된 블록
의 merklehash 계산에 입력값으로 사용되고, merklehash 는 블록 해쉬의 계산
에 입력값으로 사용된다 블록 해쉬는 다음 블록(A라 하면)의 previousblockhash

값으로 저장되며, previousblockhash 은 A 블록의 블록 헤더 정보로서, A
블록의 블록 해쉬를 계산하는데 입력값으로 사용된다 따라서, 거래 정보가 변경되면 merkle
hash 가 변경되고, merklehash 가 변경되면 블록 해쉬가 변경되고, 블록 해쉬의

변경은 다음 블록의 블록 해쉬 변경으로 연쇄적으로 이어지게 된다 그리고 블록 해쉬는 작업 증
명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 한다 블록 하나 채굴하는데 평균 10분이 소요되고

, http://bitcoincharts.com/bitcoin/ 에서 확인한 2016-01-
23 지금 총 블록 수가 약 40만 블록이므로, 최초의 원조 블록인 Genesis 블록에 포
함된 거래를 변경하면 약 400만 분, 약 7.6년의 시간이 소요된다 그 7.6년의 시간 동

안에도 처음보는 블록들도 평균 10분 마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사
실 상 불가능하다 완료된 거래 정보를 변경하려면, 변경하려는 거래 정보가 포함된 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 하는데, 이는 많은 시간이 소요되고, 그 동안

다른 노드들에 의해 블록이 계속 추가되므로, 완료된 거래 정보의 변경은 현실적으로 사실상 불
가능하다 채굴 채굴은 일반인들이 비트코인을 쉽게 이해할 수 있도록 만든 용어로서, 작업 증명
(Proof of Work)과 보상을 합친 개념이라고 생각하면 된다 Proof of Work

(작업 증명) 작업 증명은 혁신 블록을 블록체인에 추가하는 작업을 완료했음을 증명하
는 것이라고 이해하면 된다 처음보는 블록을 블록체인에 추가하려면, 그 처음보는 블록의 블록 해쉬
를 계산해내야하고, 그 블록 해쉬를 계산해내려면 그 블록의 블록 헤더 정보 중의 하나인 no

nce 값을 계산을 통해 구해야 한다 결론적으로 이 nonce 값을 구하는 것이 바로 작업
증명이다 nonce 값의 계산 결과부터 말하면 nonce 값은, 이 nonce 값을 입력값
중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다 그리고 해

쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에
서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바
꿔가면서 찾아낼 수 밖에 없다 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce 다

다시 말해, 아래 그림의 블록 헤더란에 포함된 6가지 정보 중에서 확정되지 않아서 값을
바꿀 수 있는 유일한 항목이 nonce 다 이 nonce 값을 1씩 증가시키면서 반복적으로
계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블

록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 처음보는
블록으로서 블록 체인에 추가되며 작업이 완료 된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의
nonce 값이 바로 작업 증명을 나타내는 nonce 값이다 이 과정을 그림으로 살펴보면

아래와 같다 아래의 그림은 블록 해쉬가 000000a84.. 보다 작게 나오는 nonce 값
을 구하는 과정을 나타내고 있다 앞에서 설명한 대로 nonce 외의 모든 항목의 값은 이미
정해져 있다 nonce 값이 0 일 때의 해쉬를 구해보니 000000a84.. 보다 큰 fa

8cbaeed.. 가 나와서 작업 증명에 실패 했다 다시 nonce 가 1 일 때의 해쉬를
구해보니 932d16e2e.. 가 나와서 또 실패. nonce 가 2 일 때의 해쉬, 3 일
때의 해쉬. 를 계속 반복해서 구하고 실패하다가, nonce 가 82,764,351 일 때

의 해쉬를 구해보니 드디어 000000a84.. 보다 작은 000000a83.. 이 나와서
작업 증명에 성공했다 그렇다면 작업 증명 성공 여부의 기준이 되는 000000a84.. 라는
값은 어떻게 정해지나? 바로 작업 난이도에 의해 정해진다(앞의 그림에서는 내용을 돕기 위해

작업 난이도 보다는 더 상세한 채굴 난이도 로 표시했으나, 이제 그 작업이 무엇인지 알았
으니 앞으로는 작업 난이도 라고 한다.) 작업 난이도 블록 해쉬가 특정 숫자보다 낮게 나올
때의 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 값을 계산하는데 기준이 되는 특정 숫자를 나타내며, 블록체인

전체에 걸쳐 일률적으로 적용되는 숫자다 보상 보상은 새로 발행되는 비트코인과 해당 블록에 포
함되는 거래의 거래 수수료의 합이다 비트코인의 처음보는 발행은, 채굴자가 블록을 처음 구성할
때 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래(generati

on transaction)로 추가하는 방식으로 이루어진다 새로 발행되는 비트코인은 최초에
50BTC에서 시작해서 블록 체인에 21만개의 블록이 추가될 때마다 절반으로 줄어든다 거래
수수료는 각 거래 당사자끼리 자율적으로 정할 수 있고, 거래가 블록에 추가되는 우선 순위를

결정하는데 거래 수수료가 입력값으로 사용되기도 한다 보상은 nonce 값을 찾아내고, 그 결
과 혁신 블록을 블록 체인에 추가해서, 해당 블록에 포함된 모든 거래를 유효한 거래로 확정
시켜준 대가라고 할 수 있다 채굴 보상이 줄어든다면 채굴에 의해 유지되는 블록체인이 지속될

수 있나? 비트코인의 총 발행량은 2,100만BTC로 정해져 있다 결국 채굴하더라도 언젠가는
비트코인은 더 이상 발행되지 않으므로, 거래 수수료만이 유일한 보상으로 남게 된다 어떤 상
황에서든 채굴이 의미가 있으려면, 채굴에 소요되는 비용보다 수익이 더 커야하며, 이는 비트코

인의 신규 발행이 없는 상황에서도 마찬가지다 이 조건을 만족시켜야 채굴이 계속되고 블록체인이

지속될 수 있다 비트코인 신규 발행이 없는 상황에서 이 조건이 만족되려면 다음과 같은 시
나리오가 충족되어야 한다 채굴 비용의 감소 채굴 비용의 감소는 결국 작업 증명 해답을 찾는
데 얼마의 시간이 소요되느냐에 달려있다 이는 작업의 난이도에 달려 있으므로, 거래 수수료만

이 유일한 보상인 상황에서 블록체인이 유지되려면 작업의 난이도가 현재보다 더 낮아져야 한다
거래 수수료의 증가 거래 수수료의 증가는 결국 거래 수수료율의 증가를 의미하는데, 거래의
성격과 다른 화폐와의 경쟁 등 시장 상황에 따라 정해지겠으나 대폭 높아지기는 어려울 것이

다 신규 발행이 사라지는 2140년 경 이후에는 결국은 채굴 난이도가 낮아지는 방식으로 블
록체인이 유지될 것이다 정리 블록체인은 모든 거래 정보를 포함하는 거대한 장부로서, 여러
채굴자의 컴퓨터에 복제되어 관리되는 분산 장부다 블록은 다수의 거래 정보의 묶음이며, 이런

블록이 체인처럼 연결되어 전체 블록체인을 형성한다 채굴은 블록에 담긴 거래 정보를 유효한
것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Proof of Work)과 그
에 따른 보상을 합친 개념이다.

이 글을 연제 하면서 채굴 에 대해 특징적인 내용을 알게 되었다.

채굴 블록의식별자역할을하는해쉬6가지헤더정보를입력값

핵심단어 채굴 에 대해 연재 한 글 이다. 함축된 정보는 아래와 같다.

그리고 블록 해쉬는 작업 증명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래
정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다 채굴은 블록에
담긴 거래 정보를 유효한 것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Pro

of of Work)과 그에 따른 보상을 합친 개념이다. 블록 해쉬가 특정 숫자보다 낮게
나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다 작업 난이도는 블록 헤더 정
보에서 bits 라는 값으로 조절된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce

채굴 BlockChain 기초 개념
채굴 상당히 피상적으로만 알고 있던, 그래서 얘기하다가 서로 질문을 던져보면 너도 모르고 나도 모
르는. 블록이 정확히 뭘 말하는 거냐

..
그래서 채굴이 정확히 뭐라는 거냐
..

어려운 문제를 푼다는데 그게 대체 무슨 문제라는 거냐
..
분산된 어쩌구라는데 뭐가 어떻게 분산되어 있다는 거냐

..
사실 국내에서 찾을 수 있는 이런 저런 자료를 봐도 우연의 일치일까, 딱 어떤 정해진 선까지
만 다루고 더 깊은 얘기가 없다 그래서 그 수준까지의 내용을 보고 떠오르는 질문에 대한 답을

조금더 자세히 알아 보자면

찾기는 쉽지 않았는데, 이 책에 바로 그 수준 너머에 있는 내용이 담겨 있다 블록체인에 칭
칭 감길 수 있게 해주는 길잡이로서 많이 좋은 책이다 하지만 원문이 원래 그런건지 아니면 번
역이 좀 그런건지, 여튼 번역 결과는 그리 높은 점수를 줄 수는 없을 듯. 시작하기 전에 블

록체인과 비트코인의 구분 정도는 해보자 블록체인은 비트코인의 운영 바탕이 되는 체계이고, 비
트코인은 블록체인을 화폐 발행과 운영에 응용한 것이다 고로 핵심이 되는 시스템 기술 체계는 블
록체인이고, 비트코인은 블록체인을 바탕으로 만들어낸 서비스의 하나이다 그럼 블록체인이 어떻게

작동하는지 기초부터 한 번 들여다보자 BlockChain
블록체인은 최초의 블록(Genesis Block)부터 시작해서 바로 앞의 블록에 대한 링크를
갖고 있는 링크드 리스트다 블록체인은 여러 노드에 걸쳐 분산되어 저장 및 관리되며, 블록

에는 거래 정보가 포함되어 있으므로, 블록의 집합체인 블록체인은 모든 거래 정보를 포함하는
거대한 분산 장부라고 할 수 있다 Block 블록은 블록체인의 원소로서 개념적으로는 다수의
거래 정보의 묶음을 의미한다 블록은 블록 헤더와 거래 정보, 기타 정보로 구성된다

블록 헤더는 version , previousblockhash , merklehash , t
ime , bits , nonce 이렇게 6개의 정보로 구성된다 , , , , , 이렇게 6
개의 정보로 구성된다 거래 정보는 입출금과 관련한 여러가지 정보를 보유하고 있다

기타 정보는 블록 내에 있는 정보 중에서 블록 헤더와 거래 정보에 해당하지 않는 정보를 말하
며, 블록 해쉬 계산에 사용되지 않는다 Block Header
블록 헤더는 다음의 6가지 정보로 구성

version : 소프트웨어/프로토콜 버전 previousblockhash : 블록 체인에서
바로 앞에 위치하는 블록의 블록 해쉬 merklehash : 개별 거래 정보의 거래 해쉬를
2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값 time : 블록이 만들어진 시간

bits : 난이도 조절용 수치 nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값
을 찾아낼때까지의 1씩 증가하는 계산 회수 Block Hash 블록의 식별자 수행을 하는 블
록 해쉬는 6가지의 블록 헤더 정보를 입력값으로 하고, 여기에 SHA256 해쉬 함수를 2회

적용해서 계산되는 값으로, 32바이트의 숫자값이다 이름은 블록 해쉬이지만 그 값은 블록 전
체를 해쉬한 값이 아니라, 블록 헤더를 해쉬한 값이다 지금까지의 내용을 바탕으로 블록 해쉬를
구하는 과정을 그림으로 나타내면 다음과 같다 이제 이 그림을 중심으로 얘기를 풀어가보자 완

료된 거래 정보의 변경이 사실상 불가능한 이유 거래 정보의 해쉬값은 해당 거래가 포함된 블록
의 merklehash 계산에 입력값으로 사용되고, merklehash 는 블록 해쉬의 계산
에 입력값으로 사용된다 블록 해쉬는 다음 블록(A라 하면)의 previousblockhash

값으로 저장되며, previousblockhash 은 A 블록의 블록 헤더 정보로서, A
블록의 블록 해쉬를 계산하는데 입력값으로 사용된다 따라서, 거래 정보가 변경되면 merkle
hash 가 변경되고, merklehash 가 변경되면 블록 해쉬가 변경되고, 블록 해쉬의

변경은 다음 블록의 블록 해쉬 변경으로 연쇄적으로 이어지게 된다 그리고 블록 해쉬는 작업 증
명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 한다 블록 하나 채굴하는데 평균 10분이 소요되고

, http://bitcoincharts.com/bitcoin/ 에서 확인한 2016-01-
23 오늘날 총 블록 수가 약 40만 블록이므로, 최초의 원조 블록인 Genesis 블록에 포
함된 거래를 변경하면 약 400만 분, 약 7.6년의 시간이 소요된다 그 7.6년의 시간 동

안에도 혁신 블록들도 평균 10분 마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사
실 상 불가능하다 완료된 거래 정보를 변경하려면, 변경하려는 거래 정보가 포함된 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 하는데, 이는 많은 시간이 소요되고, 그 동안

다른 노드들에 의해 블록이 계속 추가되므로, 완료된 거래 정보의 변경은 현실적으로 사실상 불
가능하다 채굴 채굴은 일반인들이 비트코인을 쉽게 이해할 수 있도록 만든 용어로서, 작업 증명
(Proof of Work)과 보상을 합친 개념이라고 생각하면 된다 Proof of Work

(작업 증명) 작업 증명은 처음보는 블록을 블록체인에 추가하는 작업을 완료했음을 증명하
는 것이라고 이해하면 된다 혁신 블록을 블록체인에 추가하려면, 그 처음보는 블록의 블록 해쉬
를 계산해내야하고, 그 블록 해쉬를 계산해내려면 그 블록의 블록 헤더 정보 중의 하나인 no

nce 값을 계산을 통해 구해야 한다 결론적으로 이 nonce 값을 구하는 것이 바로 작업
증명이다 nonce 값의 계산 결과부터 말하면 nonce 값은, 이 nonce 값을 입력값
중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다 그리고 해

쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에
서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바
꿔가면서 찾아낼 수 밖에 없다 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce 다

다시 말해, 아래 그림의 블록 헤더란에 포함된 6가지 정보 중에서 확정되지 않아서 값을
바꿀 수 있는 유일한 항목이 nonce 다 이 nonce 값을 1씩 증가시키면서 반복적으로
계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블

록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 처음보는
블록으로서 블록 체인에 추가되며 작업이 완료 된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의
nonce 값이 바로 작업 증명을 나타내는 nonce 값이다 이 과정을 그림으로 살펴보면

아래와 같다 아래의 그림은 블록 해쉬가 000000a84.. 보다 작게 나오는 nonce 값
을 구하는 과정을 나타내고 있다 앞에서 설명한 대로 nonce 외의 모든 항목의 값은 이미
정해져 있다 nonce 값이 0 일 때의 해쉬를 구해보니 000000a84.. 보다 큰 fa

8cbaeed.. 가 나와서 작업 증명에 실패 했다 다시 nonce 가 1 일 때의 해쉬를
구해보니 932d16e2e.. 가 나와서 또 실패. nonce 가 2 일 때의 해쉬, 3 일
때의 해쉬. 를 계속 반복해서 구하고 실패하다가, nonce 가 82,764,351 일 때

의 해쉬를 구해보니 드디어 000000a84.. 보다 작은 000000a83.. 이 나와서
작업 증명에 성공했다 그렇다면 작업 증명 성공 여부의 기준이 되는 000000a84.. 라는
값은 어떻게 정해지나? 바로 작업 난이도에 의해 정해진다(앞의 그림에서는 내용을 돕기 위해

작업 난이도 보다는 더 상세한 채굴 난이도 로 표시했으나, 이제 그 작업이 무엇인지 알았
으니 앞으로는 작업 난이도 라고 한다.) 작업 난이도 블록 해쉬가 특정 숫자보다 낮게 나올
때의 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 값을 계산하는데 기준이 되는 특정 숫자를 나타내며, 블록체인

전체에 걸쳐 일률적으로 적용되는 숫자다 보상 보상은 새로 발행되는 비트코인과 해당 블록에 포
함되는 거래의 거래 수수료의 합이다 비트코인의 처음보는 발행은, 채굴자가 블록을 처음 구성할
때 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래(generati

on transaction)로 추가하는 방식으로 이루어진다 새로 발행되는 비트코인은 최초에
50BTC에서 시작해서 블록 체인에 21만개의 블록이 추가될 때마다 절반으로 줄어든다 거래
수수료는 각 거래 당사자끼리 자율적으로 정할 수 있고, 거래가 블록에 추가되는 우선 순위를

결정하는데 거래 수수료가 입력값으로 사용되기도 한다 보상은 nonce 값을 찾아내고, 그 결
과 처음보는 블록을 블록 체인에 추가해서, 해당 블록에 포함된 모든 거래를 유효한 거래로 확정
시켜준 대가라고 할 수 있다 채굴 보상이 줄어든다면 채굴에 의해 유지되는 블록체인이 지속될

수 있나? 비트코인의 총 발행량은 2,100만BTC로 정해져 있다 결국 채굴하더라도 언젠가는
비트코인은 더 이상 발행되지 않으므로, 거래 수수료만이 유일한 보상으로 남게 된다 어떤 상
황에서든 채굴이 의미가 있으려면, 채굴에 소요되는 비용보다 수익이 더 커야하며, 이는 비트코

인의 신규 발행이 없는 상황에서도 마찬가지다 이 조건을 만족시켜야 채굴이 계속되고 블록체인이

지속될 수 있다 비트코인 신규 발행이 없는 상황에서 이 조건이 만족되려면 다음과 같은 시
나리오가 충족되어야 한다 채굴 비용의 감소 채굴 비용의 감소는 결국 작업 증명 해답을 찾는
데 얼마의 시간이 소요되느냐에 달려있다 이는 작업의 난이도에 달려 있으므로, 거래 수수료만

이 유일한 보상인 상황에서 블록체인이 유지되려면 작업의 난이도가 현재보다 더 낮아져야 한다
거래 수수료의 증가 거래 수수료의 증가는 결국 거래 수수료율의 증가를 의미하는데, 거래의
성격과 다른 화폐와의 경쟁 등 시장 상황에 따라 정해지겠으나 대폭 높아지기는 어려울 것이

다 신규 발행이 사라지는 2140년 경 이후에는 결국은 채굴 난이도가 낮아지는 방식으로 블
록체인이 유지될 것이다 정리 블록체인은 모든 거래 정보를 포함하는 거대한 장부로서, 여러
채굴자의 컴퓨터에 복제되어 관리되는 분산 장부다 블록은 다수의 거래 정보의 묶음이며, 이런

블록이 체인처럼 연결되어 전체 블록체인을 형성한다 채굴은 블록에 담긴 거래 정보를 유효한
것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Proof of Work)과 그
에 따른 보상을 합친 개념이다.

이 글을 연제 하면서 채굴 에 대해 알게 되어서 개인적으로 많은 도움이 되었다.

코인에어드랍 Revlation(EV)50만개

키워드 코인에어드랍 에 대해 쓴 글이며 요약된 정보는 아래와 같다.

Thar코인 (THAR) 10개 에어드랍
신규가입시 OSN 코인 1,000개 에어드랍 받습니다
Revelation (REV) 코인 50만개 에어드랍

아비(Arbi)코인 에어드랍 이벤트 ( 최대 12000개 Arbi)
아이오니아 거래소 사전가입 에어드랍 이벤트 ( 니아(NIA 코인) 100개 에어드랍 )
Ninja 닌자 코인 50000개 에어드랍

코인에어드랍 거래소 36곳 사전예약하고 무료 코인 에어드랍 받아가세요.(수정)
코인에어드랍 공짜로 받은 코인으로 상장 or 거래소 오픈날 팔고 현금화 하면 최소 몇천원 ~ 대박나면 수
십만원까지 받을 수 있습니다 투자 후 거래 하는 것이 아니라 무료로 받은 코인을 팔고 현금화

하는 것이기 때문에 리스크 0%입니다 얼마 전 뽐뿌에서 핫했던 비트소닉 거래소는 사전예약시
코인을 60개 주었고, 오픈날 개당 시세는 700원으로 사전예약 했던 대부분의 회원들이 현
금 4만원 넘게 버셨어요 비트소닉 다음으로 신규 에어드랍 코인 및 거래소 엄선하여 소개합니다

* 더 많고 자세한 에어드랍 정보를 원하신다면 제 블로그 https://blog.naver.
com/liuyifei42/ 방문 부탁드립니다 1
KBcoin거래소(에어드랍 250) 곧 마감 예정입니다

https://kbcoin.com?recommand_user_id=YWFhaWlpeXl5QG
5hdmVyLmNvbQ== 상장가 100원 얘기가 있는데 그러면 가입만해도 25000원 입니
다 밑져야 본전이니 신청해봅시다

조금더 자세히 알아 보자면

2
뮤지카 후오비코리아 상장기념 에어드랍 이벤트 ( 50 MZK ) 11월 19일 월요일 오후
6시에 마감 ㅠ 11월 19일 월요일 오후 6시부터 후오비코리아에서 뮤지카 거래 시작합니다!

받는방법
뮤지카 카카오 플러그 친구추가 http://pf.kakao.com/_qbtbj
기간: ~ 11월 19일 월요일 오후 6시까지 (단, 준비된 MZK 소진시 조기 종료)

플러스친구 추가 후
후오비코리아 UID 입력 25 MZK 지급
추천인 아이디 입력시 25MZK 추가 지급

추천인 아이디는 후오비 작성해주시면 감사합니다^^
3
붐비트(boombit) 코인60개 + 무제한 4000원 에어드랍

링크따라가면 거래시 코인 40개(bm) 획득 + 링크로 지인 불러오면 원화 4000원 에어드
랍 + 인증단계 다 받으면 코인 총 60개(bm) 획득 진짜배기는 레퍼럴입니다
보통 추천인 1명당 코인 몇개 주는 구조인데 여긴 현금으로 뿌립니다

게다가 내가 모집한 사람이 사람을 모으면 그 레퍼럴을 또 받을 수 있네요
https://www.boombit.co.kr/bm/register?invite=1OSj4q
vrtGW 4

빗키니거래소 오픈 기념 신규가입시 15000원 현금 지급
회원가입시 10000원 + 추천인 입력시 5000원해서 총 15000원 현금으로 받습니다
가입을 해보니 회원가입시 10000원은 즉시 들어오고

5000원은 12월 19일 수요일 14:00에 들어온다고 합니다
https://www.bitkiny.com/
가입시 추천인 aaaiiiyyy@naver.com 입력해 주시면

서로서로 5천원씩 더 받습니다
감사합니다
5

쎈비트 국내거래소 사전예약 에어드랍 ( 1000 SSEN 코인 )
[참 여 방 법]
① https://shrl.tk/Mazx7 접속

가입시 300 SSEN, 핸드폰 인증시 400 SSEN, 추천인 입력시 300 SSEN
휴대폰으로 가입시 폰인증이 안되시면
컴퓨터로 진행하시면 됩니다

추천인 : 9F614B00F1B5 감사합니다
총 1000 SSEN코인
② https://t.me/ssenbit3 텔레그램 입장 후 에어드랍 종료시 까지 유지 하셔

야 에어드랍 지급 받습니다 6
엔젤리스 신규거래소 (END 500 개 에어드랍)
END 거래소토큰 지급(총 발행량 20억개)

사전가입 500END 지급 (5만원 예상)
수수료의 80프로를 END토큰 소유자에게 분산지급
12월 15일 거래소 오픈

http://endless.pe.kr/sub01/register.html?referal=IN
C8419 7
메가비트(MEGA) 거래소 사전예약(1000 MEGA 에어드랍 )

기간이 짧고 간단한 에어드랍입니다
기간 : 11월 13일 ~ 11월 25일
매우 간단해요

인증도 없구요
https://bit.ly/2DBYcJF
8

비트젯(BitZet)거래소 신규 에어드랍
신규가입시 OSN 코인 1,000개 에어드랍 받습니다
(지급 일정은 11월 28일)

① https://www.bitzet.co.kr/member/join.html 접속
② 휴대폰 인증 & 양식 작성해주시고 추천인 aaaiiiyyy@naver.com 해주시면 정
말 감사합니다^^ 각각 1,000 OSN씩 받습니다 ③ ARS 인증은 본인폰 기종 선택하세요

인증전화 받고 안내 멘트가 나올 때 1번(승인) 누른 후 전화가 끊어지면 인증 전화번호의 마
지막 숫자 4자리 입력하시면 됩니다 9
아이오니아 거래소 사전가입 에어드랍 이벤트 ( 니아(NIA 코인) 100개 에어드랍 )

https://play.google.com/store/apps/details?id=tech.
ionia.app (안드로이드) https://itunes.apple.com/kr/app/i
onia/id1436937580 (IOS) 휴대폰 기종에 맞게 아이오니아 어플(월렛) 다운받

고 설치하세요 어플(월렛) 실행 후 회원가입 하시면 50니아(NIA) 지급하고 가입시 초대코
드 입력하시면 50니아(NIA) 추가지급합니다 *초대코드 : E25LOU 감사합니다
(회원가입은 어플(월렛)에서만가능)

10
코인닥 신규거래소 가입 이벤트
https://shrl.tk/RwLLX

DAC 코인
-기본 2000 DAC 획득
-추가 500 DAC

(₩8,000 사전판매 기준)
11
KSC 코인 300개 에어드랍 ( 마인빗 상장 예정 )

① Kstarcoin 오픈채팅방 주소
https://open.kakao.com/o/gAINrn2
② 구글폼 작성하기

https://docs.google.com/forms/d/1hZ3YSN_BgB5mOhz-UJ
D11Fzy4P73sEI2HDyWm8PURt8/viewform?edit_requested=t
rue (추천인 카카오톡 닉네임 : MJ 항상 감사드립니다.^^ ) 12

마인비트
https://minebit.com/Login/register.html?code=FRLZWD
먼저 마인비트 웹 가입을 하면 10MBT, KYC 절차를 하면 20MBT를 받습니다

(최대 100MBT까지)
해당 MBT로 이더리움이나 비트코인까지 에어드랍 받을 수 있습니다
12-2

마인월드 (어플)
https://mwapi.minebit.com/public/loginSingnIn.html?
lang=ko_kr&ya=FfJ177&skip=down 추천인 FfJ177 입력시 30헤시

지급됩니다 마인비트 어플인 마인월드입니다
하루에 1~2번 어플에 접속하여 MBT를 채굴하시면 됩니다
그냥 휴대폰으로 간단히 몇번 터치하는거라 CPU나 전력소모 전혀 없습니다

1분도 안걸립니다
출석체크 개념으로 매일 매일 계속계속 MBT 모으시고 배당금 노리시면 됩니다!
13

bluebelt 거래소 – 사전예약 상품 이벤트 (★추천코드: 19990)
https://event-kr.bluebelt.asia/
14

에어드랍라이브 퀴즈쇼 에어드랍!
http://www.airdroplive.co.kr/?code=hpqeg1
15

Coinchase (CCH) 코인 에어드랍 이벤트 (0.101 ETH ($20) + 50 C
CH 보상 (이더는 바로지급 CCH코인은 이벤끝나고 일괄지급) ) https://coinch
ase.com/c/dERqt9CK 위 접속주소로 들어가셔서 [가입하기] 클릭 후 회원가입 진

행 국가 South Korea 선택하고, 폰번호 입력 (핸드폰 맨 앞자리 0은 빼고 입력 e
x 1012345678), 이메일 인증 -> 0.101 ETH 즉시 보상 카톡방 입장 유지
후 https://bounty-cch.coinchase.com/ 접속하여 폰번호와 카카오톡I

D 입력 -> 이벤트 종료 후 CCH 50코인 보상 16 비트코인빙 홈페이지 회원가입시 에어
드랍 지급 (빙코인 30개) 12월 오픈 예정인 거래소 코인이며,
해외에서 매우 인기있는 에어드랍입니다

지금 ICO 80% 완료되었고 ICO 끝나면 에어드랍 진행된다고 합니다
받는방법 (홈페이지 회원가입)
https://www.bitcoinbing.io/register.php?code=771RZ

홈페이지 회원가입 진행
17
코인업마켓 ( 추천인x 신규가입시 코인 구입가능한 1만 캐쉬 즉시 지급 )

회원가입만 하면 즉시 1만 캐쉬 지급!
http://coinupico.com/
18

지닥 거래소 ( 추천인x 신규가입시 GT 5000개 지급 )
https://www.gdac.co.kr/
회원가입 이벤트 5000 GT (10월 4일 오전 10:00 ~ 종료 공지시까지)

19
프로비트 거래소
https://www.probit.com/referral/27964906

가입하시면 $4 USDT의 보너스와 100이오스 일일추첨권 10장과 주당 갤럭시s9 추첨해서
준다고 합니다 회원가입하시고 11월5일부터 진행되는 추첨기다리시면 됩니다
20

KRPEX 거래소
http://www.krpex.com/join/
추천ID: aaaiiiyyy@naver.com

공유하고 URL 남기면 대박 경품 혜택 (추첨인원많음) + EB코인 수수료 환급 + 에어드랍
등 21
마이닉스 거래소 ( 마이닉스 토큰(MNX) 11개 + 경품 이벤트 )

http://www.mineex.co.kr?recommend_code=SCtrWlNKYlVL
YUN0OTJKM1V0QjBOZz09 마이닉스 토큰 11개 + 위 링크로 가입시 서로에게 1
0프로 추가 + 그외 경품 이벤트 22

비트소닉
10월 15일(월) 오후 9시부터 선착순 10만명 – 총 30 BSC
① 회원가입시: 5 BSC

② 가입시 추천인 입력: 10 BSC
③ 실명인증: 5 BSC
④ OTP등록: 5 BSC

⑤ 입출금계좌등록: 5 BSC
https://bitsonic.co.kr/invite?rcode=5XTKHQ
23

Radiance(RNR) 2차 에어드랍 이벤트입니다(1만명 제한) 보상 RNR 50000코인
작성 하는곳: https://shrl.tk/vb6zs
텔레그램 2개 가입, 페이스북, 트위터 좋아요 공유 팔로우, 미디엄(이건 선택사항) 등의 미

션을 완수해야 합니다 24
HetaChain(HETA) 에어드랍 ( 1200HETA (19$) )
텔레그램과 트위터만 있으면 매우 간단하게 하실 수 있어서 추천드립니다

https://t.me/Heta_Airdrop_Bot?start=NzA1ODQwMzkx
25
WE SHOW (위쇼토큰) 에어드랍 (20WET)

https://act.we.show/i/3BT
신규 회원가입만 해도 20WET증정, 신규회원 가입후 WeShow 커뮤니티(텔레그램 or 카
카오톡)에 “We Show Fighting” 을 외치면 WeShow Token추가로 증정

26
Mobile Token Bank 코인 에어드랍 (무조건 100,000 MTB + @ 획득)
https://docs.google.com/forms/d/e/1FAIpQLScqR1Cz7PJ

8PFOoXVDPlEgtMLVhXCx5S3AqurlKEQme7nurOA/alreadyresp
onded 양식 작성을 위해서는 ① 텔레그램방 가입하기
② 트위터 팔로우 누르기

③ ERC20 개인지갑 주소 입력하기
④ 추천인: @basetoto 입력해주시면 + 10000MTB 더 받습니다
27

아비(Arbi)코인 에어드랍 이벤트 ( 최대 12000개 Arbi)
이벤트 참여방법
① 접속주소로 회원가입 10만명 한정 (3,000 arbi 토큰지급) 링크 : https:/

/arbi-coin.com/main/referral?recode=856555 (구글 크롬에서
하셔야 합니다) ② 아비봇 공식 페이스북 좋아요 미션 (2,000 arbi 토큰지급) 링크
: https://www.facebook.com/arbibot2018 ③ 개인 SNS계정에

이벤트 게시물 공유 ( 사이트 참고 ) ④ 미션3까지 완수 후 카카오톡 플러스 친구에게 회
원 ID 및 미션 수행 URL, 이미지 캡쳐 첨부하기 공식채팅방 : https://open.
kakao.com/o/g7IL0rW 28

Revelation (REV) 코인 50만개 에어드랍
https://shrl.tk/hsWyz 접속하셔서 텔레그램방 입장 후 유지, 트위터 팔로우,
지갑주소 입력 하시면 됩니다 29

Ninja 닌자 코인 50000개 에어드랍
11월 29일 Coinexchange 거래소 상장 예정
복잡합니다

시간적 여유가 있으신 분들만 하시기 바랍니다
https://shrl.tk/QclBq
① 구글폼 접속 https://shrl.tk/QclBq

② 트위터 팔로우 https://twitter.com/NNAToken
③ 트위터 좋아요 및 리트윗, 친구 5명 태그 ( 친구 태그는 @누르시고 아무 글자or숫자
쓰신 후 뜨는 사람들 넣으면 됩니다) https://twitter.com/NNAToken/s

tatus/1059451583111417857 ④ 디스코드 조인하여 닉네임 설정하고 이메일
입력 후 가입 https://discord.gg/Q69X8c8 ⑤ 텔레그램 조인 https:
//t.me/Ninjaeconomicproject ⑥ 구글폼 작성

1) 트위터 유저네임 (ex: @abcd)
2) 리트윗 링크
3) 디스코드 계정 (ex: abcd#1111)

4) 텔레그램 유저네임 (ex: @abcd)
5) 추천자(자동) : @basetoto
6) 이더계열 개인지갑 주소 입력

⑦ 50,000 NNA 에어드랍 !
30
Thar코인 (THAR) 10개 에어드랍

① https://shrl.tk/ksdi8 접속
② 트위터 팔로우, 고정 게시글 리트윗
③ 텔레그램방 3개 입장(에어드랍 받을 때까지 유지!!!)

31
CRS 코인 에어드랍 ( 미션에 따라 차등 )
받는방법

https://wn.nr/29LCth
이름, 이메일, 이더지갑주소 입력 후 제출하기
그 이후에 미션을 하시면 됩니다

미션은 많이 간단한 미션들입니다
예를들어, 텔레그램 접속, 텔레그램에서 대화하기, 인스타그램, 트위터 팔로우, 유투브 구독,
댓글달기, 뉴스레터 구독 등 매우 간단한 미션들입니다

모든 미션 다 참여시 88개의 CRS를 얻을 수 있으며, 1 CRS = 0.001 ETH 의
가치가 있다고 합니다 즉 88 CRS = 0.088 ETH = KRW 20,579원
또한 텔레그램 대화 미션은 15~20시간 마다 1번씩 할 수 있고 보상은 대략 15 CRS

코인입니다 <--- 이게 좋아요!!
32
코인데일리 신규 이벤트 추가 에어드랍

텔레그램 어플이든 PC버젼이든 설치되어 있어야 합니다.!
참여링크 (Link)-> https://t.me/coinDaily_kor_bot?start=
rydfKgJTQ ㄴ기본참여 : 2000 DAILY

ㄴ친구초대 : 1000 DAILY
ㄴ리뷰이벤트 : 3000개 ~ 최대 30만개
ㄴsns공유이벤트 : 500개 ~ 최대5000개

33
DACC 4차 에어드랍 + 추수감사절 이벤트 총 2100개 지급
IDEX, Kucoin, CoinEx, HIBTC 등 여러 거래소에 상장되어있고 코인마켓캡에

도 등재 되어있습니다 ① 3차 에어드랍 마감하자마자 4차 시작하네요
2018년 11월 13일부터 6일간 진행한다고 합니다
아무나 DACC 공식 카카오톡 방(카톡방 유지!!)에 들어가면 1000DACC 를 받을 수

있습니다 상세주소: https://bounty-ko.coinchase.com?code=f6c
v1d ② 추수감사절 이벤트 (1100 DACC 획득)
https://dacc-ko.coinchase.com?code=l1RG0W

34
맘스블록 (MOM) 사전예약 에어드랍
사전등록자 1만명 도달시 700MOM 지급

12월 오픈예정인 MOMS BLOCK은 블록체인기반 맘커뮤니티입니다
http://momsblock.co.kr/event.php?sponsor=aaaiiiyyy
접속하여 사전예약하기 35

루익 Looix 코인 1000개 에어드랍 (간단, 20달러에 해당)
텔레그램이 설치되어 있어야 합니다
http://t.me/looixAirDropBot?start=705840391

미션은 텔레그램 그룹방 2개 참여, 트위터 팔로우로 간단합니다
36
Condeal(콘딜) 코인 에어드랍

http://telegram.me/Condeal_AirdropBot/?start=baseto
to 텔레그램 봇 입장 텔레그램 채팅방 입장, 미디움 팔로우, 트위터 팔로우, 페이스북 좋아

요의 미션을 하셔야 에어드랍을 받습니다.

코인에어드랍 글을 쓰게 되면서 대해 코어 적인 내용을 알게 되었다.

해시함수 쉬테이블에서는key값달라도의결과가같을있기때문

핵심단어 해시함수 에 대해 쓴 글이며 밑에 글에는 요약된 정보이다

h(45) = 1인데, 이미 1의 위치에는 h(89)=1이 저장되어 있어 충돌한다
만약 0에서도 충돌이 일어났다면 h(48,2) = (48+2^2) mod 7로 3의 위치에
저장되었을 것이다 하지만 해쉬 함수를 짜더라도 충돌을 새로히 방지한다는 것을 보장하기

는 힘드므로, 충돌을 방지하기 위한 방법으로 충돌이란, 다른 k값이 동일한 h(k)값을 가
져 동일한 slot에 저장되는 경우를 말한다 충돌을 최소화 하는 방법 중에 충돌이 적은 좋
은 해쉬 함수를 만드는 방법도 있다 이 경우 k값이 h(k)로 해쉬되었다고 하며, h(k)

해시함수 해쉬란?
해시함수 해쉬는 임의의 크기를 가진 데이터를 고정된 데이터의 크기로 변환시키는 것을 말한다
즉 해쉬 알고리즘은 해쉬를 하는 방법에 대해 절차적으로 명세한다

이를 이용해 특정한 배열의 인덱스나 위치나 위치를 입력하고자 하는 데이터의 값을 이용해 저장
하거나 찾을 수 있다 기존에 사용했던 자료 구조들은 탐색이나 삽입에 선형시간이 걸리기도 했던
것에 비해, 해쉬를 이용하면 즉시 저장하거나 찾고자 하는 위치를 참조할 수 있으므로 더욱 빠

른 속도로 처리할 수 있다 1
Direct Addressing Table
Direct Addressing Table은 key-value쌍의 데이터를 배열에 저장할 ,

key값을 직접적으로 배열의 인덱스로 사용하는 방법이다 예를 들면 키 값이 400인 자료
가 있다면, 이는 배열의 인덱스가 400인 위치에 키 값을 저장하고 포인터로 데이터를 연결한
다 똑같은 키 값이 존재하지 않는다고 가정하면, 삽입 시에는, 각 키마다 자신의 공간이 존재

조금더 자세히 알아 보자면

하므로 그 위치에다 저장을 하면 되고, 삭제 시에는 해당 키의 위치에 NULL값을 넣어주면
된다.탐 색 시에는 해당 키의 위치를 그냥 찾아가서 참조하면 된다 찾고자 하는 데이터의 ke
y만 알고있으면 즉시 위치를 찾는 것이 가능하므로 탐색,저장,삭제,갱신은 모두 선형시간인 O

(1)로 매우 빠른 속도로 처리가 가능하다 그러나 key값의 최대 크기만큼 배열이 할당 되기
때문에, 크기는 매우 큰데, 저장하고자 하는 정보가 적다면 공간을 정말많이 낭비할 수 있다는
단점이 있다 2 Hash Table Hash Table은 key-value 쌍에서 key값을

테이블에 저장할 때, Direct Addressing Table 달리 key값을 함수를 이
용해 계산을 수행 한 후, 그 결과값을 배열의 인덱스로 사용하여 저장하는 방식이다 여기서 k
ey값을 계산 하는 함수는 해쉬 함수(Hash Function)이라고 부르며, 해쉬 함수는

입력으로 key를 받아, 0부터 배열의크기-1 사이의 값을 출력한다 해쉬에 대한 첫 정의대로
임의의 숫자를 배열의 크기 만큼으로 변환 시킨 것이다 이 경우 k값이 h(k)로 해쉬되었다
고 하며, h(k)는 k의 해쉬값이라고 한다 위 그림을 참조하면 각 k값들의 해쉬값인 h(k

)값들이 배열의 인덱스로 사용됨을 확인 할 수 있다 해쉬 테이블은 Direct Address
ing Table에 비해 공간 낭비가 매우 적은데 이는 key값의 크기에 테이블의 크기가 좌
우되는 것이 아니고, h(k)만큼의 공간에 저장되기 때문이다 2.1 충돌(Collusion)

하지만 해쉬 테이블은 충돌이 일어 날 수 있다는 큰 문제점이 있다
충돌이란, 다른 k값이 동일한 h(k)값을 가져 동일한 slot에 저장되는 경우를 말한다
예를 들자면 k1과 k12을 해쉬하였더니 h(k1) = h(k12)인 경우를 들 수 있다

Direct Addressing Table에서는 이를 방어 하기 위해 모든 key값이 다르다
고 전제하였지만 해쉬 테이블에서는 key값이 달라도 해쉬의 결과가 같을 수 있기 때문에 이를
방지하기 위한 방법이 필요하다 하지만 해쉬 함수를 짜더라도 충돌을 새로히 방지한다는 것

을 보장하기는 힘드므로, 충돌을 방지하기 위한 방법으로 충돌을 어느정도 허용하되 이를 최소화
하는 방법도 사용하기도 한다. 2.1.1 Chaining 방법 – 충돌을 허용하되 최소화
하는 방법 충돌을 허용하지만 이를 최소화 하기 위한 방법중 하나인 체이닝 방식이다

체이닝이란 이름 그대로 데이터들을 포인터를 이용해 서로 체인 형태로 엮어 나가는 것을 뜻하며
, 해쉬 테이블에선 동일한 해쉬값이 출력되 충돌이 일어나면, 그 위치에 있던 데이터에 key
값을 포인터로 뒤이어 연결한다 따라서 처음으로 h(k)위치에 저장된 데이터를 시작으로 그 이후

의 h(k)값이 출력되는 데이터는 모두 연결 리스트의 형태를 취한다 그렇기 때문에 최초의 위
치를 탐색하는 해쉬 과정을 제외하고, 모든 탐색, 삽입, 삭제 과정은 연결리스트와 유사한 방
식으로 진행한다 Chaing 방법에서의 수행시간은 삽입 시에는 해쉬값을 이용해 바로 slot

에 저장하면 되므로 상수시간에 일어나고, 삭제는 연결리스트의 삭제와 동일하게 상수시간에, 탐
색 시에는 연결리스트를 따라 가기 때문에 리스트의 길이 만큼 발생하지만, 최악의 경우, 즉
모든 데이터의 해쉬값이 일치하여 한 인덱스에 저장됬을 경우엔 연결리스트의 탐색 시간과 동일한

선형시간을 가지게 된다 2.1.2 적재률 하지만 이 최악의 경우는 극단적인 예료, 평균적인
경우엔 O(a+1)의 시간이 걸린다 a는 적재율을 뜻하며 적재율이란 지금 저장된 key값
갯수(K), 전체 테이블의 갯수(N)을 서로 나눈 값(K/N)이다 즉 오늘날 저장된 자료가

많으면 많아질수록 충돌 확률이 높아져 연결 리스트 탐색 확률도 증가하며, 적을수록 리스트 탐
색 확률이 적어진다는 것이다 2.1.3 Simple uniform hash 충돌을 최소화 하
는 방법 중에 충돌이 적은 좋은 해쉬 함수를 만드는 방법도 있다 좋은 해쉬 함수의 조건은 S

imple uniform hash 함수를 만드는 것으로, 이 조건은 다음과 같다 1 계산된
해쉬값들은 0부터 배열의 크기-1 사이의 범위를 동일한 확률로 골고루 나타날 것 2 각각
의 해쉬값들은 서로 연관성을 가지지 않고 독립적으로 생성될 것 첫 번째 조건을 충족하면 충돌

이 일어날 확률이 적어질 것이며, 두 번째 조건은 해쉬값들이 서로 연관이 있을 경우 연관성이
있으면 해당 해쉬값이 등장하는 패턴이나 순서가 존재 할 수 있고, 이는 반복적인 충돌을 일
으 킬 확률이 있기 때문이다 2.1.4 divison method 해쉬 함수는 정말 다양하지

만 대표적인 해쉬 함수로는 divison method가 있는데, modular 연산 방식을
이용하는 방법이다 특정 key를 어떤 수로 나눈 나머지를 해쉬값으로 사용한다 예를 들어 m=
100이면 k mod m은 0부터 99까지의 범위를 가진다 이 범위의 m은 해쉬 테이블의 성

능을 크게 좌우하는데, m의 크기는 보통 키의 수의 3배가 적당하다고 한다 (적재율이 30%
쯤까지 충돌이 거의 일어나지 않는다고 한다.) 그리고 m으로 2^p값을 사용하는 것엔 큰 주
의를 요한다 왜냐하면 m이 2^3이면, 2진수로 00001000이고, 4번째 이하의 숫자만

해쉬값에 영향력을 끼치기 때문이다 예를 들어 k1과 k2가 각각 10110100,1012010
0이면 둘 다 같은 해쉬값을 출력한다 이를 방지하기 위해서 m은 보통 2^p에 근접한 소수를
선택한다고 한다 즉 가장 최적의 m의 크기는 키의 갯수의 3배이며 2의 지수승에 근접한 소

수이다 3 Open Addressing Open Addresing은 key값을 테이블에 저장
하는 Direct Addressing Table과는 다르게, 모든 데이터(key+데이터)를
테이블에 저장하는 방법이다 장점으로는 데이터를 직접 모두 읽어 오기 때문에, 포인터를 쓸 일

이 없어 포인터를 사용함으로서 발생 할 수 있는 오버헤드를 예방 할 수 있다는 점이다 포인터
가 필요 없어 구현이 훨씬 용이해졌으며, 포인터 접근에 필요한 시간이 없기 때문에 큰 성능
향상이 있다 3.1.1 Liner probing 포인터를 사용하지 않기 때문에, 미리 설명한

Chaing 방식은 사용 할 수 없다 따라서 다른 방법으로 충돌시에 대처해야 하는데 그 중
하나가 Liner probing이다 Liner probing은 key값으로 인덱스를 계산할
때, 만약 충돌이 발생한다면 바로 다음 인덱스에 데이터를 저장하는 방식이다 다음으로 이동한

이후에도 충돌이 발생했다면 또 다시 바로 다음 인덱스에 저장한다 즉 충돌이 일어나지 않을
때 까지 다음 인덱스로 이동을 해가며 빈 공간을 찾으면 그 위치에 저장한다 위는 하나의 예제
이다 m의 크기는 11로 해쉬 함수는 k mod 11로 계산한다 1 h(54) = 10, h

(77) = 0, h(94) = 6, h(89) = 1, h(14) = 3으로 충돌이 일어나
지 않는다 2 h(45) = 1인데, 이미 1의 위치에는 h(89)=1이 저장되어 있어 충돌
한다 따라서 다음 위치에 저장한다

3
h(35) = 2인데, 여기엔 방금 충돌이 일어났던 45가 저장되어 있어 충돌한다, 빈 위치
가 저장할 때 까지 이동하여 저장한다 4

h(76) = 10이며, 저장은 3번과 같이 한다
매 충돌시마다 한칸씩 이동하므로 해쉬함수는 다으모가 형태를 취하게 된다
h(k,i) = (k+i) mod m

i는 충돌시마다 증가하여 한칸씩 이동한다
Liner probing은 정말 구현이 용이하지만, primary clustering이라는
문제점을 갖고 있다 primary clustering은 충돌이 나면, 뒤 슬롯에 데이터를

넣어 하나의 정보 덩어리를 이루기 때문에, 데이터들의 특정 위치에만 밀집하는 현상을 말한다
이 현상으로 slot이 많아지면 많아질수록 탐색 시간에 엄청 늘어나게 된다 3.1.2 Qu
adratic probing primary clustering을 방지하기 위해 hash함수를

다음과 같이 2차식의 형태로 만드는 것이다 h(k,i) = (h(k) + c1*i + c
2*i^2) mod m Liner probing과는 달리 i가 2차식의 형태를 취해, 한칸씩
이동하는 것이 아닌 c1*i + c2*i^2만큼 이동한다 위는 간단한 예제이다

해쉬 함수는 h(k,i) = (k+i^2) mod m 의 형태를 취한다
3번째에서 h(48,0) = 6으로 기존의 76과 충돌이 일어났다
그래서 i를 하나 증가시켜 h(48,1) = (48+1^2) mod 7 = 0의 위치에다가

저장하였다 여기선 충돌이 한번 일어난 경우만 있는 예제이지만
만약 0에서도 충돌이 일어났다면 h(48,2) = (48+2^2) mod 7로 3의 위치에
저장되었을 것이다 하지만 Quadratic probing에도 secondary cluster

ing이라는 단점이 있다 이는 처음 시작 해쉬값이 같을 경우, 그 이후의 해쉬값들도 모두 동
일한 값으로 계산되어 충돌이 반복적으로 일어나 것을 말한다 3.1.3 Double hashi
ng Quadratic probing의 secondary clustering를 해결하기 위해

서 사용하는 방법이다 원리는 간단한데 해쉬 함수를 해쉬 함수 2개로 구성되는 것이다
해쉬 함수는 다음과 같은 형태를 가진다
h1(k) = k mod m

h2(k) = k mod m2
h(k,i) = (h1(k) + i*h2(k)) mod m
밑은 dobule hasing의 간단한 예제이다

dobule hashing을 테스트를 위해 간단하게 코드를 작성했다
실무에서 쓰는 해쉬처럼 공간이 자동적으로 확장되거나 탐색 삭제를 위한 함수는 구현하지 않았고
그냥 삽입시 충돌이 얼마나 일어나는지를 체크하기 위한 코드이다

테이블의 크기와 입력값의 크기를 조절해가며 충돌을 테스트 할 수 있다
# include # include # include gorithm> # include # include usin

g namespace std ; vector< int > v,h; int n,k,m1,m2;
int myrandom (int i) { return std::rand()%i;} void
randGenerator (vector& v, int n,int k){ srand

( time (NULL)); for(int i=1;i<=2*n;i++){ v push_bac
k (i); } random_shuffle(v begin (),v end (),myrando
m); } //더블 해싱을 위한 해싱함수 1 int hashFunc1 (int k){ ret

urn k%m1; } //더블 해싱을 위한 해싱함수 2 int hashFunc2 (int k
){ return 1+k%m2; } //더블 해싱 함수 int doubleFunc (int
k,int i){ return ( hashFunc1 (k)+i* hashFunc2 (k))%

m1; } void hashing (vector& v,vector& h,
int (*hashFunc)(int,int)){ int coll, first = -1,cou
nt = 0; double rate; for(int i=0; i

= 0; while(true){ int key = hashFunc(v[i],c); if(h[
key] == -1){ // printf(“%d가 %d 에 저장! “,v[i],key); h

[key] = v[i]; break; } else{ // printf(“%d번쨰 %d가 %
d 에서 충돌 적재율 : %lf “,i,v[i],key,(double)i/n*100); i
f(first == -1) { first = v[i]; rate = (double)i/n*

100; } count++; c++; } } } printf(“첫 충돌 값 : %d “,f
irst); printf(“총 충돌 수 : %d “,count); printf(“첫 충돌
시 적재율 : %lf%% “,rate); } int main (){ printf(“키 값

범위의 크기 :”); scanf(“%d”,&k); printf(“해시테이블 크기(1~n)
: “); scanf(“%d”,&n); printf(“m1, m2 입력 : “); scan
f(“%d %d”,&m1,&m2); //해시테이릅 크기 증가 printf(” “); ran

dGenerator(v,n,k); for(int i=0;i ck (-1); } // for(int i = 0; i “%d “,v[i]); // } printf(” “); hashing(v,h,doubleF

unc); printf(” “); // for(int i = 0; i i++){ // printf(“%d “,h[i]); // } } <실행 화면>

해시함수 글을 쓰게 되면서 대해 주요 적인 내용을 알게 되었다.

머클트리 의최상위부모노드(혹은루)는라르며블록체인

주제어 인 머클트리 에 대해 쓴 글이며 요약된 정보는 아래와 같다.

머클트리는 SHA-256 암호화 (해시함수)를 사용
머클트리는 데이터의 간편하고 확실한 인증을 위해서 SHA-256 암호화 기술(해시함수)를
사용하고 있습니다 머클트리는 라이트 노드에서 거래를 검증하기 위해 사용됨

머클트리(Merkle Tree) 혹은 해시트리(Hash Tree)라는 구조는 Ralph
Merkle이라는 사람이 1979년에 만들어 낸 개념입니다 머클트리를 사용한 검증법
머클트리란?

머클트리 머클트리란?
머클트리 머클트리(Merkle Tree) 혹은 해시트리(Hash Tree)라는 구조는 Ralph
Merkle이라는 사람이 1979년에 만들어 낸 개념입니다 다른 트리 알고리즘과는 다르게 머

클트리의 목적은 빠른 검색이 아니라 데이터의 간편하고 확실한 인증을 위해 사용합니다 머클트리
의 최상위 부모노드(혹은 루트)는 머클루트라 부르며 블록체인의 원소역할을 수행하는 블록에서
저장된 트랜잭션들의 해시트리라 볼 수 있습니다 머클트리는 데이터의 간편하고 확실한 인증을 위

해서 SHA-256 암호화 기술(해시함수)를 사용하고 있습니다 자세한 내용은 아래 머클트리
그림과 같이 설명하겠습니다 SHA-256 암호화 (해시함수)란? SHA-256은 암호화 기술
로서 복호화가 되지 않는 단방향 암호화 기술입니다 암호화된 결과는 16진수로 어떠한 수를 암

호화 하더라고 결과의 크기는 64자입니다 http://www.convertstring.com
/ko/Hash/SHA256 해당 사이트에 들어가 abcd 라는 값을 SHA256 암호화 하
면 88D4266FD4E6338D13B845FCF289579D209C897823B9217DA

밑에 정보를 보면 자세히 알수 있다.

3E161936F031589 라는 값이 나오게 됩니다 만약 abcd가 아닌 aacd라는 값을
SHA256으로 암호화 하면 전혀 다른 값이 나오게 됩니다 이와 같이 입력된 값이 1개라도
다를 경우, 결과는 전혀 연상할 수 없습니다 또한 입력할 글자의 수에 상관없이 결과의 크기

는 64자입니다 머클트리 구조 위 그림에서는 해시함수 64자를 전부 입력하기 힘들어 길이가
4인 값으로 대체했습니다 (원래는 4자가 아닌 64자입니다.) 블록체인에서는 먼저 각 트랜잭
션(이하 TX1, TX2, …, TXn)들을 SHA-256으로 암호화해 64자의 해시결과

를 만들어 냅니다 다음 각 인접한 노드들을 합한 다음, 다시 SHA-256으로 암호화해 해시
결과를 만들어 냅니다 이러한 과정을 단 1개의 해시가 나올때까지 반복합니다 한마디로 수많은
거래내용들을 해시함수를 통해 압축하고 인접한 노드끼리 더한다음 다시 압축 과 같은 과정을 반

복해 나갑니다 모든 결과 값은 이전 출력들을 해시함수를 거쳤기 때문에 입력이 하나라도 달라지
면 최종결과인 머클루트가 달라지게 됩니다 이러한 특성으로 블록에서 거래변조가 일어났는지를 확
인할 수 있으며, 거래내용이 아무리 길어도 해시함수를 거친 결과는 64자이므로 블록의 용량을

획기적으로 줄일 수 있게 됩니다 머클트리를 사용한 검증법 지금부터 비트코인을 예를 들어 검
증하는 방식을 설명하겠습니다 머클트리 검증에 미리 풀 노드와 라이트 노드라는 개념이 나오는데
풀노드는 제네시스 블록부터 지금까지의 블록 즉, 블록체인 전체를 갖고 유지하는 노드입니다

라이트 노드는 블록체인 전체가 아닌 몇몇 블록만 갖고 있으며 풀노드에게서 필요한 정보를
받아서 유지하는 노드입니다 만약 아래의 그림과 같이 라이트 노드에서 가장 마지막 값인 1e3
a 해시값과 머클루트인 af3d 해시값만 보유하고 있다고 가정하고 1e3a라는 거래내역이 완전

인지 확인을 어떻게 할까요? 방식은 풀노드로 부터 검은 네모박스인 43bc, 143c, 89
fe의 정보를 받아 해시 함수에 차례대로 넣어 계산을 진행합니다 아래의 그림과 같이 검은 네
모박스를 알게되면 인접한 노드끼리 더한 뒤 해쉬를 통해 상대값을 알게되어 머클트리를 진행해

나갈 수 있게 됩니다 이와 같은 경로를 머클경로라 합니다 만약 검은 네모박스가 아닌 파란 네
모박스를 알게 된다면 해시경로를 진행해 나갈 수 없어 머클루트가 진짜인지 알 수 없게 됩니다
이러한 과정을 통해 도출된 결과가 머클루트인 af3d의 값과 동일하지 않다면 1e3a 해시

값은 거짓거래로 판명이 납니다 요약 머클트리는 SHA-256 암호화 (해시함수)를 사용 머
클트리를 이용하면 빠르게 자료 검증을 할 수 있고 트리 저장 용량도 줄일 수 있음 머클트
리는 라이트 노드에서 거래를 검증하기 위해 사용됨


머클트리 글을 쓰게 되면서 대해 코어 적인 내용을 알게 되었다.

작업증명 거래정보의해쉬값은당가포함된블록merklhas계산

주제어 인 작업증명 에 대해 쓴 글이며 요약된 정보는 아래와 같다.

그리고 블록 해쉬는 작업 증명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래
정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다 채굴은 블록에
담긴 거래 정보를 유효한 것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Pro

of of Work)과 그에 따른 보상을 합친 개념이다. 블록 해쉬가 특정 숫자보다 낮게
나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다 작업 난이도는 블록 헤더 정
보에서 bits 라는 값으로 조절된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce

작업증명 BlockChain 기초 개념
작업증명 상당히 피상적으로만 알고 있던, 그래서 얘기하다가 서로 질문을 던져보면 너도 모르고 나도 모
르는. 블록이 정확히 뭘 말하는 거냐

..
그래서 채굴이 정확히 뭐라는 거냐
..

어려운 문제를 푼다는데 그게 대체 무슨 문제라는 거냐
..
분산된 어쩌구라는데 뭐가 어떻게 분산되어 있다는 거냐

..
사실 국내에서 찾을 수 있는 이런 저런 자료를 봐도 우연의 일치일까, 딱 어떤 정해진 선까지
만 다루고 더 깊은 얘기가 없다 그래서 그 수준까지의 내용을 보고 떠오르는 질문에 대한 답을

조금더 자세히 알아 보자면

찾기는 쉽지 않았는데, 이 책에 바로 그 수준 너머에 있는 내용이 담겨 있다 블록체인에 칭
칭 감길 수 있게 해주는 길잡이로서 많이 좋은 책이다 하지만 원문이 원래 그런건지 아니면 번
역이 좀 그런건지, 여튼 번역 결과는 그리 높은 점수를 줄 수는 없을 듯. 시작하기 전에 블

록체인과 비트코인의 구분 정도는 해보자 블록체인은 비트코인의 운영 바탕이 되는 체계이고, 비
트코인은 블록체인을 화폐 발행과 운영에 응용한 것이다 고로 핵심이 되는 시스템 기술 체계는 블
록체인이고, 비트코인은 블록체인을 바탕으로 만들어낸 서비스의 하나이다 그럼 블록체인이 어떻게

작동하는지 기초부터 한 번 들여다보자 BlockChain
블록체인은 최초의 블록(Genesis Block)부터 시작해서 바로 앞의 블록에 대한 링크를
보유하고 있는 링크드 리스트다 블록체인은 여러 노드에 걸쳐 분산되어 저장 및 관리되며, 블록

에는 거래 정보가 포함되어 있으므로, 블록의 집합체인 블록체인은 모든 거래 정보를 포함하는
거대한 분산 장부라고 할 수 있다 Block 블록은 블록체인의 원소로서 개념적으로는 다수의
거래 정보의 묶음을 의미한다 블록은 블록 헤더와 거래 정보, 기타 정보로 구성된다

블록 헤더는 version , previousblockhash , merklehash , t
ime , bits , nonce 이렇게 6개의 정보로 구성된다 , , , , , 이렇게 6
개의 정보로 구성된다 거래 정보는 입출금과 관련한 여러가지 정보를 보유하고 있다

기타 정보는 블록 내에 있는 정보 중에서 블록 헤더와 거래 정보에 해당하지 않는 정보를 말하
며, 블록 해쉬 계산에 사용되지 않는다 Block Header
블록 헤더는 다음의 6가지 정보로 구성

version : 소프트웨어/프로토콜 버전 previousblockhash : 블록 체인에서
바로 앞에 위치하는 블록의 블록 해쉬 merklehash : 개별 거래 정보의 거래 해쉬를
2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값 time : 블록이 만들어진 시간

bits : 난이도 조절용 수치 nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값
을 찾아낼때까지의 1씩 증가하는 계산 회수 Block Hash 블록의 식별자 수행을 하는 블
록 해쉬는 6가지의 블록 헤더 정보를 입력값으로 하고, 여기에 SHA256 해쉬 함수를 2회

적용해서 계산되는 값으로, 32바이트의 숫자값이다 이름은 블록 해쉬이지만 그 값은 블록 전
체를 해쉬한 값이 아니라, 블록 헤더를 해쉬한 값이다 지금까지의 내용을 바탕으로 블록 해쉬를
구하는 과정을 그림으로 나타내면 다음과 같다 이제 이 그림을 중심으로 얘기를 풀어가보자 완

료된 거래 정보의 변경이 사실상 불가능한 이유 거래 정보의 해쉬값은 해당 거래가 포함된 블록
의 merklehash 계산에 입력값으로 사용되고, merklehash 는 블록 해쉬의 계산
에 입력값으로 사용된다 블록 해쉬는 다음 블록(A라 하면)의 previousblockhash

값으로 저장되며, previousblockhash 은 A 블록의 블록 헤더 정보로서, A
블록의 블록 해쉬를 계산하는데 입력값으로 사용된다 따라서, 거래 정보가 변경되면 merkle
hash 가 변경되고, merklehash 가 변경되면 블록 해쉬가 변경되고, 블록 해쉬의

변경은 다음 블록의 블록 해쉬 변경으로 연쇄적으로 이어지게 된다 그리고 블록 해쉬는 작업 증
명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 한다 블록 하나 채굴하는데 평균 10분이 소요되고

, http://bitcoincharts.com/bitcoin/ 에서 확인한 2016-01-
23 지금 총 블록 수가 약 40만 블록이므로, 최초의 원조 블록인 Genesis 블록에 포
함된 거래를 변경하면 약 400만 분, 약 7.6년의 시간이 소요된다 그 7.6년의 시간 동

안에도 처음보는 블록들도 평균 10분 마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사
실 상 불가능하다 완료된 거래 정보를 변경하려면, 변경하려는 거래 정보가 포함된 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 하는데, 이는 많은 시간이 소요되고, 그 동안

다른 노드들에 의해 블록이 계속 추가되므로, 완료된 거래 정보의 변경은 현실적으로 사실상 불
가능하다 채굴 채굴은 일반인들이 비트코인을 쉽게 이해할 수 있도록 만든 용어로서, 작업 증명
(Proof of Work)과 보상을 합친 개념이라고 생각하면 된다 Proof of Work

(작업 증명) 작업 증명은 혁신 블록을 블록체인에 추가하는 작업을 완료했음을 증명하
는 것이라고 이해하면 된다 혁신 블록을 블록체인에 추가하려면, 그 처음보는 블록의 블록 해쉬
를 계산해내야하고, 그 블록 해쉬를 계산해내려면 그 블록의 블록 헤더 정보 중의 하나인 no

nce 값을 계산을 통해 구해야 한다 결론적으로 이 nonce 값을 구하는 것이 바로 작업
증명이다 nonce 값의 계산 결과부터 말하면 nonce 값은, 이 nonce 값을 입력값
중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다 그리고 해

쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에
서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바
꿔가면서 찾아낼 수 밖에 없다 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce 다

다시 말해, 아래 그림의 블록 헤더란에 포함된 6가지 정보 중에서 확정되지 않아서 값을
바꿀 수 있는 유일한 항목이 nonce 다 이 nonce 값을 1씩 증가시키면서 반복적으로
계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블

록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 처음보는
블록으로서 블록 체인에 추가되며 작업이 완료 된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의
nonce 값이 바로 작업 증명을 나타내는 nonce 값이다 이 과정을 그림으로 살펴보면

아래와 같다 아래의 그림은 블록 해쉬가 000000a84.. 보다 작게 나오는 nonce 값
을 구하는 과정을 나타내고 있다 앞에서 설명한 대로 nonce 외의 모든 항목의 값은 이미
정해져 있다 nonce 값이 0 일 때의 해쉬를 구해보니 000000a84.. 보다 큰 fa

8cbaeed.. 가 나와서 작업 증명에 실패 했다 다시 nonce 가 1 일 때의 해쉬를
구해보니 932d16e2e.. 가 나와서 또 실패. nonce 가 2 일 때의 해쉬, 3 일
때의 해쉬. 를 계속 반복해서 구하고 실패하다가, nonce 가 82,764,351 일 때

의 해쉬를 구해보니 드디어 000000a84.. 보다 작은 000000a83.. 이 나와서
작업 증명에 성공했다 그렇다면 작업 증명 성공 여부의 기준이 되는 000000a84.. 라는
값은 어떻게 정해지나? 바로 작업 난이도에 의해 정해진다(앞의 그림에서는 개념을 돕기 위해

작업 난이도 보다는 더 상세한 채굴 난이도 로 표시했으나, 이제 그 작업이 무엇인지 알았
으니 앞으로는 작업 난이도 라고 한다.) 작업 난이도 블록 해쉬가 특정 숫자보다 낮게 나올
때의 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 값을 계산하는데 기준이 되는 특정 숫자를 나타내며, 블록체인

전체에 걸쳐 일률적으로 적용되는 숫자다 보상 보상은 새로 발행되는 비트코인과 해당 블록에 포
함되는 거래의 거래 수수료의 합이다 비트코인의 혁신 발행은, 채굴자가 블록을 처음 구성할
때 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래(generati

on transaction)로 추가하는 방식으로 이루어진다 새로 발행되는 비트코인은 최초에
50BTC에서 시작해서 블록 체인에 21만개의 블록이 추가될 때마다 절반으로 줄어든다 거래
수수료는 각 거래 당사자끼리 자율적으로 정할 수 있고, 거래가 블록에 추가되는 우선 순위를

결정하는데 거래 수수료가 입력값으로 사용되기도 한다 보상은 nonce 값을 찾아내고, 그 결
과 처음보는 블록을 블록 체인에 추가해서, 해당 블록에 포함된 모든 거래를 유효한 거래로 확정
시켜준 대가라고 할 수 있다 채굴 보상이 줄어든다면 채굴에 의해 유지되는 블록체인이 지속될

수 있나? 비트코인의 총 발행량은 2,100만BTC로 정해져 있다 결국 채굴하더라도 언젠가는
비트코인은 더 이상 발행되지 않으므로, 거래 수수료만이 유일한 보상으로 남게 된다 어떤 상
황에서든 채굴이 의미가 있으려면, 채굴에 소요되는 비용보다 수익이 더 커야하며, 이는 비트코

인의 신규 발행이 없는 상황에서도 마찬가지다 이 조건을 만족시켜야 채굴이 계속되고 블록체인이

지속될 수 있다 비트코인 신규 발행이 없는 상황에서 이 조건이 만족되려면 다음과 같은 시
나리오가 충족되어야 한다 채굴 비용의 감소 채굴 비용의 감소는 결국 작업 증명 해답을 찾는
데 얼마의 시간이 소요되느냐에 달려있다 이는 작업의 난이도에 달려 있으므로, 거래 수수료만

이 유일한 보상인 상황에서 블록체인이 유지되려면 작업의 난이도가 현재보다 더 낮아져야 한다
거래 수수료의 증가 거래 수수료의 증가는 결국 거래 수수료율의 증가를 의미하는데, 거래의
성격과 다른 화폐와의 경쟁 등 시장 상황에 따라 정해지겠으나 대폭 높아지기는 어려울 것이

다 신규 발행이 사라지는 2140년 경 이후에는 결국은 채굴 난이도가 낮아지는 방식으로 블
록체인이 유지될 것이다 정리 블록체인은 모든 거래 정보를 포함하는 거대한 장부로서, 여러
채굴자의 컴퓨터에 복제되어 관리되는 분산 장부다 블록은 다수의 거래 정보의 묶음이며, 이런

블록이 체인처럼 연결되어 전체 블록체인을 형성한다 채굴은 블록에 담긴 거래 정보를 유효한
것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Proof of Work)과 그
에 따른 보상을 합친 개념이다.

작업증명 글을 쓰게 되면서 대해 메인 적인 내용을 알게 되었다.

작업증명 채굴은블록에담긴거래정보를유효한것으로확시키기위해어떤숫자

작업증명 에 대해 쓴 글 요약 하자면 아래와 같다.

그리고 블록 해쉬는 작업 증명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래
정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다 채굴은 블록에
담긴 거래 정보를 유효한 것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Pro

of of Work)과 그에 따른 보상을 합친 개념이다. 블록 해쉬가 특정 숫자보다 낮게
나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다 작업 난이도는 블록 헤더 정
보에서 bits 라는 값으로 조절된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce

작업증명 BlockChain 기초 개념
작업증명 상당히 피상적으로만 알고 있던, 그래서 얘기하다가 서로 질문을 던져보면 너도 모르고 나도 모
르는. 블록이 정확히 뭘 말하는 거냐

..
그래서 채굴이 정확히 뭐라는 거냐
..

어려운 문제를 푼다는데 그게 대체 무슨 문제라는 거냐
..
분산된 어쩌구라는데 뭐가 어떻게 분산되어 있다는 거냐

..
사실 국내에서 찾을 수 있는 이런 저런 자료를 봐도 우연의 일치일까, 딱 어떤 정해진 선까지
만 다루고 더 깊은 얘기가 없다 그래서 그 수준까지의 내용을 보고 떠오르는 질문에 대한 답을

조금더 자세히 알아 보자면

찾기는 쉽지 않았는데, 이 책에 바로 그 수준 너머에 있는 내용이 담겨 있다 블록체인에 칭
칭 감길 수 있게 해주는 길잡이로서 많이 좋은 책이다 하지만 원문이 원래 그런건지 아니면 번
역이 좀 그런건지, 여튼 번역 결과는 그리 높은 점수를 줄 수는 없을 듯. 시작하기 전에 블

록체인과 비트코인의 구분 정도는 해보자 블록체인은 비트코인의 운영 바탕이 되는 체계이고, 비
트코인은 블록체인을 화폐 발행과 운영에 응용한 것이다 고로 핵심이 되는 베이스 기술 체계는 블
록체인이고, 비트코인은 블록체인을 바탕으로 만들어낸 서비스의 하나이다 그럼 블록체인이 어떻게

작동하는지 기초부터 한 번 들여다보자 BlockChain
블록체인은 최초의 블록(Genesis Block)부터 시작해서 바로 앞의 블록에 대한 링크를
갖고 있는 링크드 리스트다 블록체인은 여러 노드에 걸쳐 분산되어 저장 및 관리되며, 블록

에는 거래 정보가 포함되어 있으므로, 블록의 집합체인 블록체인은 모든 거래 정보를 포함하는
거대한 분산 장부라고 할 수 있다 Block 블록은 블록체인의 원소로서 개념적으로는 다수의
거래 정보의 묶음을 의미한다 블록은 블록 헤더와 거래 정보, 기타 정보로 구성된다

블록 헤더는 version , previousblockhash , merklehash , t
ime , bits , nonce 이렇게 6개의 정보로 구성된다 , , , , , 이렇게 6
개의 정보로 구성된다 거래 정보는 입출금과 관련한 여러가지 정보를 보유하고 있다

기타 정보는 블록 내에 있는 정보 중에서 블록 헤더와 거래 정보에 해당하지 않는 정보를 말하
며, 블록 해쉬 계산에 사용되지 않는다 Block Header
블록 헤더는 다음의 6가지 정보로 구성

version : 소프트웨어/프로토콜 버전 previousblockhash : 블록 체인에서
바로 앞에 위치하는 블록의 블록 해쉬 merklehash : 개별 거래 정보의 거래 해쉬를
2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값 time : 블록이 만들어진 시간

bits : 난이도 조절용 수치 nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값
을 찾아낼때까지의 1씩 증가하는 계산 회수 Block Hash 블록의 식별자 수행을 하는 블
록 해쉬는 6가지의 블록 헤더 정보를 입력값으로 하고, 여기에 SHA256 해쉬 함수를 2회

적용해서 계산되는 값으로, 32바이트의 숫자값이다 이름은 블록 해쉬이지만 그 값은 블록 전
체를 해쉬한 값이 아니라, 블록 헤더를 해쉬한 값이다 지금까지의 내용을 바탕으로 블록 해쉬를
구하는 과정을 그림으로 나타내면 다음과 같다 이제 이 그림을 중심으로 얘기를 풀어가보자 완

료된 거래 정보의 변경이 사실상 불가능한 이유 거래 정보의 해쉬값은 해당 거래가 포함된 블록
의 merklehash 계산에 입력값으로 사용되고, merklehash 는 블록 해쉬의 계산
에 입력값으로 사용된다 블록 해쉬는 다음 블록(A라 하면)의 previousblockhash

값으로 저장되며, previousblockhash 은 A 블록의 블록 헤더 정보로서, A
블록의 블록 해쉬를 계산하는데 입력값으로 사용된다 따라서, 거래 정보가 변경되면 merkle
hash 가 변경되고, merklehash 가 변경되면 블록 해쉬가 변경되고, 블록 해쉬의

변경은 다음 블록의 블록 해쉬 변경으로 연쇄적으로 이어지게 된다 그리고 블록 해쉬는 작업 증
명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 한다 블록 하나 채굴하는데 평균 10분이 소요되고

, http://bitcoincharts.com/bitcoin/ 에서 확인한 2016-01-
23 오늘날 총 블록 수가 약 40만 블록이므로, 최초의 원조 블록인 Genesis 블록에 포
함된 거래를 변경하면 약 400만 분, 약 7.6년의 시간이 소요된다 그 7.6년의 시간 동

안에도 처음보는 블록들도 평균 10분 마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사
실 상 불가능하다 완료된 거래 정보를 변경하려면, 변경하려는 거래 정보가 포함된 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 하는데, 이는 많은 시간이 소요되고, 그 동안

다른 노드들에 의해 블록이 계속 추가되므로, 완료된 거래 정보의 변경은 현실적으로 사실상 불
가능하다 채굴 채굴은 일반인들이 비트코인을 쉽게 이해할 수 있도록 만든 용어로서, 작업 증명
(Proof of Work)과 보상을 합친 개념이라고 생각하면 된다 Proof of Work

(작업 증명) 작업 증명은 혁신 블록을 블록체인에 추가하는 작업을 완료했음을 증명하
는 것이라고 이해하면 된다 처음보는 블록을 블록체인에 추가하려면, 그 혁신 블록의 블록 해쉬
를 계산해내야하고, 그 블록 해쉬를 계산해내려면 그 블록의 블록 헤더 정보 중의 하나인 no

nce 값을 계산을 통해 구해야 한다 결론적으로 이 nonce 값을 구하는 것이 바로 작업
증명이다 nonce 값의 계산 결과부터 말하면 nonce 값은, 이 nonce 값을 입력값
중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다 그리고 해

쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에
서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바
꿔가면서 찾아낼 수 밖에 없다 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce 다

다시 말해, 아래 그림의 블록 헤더란에 포함된 6가지 정보 중에서 확정되지 않아서 값을
바꿀 수 있는 유일한 항목이 nonce 다 이 nonce 값을 1씩 증가시키면서 반복적으로
계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블

록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 혁신
블록으로서 블록 체인에 추가되며 작업이 완료 된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의
nonce 값이 바로 작업 증명을 나타내는 nonce 값이다 이 과정을 그림으로 살펴보면

아래와 같다 아래의 그림은 블록 해쉬가 000000a84.. 보다 작게 나오는 nonce 값
을 구하는 과정을 나타내고 있다 앞에서 설명한 대로 nonce 외의 모든 항목의 값은 이미
정해져 있다 nonce 값이 0 일 때의 해쉬를 구해보니 000000a84.. 보다 큰 fa

8cbaeed.. 가 나와서 작업 증명에 실패 했다 다시 nonce 가 1 일 때의 해쉬를
구해보니 932d16e2e.. 가 나와서 또 실패. nonce 가 2 일 때의 해쉬, 3 일
때의 해쉬. 를 계속 반복해서 구하고 실패하다가, nonce 가 82,764,351 일 때

의 해쉬를 구해보니 드디어 000000a84.. 보다 작은 000000a83.. 이 나와서
작업 증명에 성공했다 그렇다면 작업 증명 성공 여부의 기준이 되는 000000a84.. 라는
값은 어떻게 정해지나? 바로 작업 난이도에 의해 정해진다(앞의 그림에서는 내용을 돕기 위해

작업 난이도 보다는 더 상세한 채굴 난이도 로 표시했으나, 이제 그 작업이 무엇인지 알았
으니 앞으로는 작업 난이도 라고 한다.) 작업 난이도 블록 해쉬가 특정 숫자보다 낮게 나올
때의 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 값을 계산하는데 기준이 되는 특정 숫자를 나타내며, 블록체인

전체에 걸쳐 일률적으로 적용되는 숫자다 보상 보상은 새로 발행되는 비트코인과 해당 블록에 포
함되는 거래의 거래 수수료의 합이다 비트코인의 혁신 발행은, 채굴자가 블록을 처음 구성할
때 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래(generati

on transaction)로 추가하는 방식으로 이루어진다 새로 발행되는 비트코인은 최초에
50BTC에서 시작해서 블록 체인에 21만개의 블록이 추가될 때마다 절반으로 줄어든다 거래
수수료는 각 거래 당사자끼리 자율적으로 정할 수 있고, 거래가 블록에 추가되는 우선 순위를

결정하는데 거래 수수료가 입력값으로 사용되기도 한다 보상은 nonce 값을 찾아내고, 그 결
과 처음보는 블록을 블록 체인에 추가해서, 해당 블록에 포함된 모든 거래를 유효한 거래로 확정
시켜준 대가라고 할 수 있다 채굴 보상이 줄어든다면 채굴에 의해 유지되는 블록체인이 지속될

수 있나? 비트코인의 총 발행량은 2,100만BTC로 정해져 있다 결국 채굴하더라도 언젠가는
비트코인은 더 이상 발행되지 않으므로, 거래 수수료만이 유일한 보상으로 남게 된다 어떤 상
황에서든 채굴이 의미가 있으려면, 채굴에 소요되는 비용보다 수익이 더 커야하며, 이는 비트코

인의 신규 발행이 없는 상황에서도 마찬가지다 이 조건을 만족시켜야 채굴이 계속되고 블록체인이

지속될 수 있다 비트코인 신규 발행이 없는 상황에서 이 조건이 만족되려면 다음과 같은 시
나리오가 충족되어야 한다 채굴 비용의 감소 채굴 비용의 감소는 결국 작업 증명 해답을 찾는
데 얼마의 시간이 소요되느냐에 달려있다 이는 작업의 난이도에 달려 있으므로, 거래 수수료만

이 유일한 보상인 상황에서 블록체인이 유지되려면 작업의 난이도가 현재보다 더 낮아져야 한다
거래 수수료의 증가 거래 수수료의 증가는 결국 거래 수수료율의 증가를 의미하는데, 거래의
성격과 다른 화폐와의 경쟁 등 시장 상황에 따라 정해지겠으나 대폭 높아지기는 어려울 것이

다 신규 발행이 사라지는 2140년 경 이후에는 결국은 채굴 난이도가 낮아지는 방식으로 블
록체인이 유지될 것이다 정리 블록체인은 모든 거래 정보를 포함하는 거대한 장부로서, 여러
채굴자의 컴퓨터에 복제되어 관리되는 분산 장부다 블록은 다수의 거래 정보의 묶음이며, 이런

블록이 체인처럼 연결되어 전체 블록체인을 형성한다 채굴은 블록에 담긴 거래 정보를 유효한
것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Proof of Work)과 그
에 따른 보상을 합친 개념이다.

작업증명 글을 쓰게 되면서 대해 메인 적인 내용을 알게 되었다.

작업증명 블록해쉬가특정숫자보다낮게나올때의noce값을찾아내는것이

작업증명 에 대해 쓴 글 요약 하자면 아래와 같다.

그리고 블록 해쉬는 작업 증명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래
정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 한다 채굴은 블록에
담긴 거래 정보를 유효한 것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Pro

of of Work)과 그에 따른 보상을 합친 개념이다. 블록 해쉬가 특정 숫자보다 낮게
나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다 작업 난이도는 블록 헤더 정
보에서 bits 라는 값으로 조절된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce

작업증명 BlockChain 기초 개념
작업증명 상당히 피상적으로만 알고 있던, 그래서 얘기하다가 서로 질문을 던져보면 너도 모르고 나도 모
르는. 블록이 정확히 뭘 말하는 거냐

..
그래서 채굴이 정확히 뭐라는 거냐
..

어려운 문제를 푼다는데 그게 대체 무슨 문제라는 거냐
..
분산된 어쩌구라는데 뭐가 어떻게 분산되어 있다는 거냐

..
사실 국내에서 찾을 수 있는 이런 저런 자료를 봐도 우연의 일치일까, 딱 어떤 정해진 선까지
만 다루고 더 깊은 얘기가 없다 그래서 그 수준까지의 내용을 보고 떠오르는 질문에 대한 답을

그레서 중점적으로 다룰 것은

찾기는 쉽지 않았는데, 이 책에 바로 그 수준 너머에 있는 내용이 담겨 있다 블록체인에 칭
칭 감길 수 있게 해주는 길잡이로서 매우 좋은 책이다 하지만 원문이 원래 그런건지 아니면 번
역이 좀 그런건지, 여튼 번역 결과는 그리 높은 점수를 줄 수는 없을 듯. 시작하기 전에 블

록체인과 비트코인의 구분 정도는 해보자 블록체인은 비트코인의 운영 바탕이 되는 체계이고, 비
트코인은 블록체인을 화폐 발행과 운영에 응용한 것이다 고로 핵심이 되는 시스템 기술 체계는 블
록체인이고, 비트코인은 블록체인을 바탕으로 만들어낸 서비스의 하나이다 그럼 블록체인이 어떻게

작동하는지 기초부터 한 번 들여다보자 BlockChain
블록체인은 최초의 블록(Genesis Block)부터 시작해서 바로 앞의 블록에 대한 링크를
보유하고 있는 링크드 리스트다 블록체인은 여러 노드에 걸쳐 분산되어 저장 및 관리되며, 블록

에는 거래 정보가 포함되어 있으므로, 블록의 집합체인 블록체인은 모든 거래 정보를 포함하는
거대한 분산 장부라고 할 수 있다 Block 블록은 블록체인의 원소로서 개념적으로는 다수의
거래 정보의 묶음을 의미한다 블록은 블록 헤더와 거래 정보, 기타 정보로 구성된다

블록 헤더는 version , previousblockhash , merklehash , t
ime , bits , nonce 이렇게 6개의 정보로 구성된다 , , , , , 이렇게 6
개의 정보로 구성된다 거래 정보는 입출금과 관련한 여러가지 정보를 보유하고 있다

기타 정보는 블록 내에 있는 정보 중에서 블록 헤더와 거래 정보에 해당하지 않는 정보를 말하
며, 블록 해쉬 계산에 사용되지 않는다 Block Header
블록 헤더는 다음의 6가지 정보로 구성

version : 소프트웨어/프로토콜 버전 previousblockhash : 블록 체인에서
바로 앞에 위치하는 블록의 블록 해쉬 merklehash : 개별 거래 정보의 거래 해쉬를
2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값 time : 블록이 만들어진 시간

bits : 난이도 조절용 수치 nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값
을 찾아낼때까지의 1씩 증가하는 계산 회수 Block Hash 블록의 식별자 수행을 하는 블
록 해쉬는 6가지의 블록 헤더 정보를 입력값으로 하고, 여기에 SHA256 해쉬 함수를 2회

적용해서 계산되는 값으로, 32바이트의 숫자값이다 이름은 블록 해쉬이지만 그 값은 블록 전
체를 해쉬한 값이 아니라, 블록 헤더를 해쉬한 값이다 지금까지의 내용을 바탕으로 블록 해쉬를
구하는 과정을 그림으로 나타내면 다음과 같다 이제 이 그림을 중심으로 얘기를 풀어가보자 완

료된 거래 정보의 변경이 사실상 불가능한 이유 거래 정보의 해쉬값은 해당 거래가 포함된 블록
의 merklehash 계산에 입력값으로 사용되고, merklehash 는 블록 해쉬의 계산
에 입력값으로 사용된다 블록 해쉬는 다음 블록(A라 하면)의 previousblockhash

값으로 저장되며, previousblockhash 은 A 블록의 블록 헤더 정보로서, A
블록의 블록 해쉬를 계산하는데 입력값으로 사용된다 따라서, 거래 정보가 변경되면 merkle
hash 가 변경되고, merklehash 가 변경되면 블록 해쉬가 변경되고, 블록 해쉬의

변경은 다음 블록의 블록 해쉬 변경으로 연쇄적으로 이어지게 된다 그리고 블록 해쉬는 작업 증
명의 해답( nonce 값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 한다 블록 하나 채굴하는데 평균 10분이 소요되고

, http://bitcoincharts.com/bitcoin/ 에서 확인한 2016-01-
23 지금 총 블록 수가 약 40만 블록이므로, 최초의 원조 블록인 Genesis 블록에 포
함된 거래를 변경하면 약 400만 분, 약 7.6년의 시간이 소요된다 그 7.6년의 시간 동

안에도 혁신 블록들도 평균 10분 마다 하나 씩 계속 생성되므로 이를 모두 뒤집는 것은 사
실 상 불가능하다 완료된 거래 정보를 변경하려면, 변경하려는 거래 정보가 포함된 블록부터 그
이후의 모든 블록을 순서대로 다시 채굴해야 하는데, 이는 많은 시간이 소요되고, 그 동안

다른 노드들에 의해 블록이 계속 추가되므로, 완료된 거래 정보의 변경은 현실적으로 사실상 불
가능하다 채굴 채굴은 일반인들이 비트코인을 쉽게 이해할 수 있도록 만든 용어로서, 작업 증명
(Proof of Work)과 보상을 합친 개념이라고 생각하면 된다 Proof of Work

(작업 증명) 작업 증명은 혁신 블록을 블록체인에 추가하는 작업을 완료했음을 증명하
는 것이라고 이해하면 된다 처음보는 블록을 블록체인에 추가하려면, 그 처음보는 블록의 블록 해쉬
를 계산해내야하고, 그 블록 해쉬를 계산해내려면 그 블록의 블록 헤더 정보 중의 하나인 no

nce 값을 계산을 통해 구해야 한다 결론적으로 이 nonce 값을 구하는 것이 바로 작업
증명이다 nonce 값의 계산 결과부터 말하면 nonce 값은, 이 nonce 값을 입력값
중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다 그리고 해

쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에
서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바
꿔가면서 찾아낼 수 밖에 없다 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce 다

다시 말해, 아래 그림의 블록 헤더란에 포함된 6가지 정보 중에서 확정되지 않아서 값을
바꿀 수 있는 유일한 항목이 nonce 다 이 nonce 값을 1씩 증가시키면서 반복적으로
계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블

록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 혁신
블록으로서 블록 체인에 추가되며 작업이 완료 된다 블록 해쉬가 특정 숫자보다 낮게 나올 떄의
nonce 값이 바로 작업 증명을 나타내는 nonce 값이다 이 과정을 그림으로 살펴보면

아래와 같다 아래의 그림은 블록 해쉬가 000000a84.. 보다 작게 나오는 nonce 값
을 구하는 과정을 나타내고 있다 앞에서 설명한 대로 nonce 외의 모든 항목의 값은 이미
정해져 있다 nonce 값이 0 일 때의 해쉬를 구해보니 000000a84.. 보다 큰 fa

8cbaeed.. 가 나와서 작업 증명에 실패 했다 다시 nonce 가 1 일 때의 해쉬를
구해보니 932d16e2e.. 가 나와서 또 실패. nonce 가 2 일 때의 해쉬, 3 일
때의 해쉬. 를 계속 반복해서 구하고 실패하다가, nonce 가 82,764,351 일 때

의 해쉬를 구해보니 드디어 000000a84.. 보다 작은 000000a83.. 이 나와서
작업 증명에 성공했다 그렇다면 작업 증명 성공 여부의 기준이 되는 000000a84.. 라는
값은 어떻게 정해지나? 바로 작업 난이도에 의해 정해진다(앞의 그림에서는 개념을 돕기 위해

작업 난이도 보다는 더 상세한 채굴 난이도 로 표시했으나, 이제 그 작업이 무엇인지 알았
으니 앞으로는 작업 난이도 라고 한다.) 작업 난이도 블록 해쉬가 특정 숫자보다 낮게 나올
때의 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 값을 계산하는데 기준이 되는 특정 숫자를 나타내며, 블록체인

전체에 걸쳐 일률적으로 적용되는 숫자다 보상 보상은 새로 발행되는 비트코인과 해당 블록에 포
함되는 거래의 거래 수수료의 합이다 비트코인의 혁신 발행은, 채굴자가 블록을 처음 구성할
때 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래(generati

on transaction)로 추가하는 방식으로 이루어진다 새로 발행되는 비트코인은 최초에
50BTC에서 시작해서 블록 체인에 21만개의 블록이 추가될 때마다 절반으로 줄어든다 거래
수수료는 각 거래 당사자끼리 자율적으로 정할 수 있고, 거래가 블록에 추가되는 우선 순위를

결정하는데 거래 수수료가 입력값으로 사용되기도 한다 보상은 nonce 값을 찾아내고, 그 결
과 혁신 블록을 블록 체인에 추가해서, 해당 블록에 포함된 모든 거래를 유효한 거래로 확정
시켜준 대가라고 할 수 있다 채굴 보상이 줄어든다면 채굴에 의해 유지되는 블록체인이 지속될

수 있나? 비트코인의 총 발행량은 2,100만BTC로 정해져 있다 결국 채굴하더라도 언젠가는
비트코인은 더 이상 발행되지 않으므로, 거래 수수료만이 유일한 보상으로 남게 된다 어떤 상
황에서든 채굴이 의미가 있으려면, 채굴에 소요되는 비용보다 수익이 더 커야하며, 이는 비트코

인의 신규 발행이 없는 상황에서도 마찬가지다 이 조건을 만족시켜야 채굴이 계속되고 블록체인이

지속될 수 있다 비트코인 신규 발행이 없는 상황에서 이 조건이 만족되려면 다음과 같은 시
나리오가 충족되어야 한다 채굴 비용의 감소 채굴 비용의 감소는 결국 작업 증명 해답을 찾는
데 얼마의 시간이 소요되느냐에 달려있다 이는 작업의 난이도에 달려 있으므로, 거래 수수료만

이 유일한 보상인 상황에서 블록체인이 유지되려면 작업의 난이도가 현재보다 더 낮아져야 한다
거래 수수료의 증가 거래 수수료의 증가는 결국 거래 수수료율의 증가를 의미하는데, 거래의
성격과 다른 화폐와의 경쟁 등 시장 상황에 따라 정해지겠으나 대폭 높아지기는 어려울 것이

다 신규 발행이 사라지는 2140년 경 이후에는 결국은 채굴 난이도가 낮아지는 방식으로 블
록체인이 유지될 것이다 정리 블록체인은 모든 거래 정보를 포함하는 거대한 장부로서, 여러
채굴자의 컴퓨터에 복제되어 관리되는 분산 장부다 블록은 다수의 거래 정보의 묶음이며, 이런

블록이 체인처럼 연결되어 전체 블록체인을 형성한다 채굴은 블록에 담긴 거래 정보를 유효한
것으로 확정시키기 위해 어떤 숫자값을 찾아내는 작업 증명(Proof of Work)과 그
에 따른 보상을 합친 개념이다.

이 글을 연제 하면서 작업증명 에 대해 특징적인 내용을 알게 되었다.

제네시스 블록에는거래데이터를비롯해타임탬프와전의값표되어

핵심단어 제네시스 블록 에 대해 쓴 글이며 밑에 글에는 요약된 정보이다

비트코인의 경우, 10분마다 처음보는 블록을 생성하여 블록체인에 연결하고 있다
블록체인 네트워크마다 블록 안에 담는 거래 데이터나 양은 조금씩 다르다
제네시스 블록(Genesis block)

새로 생성되는 블록은 채굴자들의 작업증명(PoS) 과정을 거쳐 블록체인에 추가된다
블록체인 네트워크가 시작되었음을 상징하는 첫 번째 블록이다
블록(block)

제네시스 블록 블록(block)
제네시스 블록 블록은 데이터를 저장하는 단위이다
일정 기간 동안 쌓인 거래 데이터의 변화를 여러 블록에 분산하여 담게 된다

블록체인 네트워크마다 블록 안에 담는 거래 데이터나 양은 조금씩 다르다
블록에는 거래 데이터를 비롯해 타임스탬프와 이전 블록의 해시값이 표시되어 있다
타임스탬프는 블록이 만들어진 시간을 명시함으로써 다른 내역과 겹치지 않도록 한다

이전 블록의 해시값은 블록과 블록은 체인처럼 연결되어 있는데 연결되어 있는 블록들이 서로 같
은 해시값을 갖도록 함으로써 위변조를 막고 있다 새로 생성되는 블록은 채굴자들의 작업증명(P
oS) 과정을 거쳐 블록체인에 추가된다 비트코인의 경우, 10분마다 혁신 블록을 생성하여

블록체인에 연결하고 있다 속도가 느리다는 단점이 있어 블록을 크게 만들어서 더 빠르게 처리할
수 있도록 하는 식의 대안(라이트코인 등)도 나오고 있다 블록체인 이란?, 51% 공격
제네시스 블록(Genesis block)

그레서 중점적으로 다룰 것은

블록체인 네트워크가 시작되었음을 상징하는 첫 번째 블록이다
첫 번째 블록이 있어야 다음 블록을 계속 연결할 수 있다는 점에서 의미를 갖는다
이에 창세기라는 뜻을 가진 ‘제네시스’로 명명하였다

비트코인의 경우, 2008년 10월에 논문이 발표되었고, 2009년 1월 2일 사토시 나카모
토에 의해 비트코인 제네시스 블록이 생성되었다 한편 블록이 만들어진 순서는 높이(height)
로 표현하는데, 제네시스 블록의 높이는 0이다 블록 보상(Block reward) : 가장

먼저 작업증명(PoS)을 끝낸 채굴자에게 주어지는 보상이다 작업증명을 위해서는 하드웨어 매입
, 전기비 등의 자원을 투입해야 한다 따라서 블록 보상은 작업증명에 대한 수고비, 이를 위해
지출한 비용에 대한 보상인 셈이다 비트코인의 경우, 1 블록 당 12.5비트코인이 보상으로

주어지고 있다(2018년 기준) 채굴량의 반감기가 4년마다 오는데 2020년에는 6.25
비트코인으로 줄어들 예정이다 블록 헤더(Block header) : 거래정보, 머클루트, 난
수 등 블록의 주요 정보를 담고 있다 각 블록체인 네트워크마다 헤더에 담긴 내용은 다르다

블록 높이(Block height) : 제네시스 블록부터 오늘날 블록까지 블록이 만들어진 양을

의미하는데, 이를 높이로 표현하고 있다.

제네시스 블록 글을 쓰게 되면서 대해 메인 적인 내용을 알게 되었다.

인공지능 블록체기반프로젝트마드AI는완전히새운개념의

주제어 인 인공지능 에 대해 쓴 글이며 요약된 정보는 아래와 같다.

블록체인 베이스 AI 프로젝트 스타트업 마인드 AI(MIND AI)는 헬스케어, 금융 지식
플랫폼 등에 사용하는 인공지능(AI) 엔진을 개발, 에코시스템을 구축한다 블록체인 시스템 인공지
능 프로젝트인 마인드 AI는 새로히 처음보는 개념의 정보 구조를 베이스로 핵심적인 추론(R

easoning) 엔진을 쓴다 마인드 AI는 지식 공유에 대한 보상을 코인으로 제공한다 마
인드 AI는 인공지능에 대한 처음보는 접근을 제공하기 위해 만들어진 엔진과 생태계다 마인드
AI는 의학 분야 등 각종 지식 정보를 모은 온톨로지(자연언어로 표현된 개념 또는 지식)를

인공지능 블록체인 베이스 AI 프로젝트 스타트업 마인드 AI(MIND AI)는 헬스케어, 금융 지식 플
인공지능 랫폼 등에 사용하는 인공지능(AI) 엔진을 개발, 에코시스템을 구축한다 마인드 AI는 의학 분야
등 각종 지식 정보를 모은 온톨로지(자연언어로 표현된 개념 또는 지식)를 방식으로 한 블록

체인 기술 적용 인공지능 엔진을 개발한다 블록체인 시스템 인공지능 프로젝트인 마인드 AI는 완
전히 처음보는 개념의 정보 구조를 방식으로 핵심적인 추론(Reasoning) 엔진을 쓴다 지
금까지 없는 처음보는 AI 접근 방식을 제공한다 마인드 AI는 IBM 왓슨과는 다른 병렬 구조

의학 정보 등을 모은 플랫폼을 구상할 계획이다 조슈아 홍(Joshua Hong) 마인드 A
I 공동대표는 “왓슨이 대량의 의학 관련 논문, 서적 등 데이터를 학습해 의사 보조로 암 진
단을 돕는다면, 우리는 이와 다른 원리의 플랫폼을 만들 것”이라고 말했다 마인드 AI는 인공

지능에 대한 혁신 접근을 제공하기 위해 만들어진 엔진과 생태계다 홍 대표는 “병렬 처리,
슈퍼컴퓨터과 대용량 자료가 있어야 하는 구조를 구축하는 것이 아니라 캐노니컬(Canonica
l)이라는 명칭을 부여한 국제적으로 특허 받은 새로히 혁신 자료 구조에 기반한 주요 추론

그레서 중점적으로 다룰 것은

엔진을 만들었다”면서 “헬스케어 연관된 지식 시스템 서비스도 제공될 것”이라고 설명했다 즉
대용랑 정보가 필요하지 않은 구조다 마인드 AI는 지식 공유에 대한 보상을 코인으로 제공한
다 블록체인 시스템 에코시스템을 통해서 헬스케어 관련 전문 지식(온톨로지)을 공유하는 이들에게는

코인(OMAI)을 통해 보상할 계획이다 의료 외에도 교육, 금융 등 다양한 분야에서 지식을
공유하면 코인으로 보상한다 마인드 AI는 인간과 유사한 추론 엔진으로 작동하는 자산 케어 플

랫폼을 구현하기 위해 코인페이먼트(CoinPayments)와 전략적 제휴를 체결했다 회사와
코인페이먼트는 제휴를 통해 자연언어의 문맥과 뉘앙스를 해석할 수 있는 AI로 전통적인 수
치 분석을 보완하기 위해 인간과 같은 추론 엔진을 도입하기 위해 협력했다 코인페이먼트 대표

알렉스 알렉산드로프(Alex Alexandrov)는 마인드 AI의 프라이빗 토큰 세일에
투자했다 이외에도 마인드 AI는 다수 벤처캐피탈로부터 투자를 받았다 오늘날 비트소닉에서 보너
스20%의 간편구매가 중이며 세일 이후 비트소닉에 상장이 확정되었다.


이 글을 연제 하면서 인공지능 에 대해 알게 되어서 개인적으로 많은 도움이 되었다.