- 비트코인 채굴은
작업증명(PoW: proof of work) 이라는 방식을 통해 이루어지는데, 먼저
해시 함수가 무엇인지에 대한 이해가 필요하다.
- 해시 함수란,
임의의 길이를 갖는 데이터를
고정된 길이의 데이터로 매핑하는 함수를 말한다. 간단한 테스트로, 아래 텍스트 영역에 아무 데이터나 집어 넣어보면 그에 맞는 16진수 64자리의 해시값이 출력되는 것을 확인할 수 있다.
- 하나 눈여겨볼점은, '함수'이기 때문에
동일한 입력이 주어진 경우 항상
동일한 결과를 얻게 된다는 점이다. 이를테면 'hello world'를 치면 'b94d27b99...'을 얻는다. 결과가 'b94d27b99...'인데도 자기는 'hello world'를 입력했던게 아니라고 주장한다면 거짓임을 알 수 있다. (물론 이론적으로 가능은 하며, 이것을 해시 충돌이라고 한다.)
비트코인 채굴은 바로 위의
SHA256 해시 함수를 통해 계산된 결과가 특정 조건을 만족하는 경우 완료된다. 이를테면 다음과 같다.
1. 아래 텍스트 박스에 '이전 블록의 해시값', '블록 생성 시각', '임의의 난수' 등 몇 가지 요소가 조합된 데이터를 넣고 해시값을 계산해본다.
2. 그 결과가 특정한 값보다
작다면 성공이다. 쉽게 얘기하면 '해시값의 맨 앞에 연속된 0이 n개 이상이어야 한다'로 생각할 수도 있다. 이를테면 10진수를 여덟 자리로 표기할 경우 가장 큰 값은 99999999인데, 만약 계산결과가 12345라면 00012345으로 표기할 수 있고, 맨 앞에 연속한 0이 3개이므로 10만보다 작다는 것을 알 수 있다.
3. 이런식으로 특정 조건을 만족하는 1의 구성요소들을 갖고 주변 블록체인들에 전파해서 동의를 얻으면 블록 생성 권한을 얻고 비트코인을 보상으로 받는다.
4. 정확한 표현은 아니나, 대중적 이해의 수준에서는 보통 '해시값 맨 앞의 연속한 0의 개수' = '난이도' 정도로 설명하는 수준으로 족하다. (사실은 좀 더 복잡하다.)
5. 해시값은 64자리 16진수이므로, 난이도 1이 증가할 때마다 채굴에 소모되는 시간은 대략 평균적으로 16배가 증가한다고 생각할 수 있다.
6. 실제 비트코인 채굴은 저런 단순 해시값을 계산하는데 최적화된 특수장비(ASIC)를 통해 수행하므로, 우리가 사용하는 일반적인 CPU나 GPU등의 연산속도와는 차원이 다를 정도로 계산속도가 빠르다.