문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. == 개요 == 최초의 [[블록체인]]기술 기반의 암호화폐이다. == 원리 == === 트랜잭션 === 비트코인에서 코인은 전자 서명의 연결로 정의된다. 코인이 트랜잭션될 때, 코인의 주인은 이전의 트랜잭션과 다음 주인의 공개키로 이루어진 해시를 자신의 비밀키로 서명하여 코인의 뒤에 덧붙인다. 이 방식으로 코인의 주인은 이전 주인들을 확인할 수 있게 된다. 이 방식이 가지는 가장 큰 문제점은 이전의 트랜잭션들에서 이중결제의 여부를 확인할 수 없다는 것이다. === 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개일 때 각각의 정보는 결제와 그 거스름을 나타낸다. == Reference == Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008) 비트코인 문서로 돌아갑니다.