8_마무리.md 10 KB

부록

비트코인의 업그레이드

현재 비트코인은 크나큰 변화를 앞두고 있다. 아마 독자 여러분이 이 글을 읽을때쯤 그 이 모든 변화가 끝나있을 것이라고 생각하지만 이 변화의 핵심키워드는 "현재 비트코인이 처리할수 있는 거래의 양이 너무 적다."라는 것이다.

비트코인은 약 10분에 하나씩 블록이 생성되고 하나의 블록에는 거래 종류에따라 1000~2000건의 거래가 포함된다. 이를 초당 처리가능한 거래로 계산하면 매초 2~3건정도의 거래만 처리할 수 있다는 것이다. 비트코인이 처음 나왔을때는 이정도의 거래 처리량으로도 모든 거래를 감당할 수 있었지만 지금은 상황이 변했다. 전 세계에서 활발하게 비트코인을 사용하고 있으며, 초당 2~3건의 거래처리량으로는 모든 사용자들이 만족스럽게 사용하지 못하고 심지어는 수수료를 적게낸 거래들은 일주일이 지나도 블록속에 포함이 되지 못하는 사건도 종종 발생하고 있다. 이러한 상황을 해결하기위해 두가지 방안이 제시되었는데, 하나는 거래 하나가 차지하는 크기를 줄여 하나의 블록에 더 많은 거래가 들어가는 방법과, 나머지 하나는 블록의 크기 자체를 크게 늘려 하나의 블록에 더 많은 거래가 들어가도록 하는 방법이다.

2017년 7월 현재는 비트코인에서 어떻게 업데이트를 해서 이러한 문제를 해결할까?의 정점에 달한 시기이다. 그리고 그 핵심은 하나의 블록에 더 많은 거래를 들어가게 해주는 Segwit과 블록의 크기를 얼마나 키울까? 이다. 이제부터 필자 기준으로 실시간으로 진행되는 비트코인의 역사에대해 생생히 알아보도록 하자.

SegWit

모든 트랜젝션의 입력부분에는 이전 트랜젝션의 출력부분에 명시된 주소의 소유주가 나임을 명시하기 위해 공개키와 함께 디지털 서명이 포함된다. 이렇게 하나의 공개키와 디지털서명 세트는 264Bits의 공개키와 568Bits의 전자서명으로 하나의 입력당 트랜젝션에서 총합 104Bytes의 크기를 차지한다. 일반적으로 입력이 하나인 트랜젝션의 크기가 260Bytes정도 된다는점을 생각해보면 트랜젝션 데이터의 반정도가 전자서명에 사용된다고 보면된다. 하지만 실제 블록체인에서 아주 옛날에 발생한 거래를 증명할필요는 없는데 (증명하지 않아도 블록체인이 그 거래내역이 참임을 보여준다.)(실질적으로 증명이 필요한부분은 거래 데이터를 블록체인에 넣을 때 뿐이다.) 모든전자서명 데이터를 가지고 있을 필요가 있을까? 라는 의문에서 시작한것이 바로 Dr.Pieter Wuille 가 제시한 SegWit이란 방법이다.

SegWit은 분리를 의미하는 Segrated와 목격자(전자서명)을 의미하는 Witness의 합성어로, 거래데이터에서 목격자를 분리해냈다는 의미로 지어진 이름이다. SegWit은 이름이 가진 의미 그대로 거래의 생성및 전파 P2PKH라고 언급한 거래방식에서 <sig> <PubKey>로 구성되어있는 입력 스크립트 부분이 "이 부분은 사용하지 않겠다."라는 의미가 담긴 0으로 바뀐 P2WPKH란 거래방식을 사용한며, (P2SH도 비슷한 방법으로 P2WSH로 바뀌었다.) 이렇게 입력부분에서 빠진 전자서명과 공개키는 Witness란 이름으로 불리게 된다.

이러한 트랜젝션에서 디지털서명과 관련된 데이터가 빠진 SegWit이 적용된 비트코인에서 거래는 다음과같이 이루어진다.

  1. 비트코인 지갑에서는 P2WPKH, P2WSH에 맞게 거래데이터를 생성한뒤 그에대한 Witness Data를 따로 첨부하여 다른 블록에 전파한다.
  2. 채굴자는 이러한 거래데이터를 모아서 블록을 만들기 시작한다.
  3. 각 트랜젝션으로 머클트리를 만드는 과정처럼 각 트랜젝션별 Witness Data에 대한 머클트리를 만들어서 그 머클루트에대한 정보를 코인베이스(블록의 구조 참고)에 입력한다.
  4. 작업증명에 맞게 채굴을 한다.
  5. 완성된 블록과 Witness를 전파한다.
  6. 이 블록과 Witness를 받은 노드는 블록에대한 검증절차를 마친 후 다른 노드로 전파한다.
  7. 당신의 거래는 블록체인에 포함되었다!
  8. 특정기간이 지나 Witness가 필요없다 판단되면 삭제하여 저장공간을 확보한다.

이같은 과정을 통해 작동하는 SegWit은 두가지 장점을 지니게 되는데, 하나는 블록체인에 포함되는 데이터중 전자서명이 빠져 같은 1MB라는 제한을 가진 블록 안에 이전대비 최소 1.75배 최대 4배정도 많은 거래를 저장할 수 있어졌다는 점이고, 나머지 하나는 이중지불 문제의 가능성을 해결할 수 있어졌다는 점이다. 무슨말인가 하니, 일단 권고사항으로 입력스크립트출력스크립트부분에는 표준거래에 맞는 데이터만 삽입될 수 있지만 이는 권고사항이지 강제사항이 아니다. 문제는 스크립트부분이 변경되면 트랜젝션 전체 데이터의 해시값으로 정해진 TxID가 바뀌게 되고 TxID가 바뀌면 컴퓨터는 같은 내용의 거래라도 다른 거래로 인식하기에 만약 이러한 약점을 잘 이용해서 TxID랑 사소한 데이터만 다르지만 내용은 똑같은 서로다른 두 거래가 모두 블록체인에 포함되면 이중지불의 완성이다. 물론 이건 프로그램 버그를 잘 이용해야되서 가능성일뿐 실제 방법이 알려진것은 아니다. 다만 SegWit을 도입하면 이러한 가능성도 차단할 수 있어 더 안전할것으로 생각되어지고 있다.

