[블록체인 스터디 노트 #6] Bitcoin, 그리고 그 이후

안녕하세요. 이글아이(@eaglekeeneye) 입니다.

이번 글은 지난 글에 이어진 이야기입니다. 아래의 링크부터 차례로 먼저 읽고 오시길 권장 드립니다.

0) 이야기 순서


우선 "1) 블록체인의 체인의 의미" 에서 체인이 무엇인지, 비트코인의 분기와 그 의미를 짚고 넘어가겠습니다.

마지막으로 "2) 하드포크의 사례들" 에서는 하드포크된 토큰들 역사를 간략하게 설명하겠습니다.

1) 블록체인의 체인의 의미


( a ) 체인이란?


[블록체인 스터디 노트 #5] Bitcoin은 어떻게 신뢰를 얻게 되었나 2에서 비트코인의 현재 해시값에 이전 해시값을 포함하는 것을 설명드렸습니다. 다시 말해, 현재 블록을 생산하고자 하면 이전 블록의 해시값이 필요하며 현재 생산한 블록은 이전 블록과 체인처럼 연결이 됩니다. 그래서 비트코인의 신뢰성을 갖게 해 주는 기술이 블록체인 기술 이라고 언급한 적이 있습니다.

그렇다면 이 체인이 분리되는 것은 무슨 의미일까요? 위의 이미지처럼 잘 합의를 보면서 한 개의 체인으로 진행하다가 두 개의 체인으로 분리가 되는 것을 볼 수 있습니다. 제가 사람 A에게 비트코인을 송금했는데 하필 체인이 그 시점에 나뉘게 되어 어떤 체인은 그 거래내역을 제대로 포함하고, 어떤 체인은 조작된 거래내역을 포함할 수 있을 것입니다.

( b ) 비트코인의 분기


비트코인도 체인이 나뉘는 분기가 일어납니다. 채굴자들이 블록을 생산할 권한은 nonce 값을 찾아야만 주어집니다. 예를 들어, 현재 해시값의 앞의 4자리까지 연속으로 '0'이 나오게 하는 nonce 값을 찾아야 하는데, 이를 만족시키는 nonce 값은 유일하지 않습니다. 서로 다른 nonce 값이 해시값의 앞의 4자리까지 연속으로 '0'이 나오게 하는 경우도 있습니다. 바로 이러한 nonce 값을 채굴자들이 채굴 경쟁을 해서 동시에 찾은 경우를 이미지와 함께 설명하겠습니다.

( i ) 비트코인의 채굴 해시값 전파


위의 이미지와 같이 채굴에 참여하는 노드가 A, B, #1~#9가 있다고 가정해봅시다. (또한 모든 노드의 CPU Power가 동일하다고 가정합시다) N 번째 블록에서 노드 A와 노드 B는 각각 Hash 값을 찾았다고 가정해봅시다. 그러면 해시값을 찾았으니 이 값을 전파해야 합니다. 노드 A의 해시값을 전파받아 동일하게 유지되고 있는 노드가 #1~#3이며, 노드 B의 해시값을 전파받아 동일하게 유지되고 있는 노드가 #4~#10이라고 가정해봅시다.

( ii ) 비트코인의 채굴 분기 발생


다음은 노드 #7 에서 (N+1) 번째 블록의 해시값을 찾았습니다. 그 다음은 이미지에서 보다시피 블록체인의 분기가 발생합니다. 이때 노드 A와 동일하게 유지되고 있는 노드 #1~#3 는 계속 노드 A의 해시값을 가져가는 것은 의미가 없습니다. 왜냐하면, 노드 A의 거래기록이 무효가 되었기 때문입니다.

이미지에서 보이듯이 노드 A, B, #1~#9 모두 동일한 (N-1) 번째 부모 블록 을 가졌지만, 노드 #7 이 (N+1) 번째 블록의 해시값을 찾음으로써 노드 A, #1~#3이 가진 블록은 고아 블록 이 되었습니다.

여기서 알아야 할 것은, 노드 B의 Hash 값이 다음 체인으로 이어지기 쉬웠다는 것입니다. 이것은 노드 B의 Hash 값을 받은 노드 #4~#9의 수가 노드 #1~#3 더 많았기 때문입니다. 만약 노드 A 나 노드 #1~#3 중의 하나가 hash 값을 찾았다면 노드 B 의 블록이 무효가 됩니다.

( iii ) CPU Power 를 독점하고 있는 노드


위의 예시에서 노드 A의 CPU Power가 다른 노드에 비해 월등하게 높아서, 어느 난이도의 문제라도 독보적으로 블록을 생산할 수 있다고 가정합시다. 노드 A 만이 Hash 값을 계속 찾아 블록을 생산하고, 체인을 이을 블록은 대부분 노드 A에 의해 생산이 될 것입니다.

( c ) 블록체인의 업그레이드


블록체인의 업데이트는 크게 소프트 포크(Soft Fork)하드 포크(Hard Fork) 로 나뉩니다. Fork는 밥 먹을 때 쓰는 식기의 포크(Fork)가 맞습니다. 블록체인이 분기되는 것이 포크 모양을 닮았기 때문입니다.

그런데 소프트 포크는 "업데이트되는 것", 하드 포크는 "체인이 분기되어 찢어지는 것"이라고 혼동할 수 있는데 그것은 정확한 의미는 아닙니다. 각각의 개념들에 대해 간략하게 짚고 넘어가겠습니다.

( i ) 소프트 포크(Soft Fork)와 하드 포크(Hard Fork) 란?


우선 Investopia Soft Fork를 인용해보겠습니다.

In terms of blockchain technology, a soft fork (or sometimes softfork) is a change to the software protocol where only previously valid blocks/transactions are made invalid. Since old nodes will recognize the new blocks as valid, a softfork is backward-compatible. This kind of fork requires only a majority of the miners upgrading to enforce the new rules, as opposed to a hard fork which requires all nodes to upgrade and agree on the new version.

그 다음은 Investopia Hard Fork를 인용해보겠습니다.

A hard fork (or sometimes hardfork), as it relates to blockchain technology, is a radical change to the protocol that makes previously invalid blocks/transactions valid (or vice-versa). This requires all nodes or users to upgrade to the latest version of the protocol software. Put differently, a hard fork is a permanent divergence from the previous version of the blockchain, and nodes running previous versions will no longer be accepted by the newest version. This essentially creates a fork in the blockchain: one path follows the new, upgraded blockchain, and the other path continues along the old path. Generally, after a short period of time, those on the old chain will realize that their version of the blockchain is outdated or irrelevant and quickly upgrade to the latest version.

위에서 소프트 포크와 하드 포트의 극명하게 다른점을 아래와 같이 정리하겠습니다.

  • 소프트 포크(Soft Fork): 소프트웨어 업그레이드는 이루어졌지만, 기존 버전의 노드는 포크 이후의 새로 생성된 블록을 인식할 수 있음(Backward-compatible)

  • 하드 포크(Hard Fork): 소프트웨어 업그레이드는 이루어졌지만, 기존 버전의 노드는 포크 이후의 새로 생성된 블록을 인식할 수 없음(Non backward-compatible)

( ii ) 소프트 포크(Soft Fork)와 하드 포크(Hard Fork)를 이미지로 표현해보자


우선 위의 소프트 포크의 이미지를 보시면 포크가 발생하고 나서 새로운 버전으로 업그레이드한 노드와 기존 버전의 노드 모두 이전 버전의 블록을 인식할 수 있으며, 버전을 업그레이드하지 않은 노드 역시 업데이트를 하지 않아도 무리 없이 유지할 수 있습니다.

반면에 하드포크의 이미지를 보시면 포크가 발생하고 나서, 새로운 버전으로 업그레이드한 노드는 이전 버전의 블록을 인식할 수 없으며, 버전 업그레이드하지 않은 노드만 인식이 가능합니다.

만약에 모든 노드가 새로운 규칙을 따르기로 결정해서 모든 노드가 새로운 버전으로 업그레이드를 한다면 커뮤니티는 나누어지지 않습니다. 하지만 합의를 보지 못하면 두 커뮤니티는 찢어지게 되어 서로 다른 체인 위에 노드를 유지하게 됩니다. 하드포크로 인해 커뮤니티가 분리된 대표적인 예는 Bitcoin과 Bitcoin Cash 의 하드포크가 있습니다.

예를 들어, 여기에 만 원짜리 지폐 구권과 신권이 있습니다. 여태껏 구권 지폐를 잘 써오다 한국은행에서 신권을 발행합니다. 하지만 신권을 쓰든 갖고 있던 구권을 그대로 쓰든 어디를 가든 똑같은 만 원짜리 지폐로 이용할 수 있습니다. 이것을 소프트 포크에 비유하겠습니다. 굳이 신권으로 바꾸지 않아도 문제없이 사용할 수 있기 때문입니다.

하지만 한국 정부에서 만 원짜리 구권 지폐는 현 시각부터 무효가 될 것이니 돈을 쓰고 싶으면 신권으로 모두 교환하라고 규제합니다. 이때부터가 하드포크가 일어난 것입니다. 이제 구권을 한국에서 사용할 수 없기 때문입니다. 보통은 구권을 신권으로 교환하여 쓰게 됩니다.

그렇다면 만약에 한국 내에 A 지역에서 구권을 쓰기 위해 한국 정부의 방침에 반대하게 되면 어떨까요? 이 경우는 커뮤니티의 분리가 불가피합니다. A 지역은 구권을 사용하기로 하며, 아예 한국으로부터 독립국을 선포합니다. 신권을 사용하고자 하는 사람은 A 지역에서는 사용할 수 없으며, 반대로 A 지역 사람의 구권은 한국 내에 그 화폐를 사용할 수 없게 됩니다. 물론 실제 이럴 경우 한국 정부가 물리력을 행사해 참교육을 시전하게 것입니다

2) 하드포크의 사례들


