프로그래밍/블록체인 11

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 9. 금액의 결합과 분할

비트코인에서의 거래는 일반적인 거래에서 표현하는 방법과 좀 다릅니다. 이번 절에서는 그러한 내용을 다룹니다. 아래는 논문 본문입니다. 9. 금액의 결합과 분할 코인들을 개별로 처리할 수도 있겠으나 그런 경우, 송금되는 모든 단위별로 거래를 분리해야 하기에 현실적이지 않다. 금액에 대해 쪼개고 합치는 것이 가능하게 하도록, 거래는 복수의 입금과 출금으로 구성된다. 일반적으로 입금은, 이전 거래로부터 받은 큰 금액의 단일 입금이거나, 소액으로 이루어진 여러 입금 값들로 구성되고, 출금은 최대 2개의 출금 값으로 구성된다. 출금 값 중 하나는 상대방에게 주는 지불이고, 만약 입력값대비 잔액이 발생한다면, 송금자 자신에게 되돌리는 출금이 발생한다. 한 거래가 여러 거래들과 연관되고, 그 거래들은 더 많은 거래들..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 8. 지불 입증 간소화

비트코인에서 거래가 발생했을 때, 이에 대한 입증을 하려면, 원칙적으로는 거래정보를 담고 있는 모든 블록들을 가지고 있어야 합니다. 이렇게 모든 정보를 가진 노드를 풀 노드(Full Node)라고 합니다. 1번블록에 거래 A->B가, 5번 블록에 B->C가 있을 때, B->C에 대한 거래가 올바른 지를 검증하기 위해서는, B에게로의 거래였던 선행거래가 담겨있는 1번블록을 봐야하는 것입니다. 풀 노드와 달리, 블록내 거래정보가 없는 블록헤더로만 구성된 블록들을 가지고 있는 '가벼운 노드'인 라이트 노드(Light Node)들도 있습니다. 스마트 폰 등 저장 메모리를 적게 써야하는 기기들이 이런 라이트 노드들이 되는데, 이 노드들이 어떤 거래에 대한 검증을 하려면 풀 노드의 도움을 받아야 합니다, 이 때 앞..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 7. 디스크공간 회수

7. 디스크 공간 회수 코인에 대한 가장 최근 거래가 충분한 수의 블록에 묻히면, 디스크 공간을 절약하기 위해, 그 거래 이전에 발생했던 거래들은 삭제해도 된다. 이미 계산된 블록 해시값이 훼손되지 않으면서 이러한 것이 가능하게 하도록, 거래들의 해시값으로 머클트리(Merkle Tree)를 구성하고[7][2][5], 블록의 해시에는 머클트리의 최상부 루트(root)만 포함되게 한다. 이렇게 함으로써 오래된 블록의 경우는, 트리의 일부 가지를 쳐 낼 수 있기에 크기가 작아질 수 있다. 자식 노드의 해시들은 저장될 필요가 없다. 거래데이터가 없이 블록헤더 단독으로는 크기가 80바이트이다. 만약 블록이 매 10분마다 생성한다고 가정하면, 80바이트 x 6 x 24 x 365 = 4.2MB 정도의 데이터가 매년..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 6. 인센티브

이번 절은, 블록생성에 대한 대가로 주어지는 인센티브(보상)에 대한 얘기입니다. 인센티브 관례상, 블록에 포함된 거래 중 첫 번째 거래는, 해당 블록 생성자에게 새로운 코인이 발행돼서 주어지는, 특별한 거래로 이루어진다. 이렇게 함으로써, 네트워크를 지탱하고 있는 노드들에게 인센티브를 줄 수 있고 또한, 코인을 발행하는 중앙 기관 없이도 신규 코인을 발행해서 유통될 수 있게 된다. 지속해서 일정한 양의 신규 코인을 발행하는 것은, 금을 유통할 수 있게 광부들이 자원을 소비하는 것과 유사하다. 이 경우에는 CPU 동작과 전력이 소비된다. 지금까지 논문을 읽었다면 느끼고 있을 사실이, 이 블록체인망이 유지되기 위해서는 거래를 검증하고 블록을 생성할 성실한 노드들이 많아야한다는 것입니다. 이 노드들은 블록을 ..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 5. 네트워크

이번 장은 거래들이 발생해서, 각 노드들로 구성된 블록체인 네트워크에 전달되서, 어떻게 블록이 생성되는 지에 대한 설명입니다. 논문 본문을 보겠습니다. 5. 네트워크 네트워크의 동작은 다음과 같은 과정으로 이루어진다: 1) 새로운 거래들은 모든 노드에 브로드캐스트된다. 2) 각 노드는 새로운 거래들을 모아 블록에 넣는다. 3) 각 노드는 해당 블록에 대한 작업증명을 찾는 과정을 수행한다. 4) 어떤 노드가 작업증명을 찾았다면, 해당 블록을 모든 노드에게 브로드캐스트한다. 5) 노드들은, 브로드캐스트 받은 블록에 대해서, 블록 내 모든 거래가 유효하고 중복 사용되지 않았을 때, 해당 블록을 승인한다. 6) 노드들은, 그들이 해당 블록을 승인했다는 것을, 해당 블록의 해시를 이용해서 그다음 블록생성을 시작함..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 4. 작업 증명

