목차
개요
최초의 블록체인기술 기반의 암호화폐이다.
원리
트랜잭션
비트코인에서 코인은 전자 서명의 연결로 정의된다. 코인이 트랜잭션될 때, 코인의 주인은 이전의 트랜잭션과 다음 주인의 공개키로 이루어진 해시를 자신의 비밀키로 서명하여 코인의 뒤에 덧붙인다. 이 방식으로 코인의 주인은 이전 주인들을 확인할 수 있게 된다. 이 방식이 가지는 가장 큰 문제점은 이전의 트랜잭션들에서 이중결제의 여부를 확인할 수 없다는 것이다.
Proof-of-Work
이 문제를 해결하기 위해서 비트코인에서는 유저-유저 기반의 타임스탬프 서버(Timestamp Server)를 도입한다. 타임스탬프 서버는 어떤 일련의 정보들을 해시로 변환한 뒤 시간 순으로 나열하여 공공에 이 정보를 공개하는 역할을 한다. 각 타임스탬프들은 직전의 타임스탬프의 정보(ex. 트랜잭션)를 해시에 포함하고, 거래가 진행될 수록 더 많은 타임스탬프들이 이어지게 되어 하나의 체인을 형성하게 된다.
타임스탬프의 정보를 검증하고 더 이어가기 위해 비트코인에서는 Proof-of-Work라는 개념을 사용한다. 비트코인의 타임스탬프는 직전의 해시, Nonce값, 트랜잭션의 정보를 담은 머클 트리(해시 트리) 등의 정보를 이어붙여 해시를 구하는 방식으로 이루어진다. 여기에서 Nonce의 값을 구하여 블록의 정당성을 검증하는 것을 Proof-of-Work라고 하는데, 비트코인에서 이 과정은 주어진 문자열에 대해 문자열을 이어붙여 SHA-256 인코딩했을 시 앞에 나오는 0의 개수를 구하는 방식으로 이루어진다. 네트워크의 모든 노드들은 가장 긴 블록의 체인에서 이 작업을 시행하여 네트워크를 유지하게 되고 Nonce의 값을 찾아내는 노드에게는 코인이 보상으로 주어지게 된다(블록 체인의 정보에서 가장 첫번째 트랜잭션이 새로운 코인을 발행하여 전달하는 과정을 나타냄).
비트코인 네트워크의 작동 과정
- 새로운 트랜잭션이 모든 노드들에 대해서 broadcast된다.
- 각 노드들은 트랜잭션 정보를 블록으로 가지고온다.
- 각 노드들은 그 블록에서 Proof-of-Work 작업을 시행한다.
- 어떤 노드가 그 블록에서 Proof-of-Work를 찾았다면, 그 블록을 다른 모든 노드에 broadcast한다.
- 각 노드들은 그 블록의 트랜잭션들이 정당하다는 것이 확인되면 그 블록을 체인에 연결시킨다.
- 각 노드들은 받아들인 블록을 이전의 해시로서 사용하여 1의 과정을 반복한다.
모든 노드들은 가장 긴 체인에 대해서 새로운 블록을 찾아내는 작업을 한다. 만약 더 긴 체인이 발견된다면 그 체인으로 이동하여 작업을 계속하게 된다. 이 방식으로 비트코인 네트워크 상의 모든 트랜잭션을 기록할 수 있다.
기타
머클 트리
머클 트리(해시 트리)는 짧은 시간 내에 트리의 노드들에 접근할 수 있도록 고안된 트리 자료구조로 각 부모 노드들은 자식 노드의 해시값들을 특정 방식으로 해시한 값을 가지게 된다. 이 방식은 트리를 최적화함으로써 저장되는데 필요한 메모리 공간을 줄일 수 있다는 특징이 있다. 비트코인 상의 모든 노드들은 필연적으로 전체 비트코인의 체인을 가지고 있어야 하기 때문에 트랜잭션 정보를 저장할 때 머클 트리를 이용하여 메모리 공간의 사용을 최소화한다. 여기에서 머클 트리의 루트 노드의 해시는 블록의 해시를 구성하는 데에 사용된다.
트랜잭션의 상세
트랜잭션 과정은 하나의 코인을 여러 부분으로 나누거나 분해된 코인들을 하나로 합치기 위하여 복수의 입력과 2개 이하의 출력을 나타낸다. 특히 출력이 2개일 때 각각의 정보는 결제와 그 거스름을 나타낸다.
가격
하드포크 소식으로 다 죽을 줄 알았던 비트코인이 2017/08/06 기준 국내 최고가 약 380만원을 찍었다!
Reference
Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008)