다음은 유명한 토큰들의 하드포크 사례입니다. 간단한게 어떤 사건이 있었고, 왜 하드포크를 단행하게 되었는지 정리하겠습니다.

( a ) Ethereum (ETH) & Ethereum Classic (ETC)


이더리움은 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)에 의해 개발되었으며, DAO (Decentralized Autonomous Organization)가 구동되고 있었습니다. DAO 는 해석하자면 탈중앙화 자율조직이며, 어떤 조직도 소유하지 않고 자율적으로 합의된 프로세스에 따라 조직을 운영하고 있었습니다.

하지만 DAO contract에는 취약점이 있었는데, 바로 split 함수를 이용하여 해커들이 무단으로 이더리움을 인출해갔습니다. DAO token을 이더리움으로 환불해가는 기능인데, 환불과정에서 이더리움을 얻고 DAO token의 잔고가 바로 반영되지 않는 취약점을 이용한 것입니다. 인출해간 이더리움은 약 360만 개 정도이며, 당시 전체 이더리움의 10%에 해당하는 양이었습니다.

이에 따라 이더리움 재단은 해커들이 돈을 인출해가기 전에, DAO token 보유자들에게 이더리움이 돌아가게 하는 하드포크를 진행하였습니다. 2016년 7월 20일 1,920,000번째 블록에서 하드포크를 진행하였습니다. 하드포크를 진행한 이더리움에 비탈릭 부테린을 포함한 각종 암호자산계의 유명인사들이 지지하였지만, 업데이트를 거부하고 기존의 체인을 유지하기로 한 사람들도 존재하였습니다. 이때부터 하드포크를 진행한 체인은 이더리움, 하드포크 없이 잔류한 체인은 이더리움 클래식(Ethereum Classic, ETC) 이 되었습니다.