앞에서, 어떤 이가 모든 블록에 대한 생성권리를 가지고 있다면, 타임스탬프의 순서를 맘대로 바꿀 수 있다 했습니다. 그래서, 이 블록생성에 대한 권리를 공평하게 분배해야하는 얘기까지 했습니다. 이제 어떻게, 블록생성에 관여하는 노드들이 공평하게 그 권리를 가지게 하는 지에 대한 내용입니다. 먼저 논문내용부터 보겠습니다. 4. 작업 증명 피어 투 피어 기반으로 분산된 타임스탬프 서버를 구축하기 위해서는, 신문이나 유즈넷 포스트가 아닌 아담백(Adam Back)의 해시캐시[6]와 유사한 작업 증명(PoW, Proof of Work) 시스템이 필요하다. 작업증명은 sha256같은 해시함수를 사용해서, 연속된 0(zero) 값으로 이루어지는 비트열로 시작되는 해시값을 찾는 과정이 포함된다. 이러한 과정에 걸리는..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 3. 타임스탬프 서버

여기서부터 거래의 이중거래를 막을 수 있는 블록체인 기법이 소개됩니다. 먼저, 타임스탬프에 대한 얘기입니다. 3. 타임스탬프 서버 우리가 제안하는 해결책은 타임스탬프 서버로부터 시작된다. 타임스탬프 서버는, 거래 항목들로 이루어진 블록들에 대한 해시를 취함으로써 타임스탬핑을 하고, 신문이나 유즈넷 포스트처럼[2-5] 그 해시들을 널리 배포하는 작업을 수행한다. 타임스탬프는 그 데이터들이 그 시점에 분명히 해시값들의 입력값으로 존재했었다는 것을 보증해준다. 각 타임스탬프는 그 해시값 안에 이전 타임스탬프를 포함하고, 각각 추가되는 타임스탬프에 의해 강화되는 구조를 가지는 체인을 형성한다. 여기서 얘기하는 타임스탬프는, 실제 시간을 가지고 기록하는 것을 얘기하는 것이아니고, 어떤 작업에 대한 시간적인 일련의..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 2. 거래(2/2)

이제 해시와 서명에 대해 대략 알았으면, 비트코인의 거래에 대한 설명으로 다시 돌아가겠습니다. 논문에 있는 그림을 보겠습니다. 제일 왼쪽에 있는 거래는, 소유자0 --> 소유자1 입니다. 소유자 0이 소유자 1에게 송금을 하는 것입니다. 두번째 그림은 1-->2, 세번째 그림은 2-->3 두번째 그림인 1-->2를 기준으로 해서 보겠습니다. 1은 0로부터 받은 금액을 2에게 보내는 것입니다. 0이 1에 보내는 것은 거래(0 to 1)에 명시되어 있습니다.(제일 왼쪽 그림) 그런데 여기서, 소유자1은 거래(0 to 1)에서 0이 보낸 돈이 자신의 것이라는 것을 증명해야합니다. 즉, 1은 0에게 "돈을 보내시오"하면서 자신의 주소(Addr)을 보냈어야했어고(첫번째 거래인 0 to 1이 발생하기 전에), 0은..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 2. 거래(1/2)

2. 거래 우리는 전자 코인을 “디지털 서명의 체인”으로 정의한다. 각각의 전자 코인 소유자는, 이전(以前) 거래의 해시와 받을 이의 공개키(public key)에 대해 디지털 서명하고 이 서명값을 코인의 끝에 붙여서, 다른 이에게 코인을 넘긴다. 받는 이는 서명에 대한 검증을 통해 해당 체인의 소유권을 확인할 수 있다. 이 부분을 이해하기 위해서는 '해시'와 '서명/검증' 기술에 대해 알아야합니다. 해시 해시(Hash)는 암호학에서 쓰이는 함수의 하나로, 어떤 데이터덩어리를 약속된 크기의 데이터로 변환합니다. 예를 들어 A라는 10KBytes 크기의 파일이 있을 때, 이 파일 전체를 해시함수로 변환하면 256비트(=32바이트) 혹은 512비트 등의 약속된 크기의 데이터로 바꿀 수가 있습니다. 압축 비슷..

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 1. 서론

Bitcoin을 있게 한 전설적인 논문인 Bitcoin: A Peer-to-Peer Electronic Cash System에 대해서 해설해보고자 합니다. 역사에 길이남을 논문들이 그렇듯, 이 논문도 몇 페이지 되지 않지만, 많은 백그라운드 지식과 깊이있는 고민을 해야 이해할 수 있습니다. 이 논문을 처을 접할 때가, 논문이 나오고 난 지 약 2년후인 2011년 쯤이었는데, 참 생각이 기발하다는 것만 느끼고 말았던 기억이 납니다. 이 후 비트코인이 유명세를 타고, 블록체인이 각광을 받고, 비트코인 투자 열풍이 불면서, 문득 이 논문을 다시 한 번 정독을 해야겠다는 생각이 들어서 보고 있는데, 역시 대단하다는 생각이 듭니다. 논문의 내용은 간결한 문체로 되어 있어, 관련된 백그라운드 지식이 없으면 어떤 내..