소프트포크? 하드포크?

현재 이 SegWit을 도입하는 여러가지 제안이 나와있다. 하지만 그 도입방법에 대해서는 의견이 많이 갈라져서 현재 BIP91 방법과 BIP148 방법, 마지막으로 BCC가 존재한다.

일단 Segwit 2X라 불리는 BIP91은 최근 블록체인에 추가된 336개의 블록중 80%에 해당하는 269개의 블록이 SegWit을 지지한다는 표시가 있으면 그 시점을 기준으로 366블록이 생성될때 (약 2.3일에 해당하는 기간이다) 소프트포크가 발생해 그 후부터는 SegWit에 맞게 생성된 블록만 인정하고 기존 블록은 거부하는 방법이다. 원래 이 방법은 최소 95%이상의 블록이 지지해야 실행되도록 할 예정이었지만 생각보다 저조한 지지율과 함께 기 기준선을 80로 낮추었다. 다만 여기서 끝이 아니고 만약 성공시에는 11월에 블록의 최대 크기를 1MB에서 2MB로 늘리는 방안도 같이 포함되어있다. 다만 여기서 문제가 발생하는데 11월에 시행하는것은 하드포크이기에 만약 이때 모든 채굴자가 2MB상향에 대해 동의하지 않으면 비트코인은 두조각으로 나눠져 2MB블록을 생산하는 비트코인과 1MB블록을 생산하는 비트코인, 총 2개의 비트코인이 탄생하게 된다는 문제점을 가지고 있다.

그 다음으로 BIP148은 UASF로 알려져있는데, 만약 8월 1일기준으로 SegWit이 적용되어있지 않으면 하드포크를 감행해 비트코인이 Segwit을 적용한버전과 적용하지 않은 버전으로 나눠진다는 것이다. 이때는 사실 큰 문제가 발생하는데 두가지 버전의 비트코인이 Segwit을 제외하고 모든 규격이 같기때문에 이때 비트코인을 사용하면 SegWit버전의 블록체인과 기존 버전의 블록체인 양쪽다에서 비트코인을 사용한것이 되는 (혹은 한쪽은 사용하지 않은것이 되는) Replay Attack이라는 현상이 발생할 수 있다. 비트코인을 받는 입장에서는 어느쪽을 기준으로 거래가 승인되었을을 확인해야되는지 매우 까다로운 작업이 될것이다. 만약 BIP91이 성공적으로 실행되면 BIP148은 실행되지 않는다.

마지막으로 BCC는 위 사건과는 관계없이 Bitcoin Cash(BCC)라는 이더리움 클래식처럼 새로운 가상화폐를 만든다는 내용이다. 이 BCC는 비트코인과 다른 통신체계를 가지고 있어 비트코인 네트워크와 별개의 네트워크를 가지며 8월 1일에 기존 비트코인 블록체인을 복사해와 사용할 예정이므로 8월 1일전에 소유하고있는 비트코인은 BCC의 블록체인에도 똑같이 기록되어 있어 기존 비트코인 사용자는 공짜돈이 생긴다! 만약 2017년 8월 1일 이전에 소유하고 있던 비트코인이 있었다면 BCC클라이언트를 설치해봐 잔액이 있는지 한번 확인해보도록하자. 비록 비트코인만큼의 시세는 안나올것으로 예상하지만 어느정도 공짜돈이 생길것이다.

후기

이 책 전체에 걸쳐 비트코인에서 거래가 어떻게 이루어지는지 한번 살펴보았다. 비트코인에 사용된 기술들은 정말 경의롭다. 대부분의 기술은 비록 이전부터 존재해왔던 것이지만 그걸 조합해서 그 자체로 신용가능한 데이터를 생성해내는 과정은 전세계가 주목할 정도이고, 이에 영감을 받고 새로 탄생한 프로젝트는 단순한 채팅프로그램에서 공인인증서의 대안까지 날이갈수록 놀라워지고 있다. 그뿐 아니라 비트코인 그 자체도 화폐로서의 역할을 점차 찾아가 결제대행사(카드사)없는 인터넷 결제수준은 이미 그 역할을 충실히 하고있는것 같다. 하지만, 아직 한국은 비트코인의 혜택을 제대로 맛보지 못하는것 같다. 비트코인 그 자체는 거래소에서 사고팔며 주식의 대안으로서 활용할뿐이고, 비트코인에 사용된 기술들은 해외에서 응용되어 완성된 프로그램을 수입해 적용시키는 정도밖에 없는것 같다.

필자는 그 원인이 아마 제대로된 문서의 부재와 언어의 장벽이 아니었을까?라는 생각을 블로그에 "원리부터 파악하는 비트코인"을 작성한 그 순간부터 이 책의 후기를 적는 지금까지도 계속 하게된다.

이 책을 다 읽은 여러분은 무엇을 생각하게 되었는가?

그 답을 필자는 들을 수 없겠지만, 뭔가 세상을 자극할 즐거운 아이디어였으면 좋겠다는 작은 바람을 가지며 이 글을 마친다.