Timechain, 즉 Bitcoin Blockchain은 Genesis Block부터 네트워크의 현재 끝까지 이어진 유효한 블록의 사슬입니다. 이후 각 블록은 앞 블록의 디지털 지문인 hash를 가리키고, 블록 생성에 필요한 계산 작업을 입증하는 Proof of Work를 더합니다. 따라서 노드는 어떤 기록이 규칙을 따르며 누적 작업량이 가장 큰지 독립적으로 검증할 수 있습니다. 여기서 ‘시간’은 모든 트랜잭션의 정확한 시계를 뜻하지 않고, 주로 입증할 수 있는 사건의 순서를 뜻합니다.
수천 대의 컴퓨터가 새 페이지를 각각 독립적으로 확인할 수 있는 공개 회계 기록을 떠올려 보세요. 한 페이지가 하나의 블록입니다. 블록에는 여러 트랜잭션과 이전 블록에 대한 참조가 들어 있어 페이지의 순서가 정해지고 마음대로 섞을 수 없습니다. Timechain은 첫 블록부터 오늘의 끝까지 이어진 이 전체 순서입니다. 이름이 알려진 사람마다 bitcoin을 얼마나 갖고 있는지 적는 장부는 아닙니다. 노드는 트랜잭션 기록에서 아직 쓰이지 않은 거래 출력를 계산합니다. 한 회사의 서버도 아닙니다. 어떤 Full Node (거래와 네트워크 규칙을 스스로 검증하는 노드)든 사본을 내려받아 검증할 수 있습니다. [1] [3]
Bitcoin의 맥락에서 두 이름은 같은 블록 기록을 가리킵니다. 남아 있는 2008년 11월 출시 전 코드에는 주석과 변수 또는 함수 이름에 timechain이 쓰였습니다. 반면 whitepaper는 타임스탬프, 블록의 사슬, Proof of Work 사슬을 말하며 timechain이라는 정확한 단어는 쓰지 않습니다. 이후 Blockchain이 세계적으로 널리 쓰이는 용어가 되었습니다. 오늘날에는 다른 네트워크와 데이터베이스를 가리키는 넓은 표현이기도 하지만, Bitcoin Timechain은 Bitcoin 고유의 사슬입니다. 따라서 제목의 두 단어는 두 프로토콜을 뜻하지 않습니다. 역사적 이름과 오늘의 일반적인 용어를 함께 남긴 것입니다. [2] [1] [8]
디지털 서명은 필요한 키의 소유자가 트랜잭션을 승인했음을 증명할 수 있습니다. 그러나 서명만으로는 이전 거래의 아직 쓰지 않은 동일한 출력, 즉 UTXO를 쓰려는 서로 충돌하는 두 트랜잭션에 서명하는 일을 막지 못합니다. 한 노드는 상점으로 보내는 결제를 먼저 받고, 다른 노드는 같은 가치를 발신자에게 돌려보내는 거래를 먼저 받을 수 있습니다. 그래서 네트워크에는 어느 지출이 확정되었고 어느 지출이 더는 유효할 수 없는지 정하는 공동 기록이 필요합니다. 블록은 트랜잭션에 검증 가능한 순서상의 자리를 줍니다. 다만 인간의 시각이나 네트워크 시각으로 어떤 메시지가 먼저 만들어졌는지를 증명하지는 않습니다. 노드마다 미확정 트랜잭션을 본 순서가 다를 수 있기 때문입니다. [1]
Block Header는 블록의 기본 정보를 담은 헤더입니다. 이전 헤더의 hash와 블록의 거래 식별자들을 하나의 hash로 요약하는 Merkle Root 등이 들어 있습니다. Hash는 디지털 지문과 비슷해서 입력이 조금만 바뀌어도 결과가 달라집니다. 오래된 트랜잭션을 바꾸면 Merkle Root와 해당 블록의 hash, 다음 블록에 저장된 참조가 바뀝니다. 변경은 기록의 한 줄에 머물지 않고 이후의 전체 연결을 끊습니다. hash만으로 거래가 규칙을 지킨다고 증명할 수는 없습니다. 노드는 트랜잭션도 검증해야 하고 모든 블록은 요구되는 Proof of Work를 충족해야 합니다. [3] [1]
노드는 어떤 가지가 더 길거나 대형 채굴자가 지지한다는 이유만으로 받아들이지 않습니다. 먼저 Proof of Work, 이전 블록과의 연결, 허용된 보상, 트랜잭션, 지출 조건, 입력이 이미 사용된 자금을 참조하는지 등의 규칙을 확인합니다. 만든 이의 연산력이 아무리 커도 무효한 가지는 무효합니다. 유효한 후보들 사이에서만 누적 작업량이 가장 큰 사슬을 선택합니다. 따라서 단순히 ‘가장 긴 사슬’보다 ‘작업량이 가장 큰 유효한 가지’라고 하는 편이 정확합니다. chainwork 필드는 각 블록의 난이도에서 사슬을 만들기 위해 필요할 것으로 예상되는 해시 계산 수를 추정합니다. 채굴자가 실제로 수행한 시도 횟수를 세는 값이 아닙니다. [4] [5] [6]
Proof of Work에는 시간, 전기, 연산력이 들지만 결과는 빠르게 검증할 수 있습니다. 오래된 블록을 바꾸려는 사람은 그 블록의 새로운 유효한 Proof of Work를 만들고, 이후 모든 블록을 다시 연결하며, 정직한 가지가 계속 더하는 작업량까지 따라잡아야 합니다. 블록이 끝에서 더 깊이 묻힐수록 일반 기록의 앞선 정도가 커집니다. 이는 과거가 절대 바뀌지 않는다는 수학적 약속이 아닙니다. 경제적이고 확률적인 방어이며, 블록이 더해질수록 성공적인 재작성 비용이 대체로 빠르게 커집니다. 공격자가 대체 가지에 임의의 무효 결제나 한도를 넘는 bitcoin을 넣을 수도 없습니다. 다른 노드가 그 블록을 거부하기 때문입니다. [1] [4]
채굴자는 Block Header에 타임스탬프를 넣습니다. 합의 규칙은 어느 정도의 여유를 허용하므로 time 값은 블록이나 특정 트랜잭션이 만들어진 정확한 시각을 증명하지 않습니다. 한 블록의 타임스탬프가 바로 전 블록보다 반드시 높아야 하는 것도 아닙니다. 그래서 Bitcoin은 일부 규칙에 Median Time Past, 즉 이전 11개 블록 타임스탬프의 중앙값을 사용합니다. 시각들을 순서대로 정렬한 뒤 가운데 값을 고르면 중앙값이 됩니다. 개별 타임스탬프보다 더 안정적으로 움직입니다. 평균 10분의 블록 간격도 시간표가 아닙니다. 두 블록이 거의 연이어 올 수 있고, 다음 블록은 훨씬 오래 걸릴 수 있습니다. 블록 height는 사슬 안의 정확한 위치를 주지만 달력상의 정확한 시각을 주지는 않습니다. [4] [7]
두 채굴자가 거의 같은 시각에 같은 height에서 서로 다른 유효한 블록을 찾을 수 있습니다. 어떤 노드는 한 가지를 먼저 보고 다른 노드는 반대쪽을 먼저 봅니다. 이후 Proof of Work가 유효한 가지 사이에 작업량 차이를 만들면, 노드는 누적 작업량이 더 큰 쪽으로 이동합니다. 이 전환을 Reorg라고 합니다. 분리된 블록의 트랜잭션은 새 가지에서 다시 확정되거나 Mempool로 돌아가거나, 새 기록이 충돌하는 지출을 확정하면 무효가 될 수 있습니다. 블록에 들어가면 첫 번째 확정이고, 그 위에 블록이 하나씩 쌓일 때마다 확정 수가 하나씩 늘어납니다. 모든 결제에 통하는 하나의 마법 같은 숫자는 없습니다. 필요한 신뢰 수준은 금액, 위험, 기다릴 수 있는 시간에 따라 달라집니다. [1] [3]
Bitcoin에서는 특정 블록 높이 이후 또는 지정된 시간 뒤에야 확정될 수 있는 트랜잭션을 만들 수 있습니다. Timelock은 그 시각에 트랜잭션을 자동으로 실행하라는 명령이 아닙니다. 유효한 블록이 해당 거래를 가장 일찍 포함할 수 있는 지점을 정할 뿐입니다. 시간 기반 nLockTime에 대해 BIP 113은 만들고 있는 블록의 조정하기 쉬운 타임스탬프가 아니라 이전 블록의 Median Time Past를 사용합니다. 따라서 조건은 여러 블록의 기록에 기반합니다. 조건이 충족되어도 트랜잭션은 전파되고, 노드가 받아들이고, 채굴자가 선택해야 하며 특정 블록에 포함된다는 보장은 없습니다. [7] [4]
RPC는 노드에 명령을 보내고 응답을 읽는 인터페이스입니다. Full Node는 블록이나 트랜잭션이 현재 기록에 속한다는 공개 블록 탐색기의 설명을 믿을 필요가 없습니다. 특정 hash에 대해 getblock RPC는 height, 확정 수, Merkle Root, time, mediantime, 이전 hash, 난이도와 chainwork를 보여 줄 수 있습니다. 필드마다 답하는 질문이 다릅니다. height는 위치, previousblockhash는 조상 관계, confirmations는 현재 끝 아래의 깊이, time은 헤더의 값, mediantime은 중앙값, chainwork는 누적된 예상 작업량을 뜻합니다. 한 숫자만으로는 충분하지 않습니다. Timechain의 핵심은 노드가 이 값들의 관계와 모든 합의 규칙을 하나의 전체로 검증한다는 데 있습니다. [6] [4]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Genesis Block, Proof of Work, 트랜잭션, Full Node, Difficulty Adjustment. 다음 항목에서도 이 글을 참조합니다 Bitcoin Whitepaper, Genesis Block, Proof of Work, Full Node.