백서 내용은 반이상 읽었지만 이제부터 어려운 부분이 나오는 거 같네요.
오늘 쓰는 내용부터 '비트코인, 블록체인과 금융의 혁신'이라는 책을 다 읽고 쓰고싶었는데 책에 외계어(?)가 너무 많아서 진도가 잘 안나가네요.ㅎㅎ 혹시나 도움이 될까해서 그 외계어도 꼬박꼬박 읽고 있어서..
언젠가 코딩을 좀 공부하게 되면 분명 도움이 될거라고 생각합니다!(언제가 될지..쯧쯧)
자 예전글 링크하고 시작해볼까요?^^ (오늘 본 @onemotime님의 스팀잇 관련 글처럼 스팀잇이 포스팅 기능을 빨리 업글했으면 좋겠네요.ㅎㅎ)
비트코인 백서부터 시작합니다
비트코인 백서부터 시작합니다(2)
비트코인 백서부터 시작합니다(3)
비트코인 백서부터 시작합니다(4)
비트코인 백서부터 시작합니다(5)
7. 저장 공간 재확보
최근 거래 내역에 있던 돈이 충분히 많은 블록에 의해 묻히게 되면, 지나간 거래 내역은 저장 공간 확보를 위해 버려져도 된다. 블록 해시를 다시 헤집지 않고도 이를 수월하게 하기 위해서는, 거래 내역은 머클트리(Merkle Tree) 구조로 해시가 되며[7][2][5], 머클트리 구조의 루트 부분만 블록 해시에 포함되어야 한다. 오래된 블록은 트리 구조에서 가지를 쳐냄으로써 더 작아지게 되며, 하위 해시는 저장할 필요가 없게 된다.
1) 외계어 같기도 하고 아닌거 같기도 한 머클트리는 뭥미(이거 너무 오래된 표현이죠...)?
처음 백서를 그냥 훑어 읽으면서 거의 이해가 안되었던 것이 이 머클트리였습니다. 그래서 어쩌라고? 라는 말이 절로 나오는.. 그냥 아 블럭에 담기는 용량을 줄이는 기술이구나. 끝. 이렇게 넘어갔었죠.
하지만 이제 저에겐 좋은 스팀잇 스승님들이 계십니다. 제 글에 단골로 등장하시는 두 분의 글 우선 링크합니다.
쉬운 말로 이해하기 쉽게 쓰시는 @twinbraid 님과 어려운 말을 쓰시는 것 같은 이해하기 쉬운 @easyblockchain 님의 글입니다. (두 분 다 참 대단하십니다. 구글에서 머클트리 치면 이 두분의 글이 제일 위에 뜨는군요.ㅎㅎ)
@twinbraid/7mxgzy-01
@twinbraid/5uzvbu-02
@easyblockchain/merkle-trees
머클트리에 관한 내용은 이 두 분의 글로 잘 알 수 있습니다. 물론 여기서도 더 들어가면 뭐가 또 나오겠죠.. 우선은 외계어로 설명하는 걸 알고 싶지는 않습니다. 간단하게 설명하면 모든 거래를 2개씩 묶어서 해싱(암호화), 그 위로 또 2개씩 묶어서 해싱, 이 과정을 거쳐 결과를 하나로 만든다는 것입니다. 해시의 쓰임새는 저번 글에서도 언급했듯이 입력값이 같으면 출력값도 같다는 것입니다. 그러니 이렇게 묶는다는 것은 모든 입력값을 가지고 있다는 것으로 이해할 수 있겠죠. 입력값이 하나라도 달라지면 그 위의 값들은 다 달라질 것이구요.
흐음 글쓰기 능력키우기의 일환으로 예를 하나 들고 싶은데...없어요.ㅋㅋㅋㅋ OTL(언제적 거니 이거...)
이해나 제대로 하죠. 2개를 묶어서 하나를 만드는 과정을 반복하여 거래(transactions)가 얼마나 많이 있건 하나로 묶을 수 있고, 이렇게 간단하게 만들어 블럭헤더에 올리면 어마어마한 양의 데이터를 줄일 수 있는 기술이다. 이 기술을 통해 라이트웨이트 노드(Lightweight node)를 구현할 수 있다 정도로요. 그리고 개별적인 거래에 대한 검증은 풀노드에게 중간단계에 대한 단서를 요청해서 전체 거래내역을 다 검증할 필요없이 그 갈래에 대한 검색만으로도 검증할 수 있게 해준다.
거래 내역이 없는 블록 헤더는 약 80바이트 정도이다. 매 10분마다 블록이 생성된다고 가정할 경우, 80바이트 * 6 * 24 * 365 = 4.2MB가 매년 소요된다. 2008년 기준으로 시중에 판매되고 있는, 2GB메모리가 장착된 컴퓨터 시스템과, 매년 1.2GB가 증가할 거라 예측한 무어의 법칙에 의하면, 블록 헤더가 메모리를 점유하고 있어야 하더라도 문제가 되지 않는다. (역자 주: 무어의 법칙은 본문과 달리 18개월에 두 배가 된다는 예측이다. 즉, 매년 약 1.59배로 증가)
7번 저장 공간 재확보에 관한 내용은 이 머클트리의 정리로 마무리할 수 있을 거 같습니다. 매년 증가하는 용량에 대해서는 지금 우리가 쓰는 컴퓨터만 봐도 저 때와는 엄청나게 달라졌으니 딱히 언급할 게 없네요. 사실 여기서는 블록헤더에 관한 내용이 나올 수 있습니다. 블록 헤더와 저장공간에 대한 내용은 이제까지 링크한 글에 어느 정도 들어가있고 더 어려워지는 내용은 따로 쓰겠습니다. 우선 백서만 집중할게요.
8. 지불 입증 간소화
굳이 전체 네트워크 노드를 쓰지 않더라고, 돈이 지불된 사실을 입증하는 것이 가능하다. 사용자는 가장 긴 작업증명 체인의 블록 헤더의 사본만 갖고 있으면, 자신이 가장 긴 체인이라 확인할 때까지 네트워크 노드들에게 요청하고, 그 거래 내역이 기록된 블록에 연결된 머클트리 가지만 받아오면 된다. 그는 스스로 거래 내역을 확인할 수는 없고, 체인에 연결되어 네트워크 노드가 그것을 승인했는지, 이후에도 계속 블록이 추가로 확증되어 승인된 지로 알 수 있다.
위에 머클트리 설명에서 나오는 라이트웨이트 노드(Lightweight node)에 연계되는 내용입니다. 여기서 나오는 또다른 용어가 SPV(Simplified Payment Verification)입니다. 비트코인 뿐만 아니라 다른 코인들 알아볼 때도 자주 등장하는 개념입니다.
예전 글에 링크한 @twinbraid 님의 노드 관련글로 복습하고 갑시다.
@twinbraid/3ncb5r
위에 머클트리를 생각하면서 정리해보면, 일반적으로 풀노드는 사용하기 어렵습니다. 그래서 스마트폰에서도 쓸 수 있는 라이트웨이트 노드를 많이 쓰게 되는데요. 이 라이트웨이트 노드에서 사용하는 방식이 저 SPV입니다.(그래서 SPV 노드 혹은 클라이언트)라고 하는 거겠죠. 위 백서에서 언급했듯이 거래 내역이 없는 블록 헤더는 약 80바이트 정도로 양이 많지 않습니다. 이 블록 헤더 안에 위에서 공부한 머클트리 루트가 들어가는 구조이죠.
하나의 거래에 관해 검증한다고 생각해봅시다.
그 거래는 해싱되어 위 그림처럼 올라가는 머클트리의 구조로 루트안에 담겨져 있을 것입니다. 이 머클트리 루트는 블록 헤드안에 저장되어 하나의 블록에 들어가있을 것이고요. 그럼 라이트웨이트 노드는 우선 현재 자신이 가지고 블록 헤드의 사본(전 블록의 해시값이 되겠죠?)이 옳은 것인지(이 블록이 가장 긴 체인에 연결되어있는 것인지) 확인하여 문제가 없음을 확인합니다. 그리고 그 거래 내역이 기록된 블록의 머클트리의 가지만 풀노드에게 요청하여(@twinbraid 님의 설명에 따르면 토너먼트 상대) 이 거래가 맞는 것인지, 전체 네트워크에서 승인된 것인지를 알 수 있다는 내용입니다.
혹시 제가 다르게 이해한 것이라면 꼭 댓글 부탁드립니다~
이렇게 정직한 노드들에 의해 네트워크가 제어되는 한 거래 인증은 신뢰할 수 있지만, 공격자에 의해 네트워크가 압도당하면 취약하다. 네트워크 노드들은 스스로 거래 내역을 입증할 수 있지만, 단순히 공격자에 의해 과점된 네트워크로 거래를 조작하고 유지함으로써 무력화될 수 있다. 이러한 방법을 보호하는 전략으로는 사용자의 소프트웨어에서 블록 전체를 다운로드 받고 모순임이 확증된 유효하지 않은 블록을 발견했을 때 네트워크 노드들이 경고 알림을 받는 것이다. 잦은 지불을 받는 사업자의 경우에는 아마도 자체 노드에서 독립된 보안 체계와 빠른 인증 방법을 더 원할 것이다.
자 다시 51% 공격에 대한 내용이 나왔네요. 확실히 비트코인 블록체인은 작업 증명이라는 합의 알고리즘을 가지고 있기 때문에 정직한 노드의 수가 중요한 거 같습니다. 중국에 채굴자들이 많다는 것은 항상 위협이 되는 상황이 되겠지요. 이 51% 공격에 대한 내용은 앞에서 다뤘지만 간단히 요약하면, 공격자들이 거래를 조작하고 항상 참으로 인식되는 가장 긴 체인을 만들 수 있다면 이런 거래 인증은 신뢰할 수 없게 된다는 것입니다.
경고 알림은 시스템적으로 지원되는 것인지 확실히 모르겠는데 @maa 님의 글,
@maa/scailing-war-1-bitcoin-core-1
10번에 보면 2016년 11월에 없어졌다는 게 이 시스템이 아닌가 합니다. 지금 보고 있는 비트코인 관련 책을 다 읽으면
첨언을 하든지 하겠습니다.
@maa 님의 글은 좀 어려운데 좋은 정보들이 많으니 꾹 참고 끝까지 읽어보시길 바랍니다. 지금 당장 모르는 이야기여도 언젠가 다 듣게 됩니다. 비트코인만 해도 백서 뒤로 할 게 어마어마하게 많다는 걸 느끼네요.ㅎㅎ
다음 편이 비트코인의 핵심이라고 많이 들었던 UTXO(Unspent Transaction Output)에 관한 내용입니다.
사실 중요하다고 말만 들었지 왜 중요한지도 잘 모르네요.ㅎ 그냥 비트코인을 다른 코인들과 다르게 만들어 주는 중요한 특징이라는 거 밖에는 ㅎ
주말입니다!!! 드디어 글을 좀 쓸 수 있을 거 같네요.ㅎㅎ
점심 먹고 달려 볼까요~~