이더리움의 역사에 대해서는 추후에 자세하게 다루도록 하겠습니다.

( b ) Bitcoin (BTC) & Bitcoin Cash (BCH) & Bitcoin SV (BSV)


( i ) 비트코인 캐시의 (Bitcoin Cash, BCH) 의 탄생


2009 년부터 비트코인이 채굴되기 시작하면서, 서서히 많은 사람이 비트코인을 이용하여 거래하기 시작하였습니다. 이에 따라 2013년부터 비트코인의 거래량이 급증하여 비트코인의 네트워크가 이 많은 거래량을 담지 못하게 되는 상황에 이르렀습니다. 비트코인은 이러한 확장성(Scalability) 문제가 계속되어왔습니다.

이러한 결제속도의 한계를 해결하기 위해, 더 많은 거래기록을 담기 위해 기존의 블록 크기 1MB에서 2MB 늘리는 방안이 나왔습니다. 참고로 1MB는 1초당 7개의 거래를 담을 정도로 매우 작은 용량입니다. 다른 방안으로는 Segwit (Segregate Witness) 라는 방안으로, 전자서명 부분을 비트코인 스크립트 부분에서 제거하고 Segregate Witness 부분에 따로 담는 방법입니다. 이와 같은 방식은 같은 1MB 크기에 대략 2~4MB를 늘린 것과 같은 효과를 낼 수 있다고 합니다.

Bitcoin Core 팀은 Segwit 업그레이드를 제안하였고, 채굴자들이 활성화를 동의하면 진행하고자 하였으나 비트코인 채굴기의 큰손이자 비트코인의 최대 해시파워를 보유한 Bitmain의 대표인 우지한(?忌寒, Jihan Wu) 의 반대로 무산되었습니다. 우지한을 비롯한 중국계 채굴업계는 블록 크기를 늘림으로써 확장성을 늘리기를 희망하였습니다.

블록 크기가 커지면 한 번에 더 많은 거래내역을 담을 수 있는데, 대신에 블록의 전파속도가 지연되고 고아 블록이 많이 생겨난다는 단점이 있습니다. 그럼에도 채굴업계는 Segwit 업그레이드에 강한 불만을 느끼고 있었습니다. 표면적으로는 Segwit 이 근본적으로 거래 속도를 해결하지 못하면서 Segwit 에 의한 해결되지 못한 공격 가능성 때문에 보안이 취약해진다는 입장이었습니다. 실질적으로 채굴업계들이 Segwit 을 반대한 이유는 채굴량을 늘리는 프로그램인 ASIC boost 라는 기술을 사용할 수 없었기 때문이라는 의견도 있었습니다.

비트코인 코어 측과 채굴업계는 이 큰 다툼이 있었으며, 결국 Segwit 과 함께 블록 크기를 2MB로 2배 늘리는 방안인 Segwit2x 를 진행하기로 뉴욕에서 합의를 보았습니다. 그러나 2017년 8월 1일, 우지한을 주축으로 많은 중국계 채굴업체들의 주도로 블록 크기를 기존의 1MB에서 8MB로 높인 비트코인 캐시(BCH)만들어 하드포크를 진행했습니다. 비트코인의 478,558번째 블록에서 비트코인 캐시의 하드포크가 발생했으며, 이때 비트코인 보유자는 1:1 비율로 비트코인 캐시를 에어드랍 받았습니다.

( ii ) 비트코인 사토시 비전의 (Bitcoin Satoshi's Vision, BSV) 의 탄생


가장 최근에는 암호자산 시장의 가격폭락을 크게 시켰던 주범인 비트코인캐시 해시 전쟁이 있었습니다. 우선 비트코인 캐시는 2018년 4월에 블록 크기를 8MB에서 32MB로 증가시킨 비트코인 ABC 라는 하드포크를 진행하였습니다.

그리고 2018년 11월 16일 비트코인 캐시의 업그레이드 방향에 대한 이견이 비트코인 ABC 진영비트코인 SV 진영 으로 갈렸습니다. 비트메인의 대표 우지한, 비트코인닷컴의 대표 로저 버(Roger Ver)비트코인 ABC 진영이고, 자기 자신을 사토시 나카모토라고 주장하는 크레이그 라이트(Craig Wright)비트코인 SV 진영으로 이루고 있었습니다.

비트코인 캐시 ABC 진영은 스마트 계약 솔루션이 포함된 새 프로토콜을 도입하기를 원했고, 비트코인 캐시 SV 는 기존의 블록 크기 32MB에서 128MB로 확장하기를 원했는데 이것이 합의를 이루지 못했습니다. 기존의 비트코인-비트코인 캐시의 하드포크와 달리 두 진영은 비트코인 캐시의 뒤를 잇기 위한 해시 전쟁을 벌였습니다. 쉽게 말해 해시 파워 51% 점유율 이상을 확보하여 비트코인 캐시를 자신의 진영으로 끌어들이려 하였습니다.

SV 진영은 비트코인의 채굴해시를 끌어다 쓰기도 하였고, ABC 진영은 추가로 엔트마이너 S9 채굴기 9만여 대를 도입하여 대응하였습니다. 이 과정에 비트코인의 해시파워가 감소하여 투자자들의 불안으로 가격이 크게 하락하였습니다. 초반에는 SV 진영이 유리하는 듯하였으나 전쟁의 승리는 ABC 진영으로 돌아갔으며, 해시 전쟁 12일 만에 크레이그 라이트는 비트코인 SV를 따로 만들겠다고 선언하여 사실상 비트코인 캐시의 후계자 자리에 항복선언을 하였습니다.

3)결론


지금까지 Bitcoin이 생기고 나서 그 이후의 하드포크에 관해 설명하였습니다. 체인의 개념과 소프트포크/하드포크의 개념과 하드포크의 사례를 정리하였습니다. 위에 언급한 하드포크의 사례 중 비트코인 캐시의 해시 전쟁을 통해 보듯이 "탈중앙화"의 취지에 맞지 않게 채굴해시를 독점한 소수의 권력의 민낯을 볼 수 있었습니다. 근본적으로 POW (Proof of Work) 방식의 합의는 채굴해 시를 독점한 소수의 권력에 휘둘리기 쉽다는 것을 볼 수 있었으며, 위의 과정에서는 토큰의 홀더 의사 반영은 되지 않았습니다.

시리즈를 시작하면서 이번 포스팅을 마지막으로 Bitcoin의 이야기를 마무리합니다. 다음 포스팅부터는 프로그래밍 가능한 토큰 Ethereum에 대한 포스팅을 시작하겠습니다.

4)참고자료 및 각주


참고문헌:

각주:


긴 글 읽어주셔서 감사합니다.
여러분의 팔로우+업보팅+리스팀은 저에게 힘이 됩니다.


Sponsored ( Powered by dclick )
[보드게임] 음양의 조화를 이뤄라! 젠 마스터 개봉기!

안녕하세요 여러분! 오늘은 <젠 마스터>라는 게임의 간단 개봉기입니다! 젠 마스터는 이미 존재...

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center