Bitcoin Scaling

Published: by Creative Commons Licence

  • Categories:

Bitcoin Scaling

Bitcoin Scaling Problem

본 포스트는 DNext 2nd Crypto Night 강연 내용과 강의 자료를 바탕으로 작성하였다.

비트코인 확장성 문제란 비트코인 네트워크가 처리할 수 있는 거래량 제한을 효과적으로 늘리기 위한 방법을 찾는 문제이다.

비자의 TPS1는 2000이고 페이팔의 TPS는 115이다. 그러나 비트코인의 TPS는 7이다. 비트코인에서 TPS가 제한된 이유는 비트코인의 최대 블럭 크기가 1MB로 제한되어 있기 때문이다.2 비트코인의 최대 블록 크기를 설정한 이유는 사토시 나카모토가 직접 언급하지는 않았지만 큰 크기의 스캠 블록 생성을 방지하고 블록체인 크기가 기하급수적으로 커지는 것을 막기 위한 것이다. 비트코인의 블록크기를 1MB로 제한을 뒀음에도 불구하고 2018년 1월을 기준으로 비트코인의 블록체인 크기는 약 150GB이다.

그러나 비트코인이 대중적으로 알려지면서 많은 사람들이 비트코인 거래를 하기 시작했고 블록 크기가 1MB라는 것이 여러가지 문제를 발생시켰다. 첫 번째 문제는 높은 거래 수수료이다. 비트코인은 화폐로 사용되는 것을 목적으로 개발되었지만 높은 거래 수수료3로 인해 소규모 거래에서는 비트코인을 활용하는 것이 불가능해졌다.

두 번째 문제는 거래 지연이다. 비트코인의 TPS가 7인데 거래량이 많아졌기 때문에 거래 처리가 지연되고 있다.4

높은 수수료와 거래 지연이 발생하는 원리는 다음과 같다. 블록은 10분 동안 전세계에서 발생한 거래의 집합이다. 블록에 기록될 거래 목록을 결정하는 권한은 마이너(Miner)에게 있다. 마이너가 거래 목록을 선택하는 기준은 보통 다음 공식을 따른다.

  PRIORITY = SUM (VALUE * AGE) / TRANSACTION SIZE

즉 수수료를 많이 내고[VALUE] 트렌젝션 풀(Transaction Pool)에 오래 있었을수록[AGE] 거래 목록에 들어가기 위한 우선순위[PRIORITY]가 높지만 트렌젝션 크기가 클수록[TRANSACTION SIZE] 우선순위가 낮아진다.

마이너의 이익은 마이닝 보상 + 수수료 보상으로 이루어진다. 마이닝 보상은 2008년 50BTC를 시작으로 4년마다 반으로 줄어든다. 2018년 월 기준으로 마이닝 보상은 12.5BTC로 고정되어 있다. 마이너는 수수료 보상에 따라 총 이익이 변하게 된다. 따라서 마이너가 최대 이익을 얻기 위해서는 자신의 블록 1MB를 PRIORITY가 높은 순서로 채워야 한다. 만약 PRIORITY가 낮으면 해당 거래는 트렌젝션 풀에 남은 채 거래가 지연되게 된다.

비트코인 거래 수수료는 초기에는 불가능했지만 사용자가 직접 설정할 수 있게 변경되었다. 사용자 입장에서 빠른 전송을 하기 위해서는 PRIORITY가 높아야 하고 높은 PRIORITY를 갖는 방법은 수수료를 높게 설정하는 것이다. 그래서 PRIORITY를 높이기 위한 수수료 경쟁이 벌어지고 이에 따라 수수료는 계속 높아진다.

비트코인의 이러한 문제를 해결하기 위해 다양한 BIP(Bitcoin Improvement Proposal)5가 제시되었다.

  • BIP 100 : 블록 크기를 채굴자들의 투표로 결정
  • BIP 101 : 8MB로 확대 후 매년 2배씩 확대
  • BIP 102 : 2MB로 확대
  • BIP 103 : 2063년까지 17.7%씩 확대 BIP 109 : 2MB로 확대 후 동적 블록 크기

블록체인 크기를 늘리기 위한 BIP가 많이 제시되었다. 하드 포크(Hard Fork) 형태로 새로운 코인이 형성되긴 했지만6 비트코인 자체에 적용하는 것은 모두 실패하였다. 모든 제안들이 실패한 이유는 마이너들의 지지를 확보하지 못했기 때문이다. 비트코인은 탈중앙화 시스템이기 때문에 블록 크기를 변경하려면 95% 이상의 노드(마이너)들이 합의해야 한다. 그렇지 않으면 많은 문제가 발생한다. 예를 들면 합의한 노드와 그렇지 않은 노드의 블록 크기가 달라지면 비트코인 안에 다른 블록체인이 존재하게 되버리고 결국 비트코인 네트워크는 무너지고 만다.

마이너들이 반대하는 이유는 중국과 같이 인터넷 속도가 느린 국가의 마이너들의 경우 블록 크기가 커지면 블록을 전파받는데 상대적으로 긴 시간이 소요되고 시간 지연은 마이닝 불이익으로 이어지기 때문이다. 특히 비트코인 마이닝 파워는 중국이 77%를 차지하기 때문에 블록 크기를 늘리는 것은 실현 가능성이 낮다.

물론 블록 크기를 늘리지 못하는 원인은 마이너에게만 있는 것은 아니다. 블록 크기 확대는 비트코인이 갖는 탈중앙화라는 가치를 훼손시킬 수 있기 때문이다. 더 큰 블록 크기는 더 많은 컴퓨팅 자원을 필요로 하고 결국 더 많은 컴퓨팅 자원을 구할 수 있는 재력이 많은 소수 마이너들이 마이닝을 독점하게 될 것이다. 결국 비트코인은 소수에게 중앙화된 화폐로 전락하게 될 것이다.

SegWit

비트코인 확장성 문제는 BIP 141에서 제안된 SegWit을 통해 해결 방안을 모색하였다. Segwit은 Segregated Witness의 약자이다. SegWit이 다른 제안과 달랐던 점은 바로 소프트 포크(Soft Fork)로 해결하기 때문에 다수의 노드 동의 없이도 적용할 수 있다는 것이다.

하드 포크와 소프트 포크의 차이점은 포크 이후에 이전 버전과의 호환 가능성 여부의 차이이다. 하드 포크 이후에는 이전 버전과 호환이 안되기 때문에 절대 다수의 노드의 동의가 필요한 것이고 소프트 포크 이후에는 이전 버전과 호환이 되기 때문에 노드들의 동의가 없어도 비트코인 네트워크에 문제가 없다.

비트코인은 SegWit을 적용한 후에 블록 크기를 확대시키지 않고 블록 크기가 확대된 효과를 보게 된다. 바로 SegWit에서 새로운 측정 단위인 WU(Weight Unit)을 도입하는 방식을 채택한 것이다. WU의 정의는 다음과 같다.

  • 거래 데이터의 경우 : 1B = 4WU
  • 서명 데이터의 경우 : 1B = 1WU
  • 블록 크기 : 1MB = 1M WU

블록에서 하나의 거래 구조는 다음과 같다.

SegWit 이전의 거래 구조는 다음과 같다.

거래 데이터는 서명 데이터를 제외한 나머지 데이터를 지칭한다.

다음은 Segwit 이후의 거래 구조이다.

서명데이터가 거래 크기의 54%를 차지하므로 SegWit 이후 WU 단위로 계산했을 때 블록 크기가 2~3배 확대된 효과를 볼 수 있다.

버전 0.13.1 이후의 노드(신형 노드)는 새로운 형식의 SegWit 거래를 전송한다. SegWit은 소프트 포크이므로 버전 0.13.1 미만의 노드(구형 노느)와도 호환이 된다.

구형 노드가 SegWit 거래를 받게 되면 기존 거래 형식에 의해 출력값 이후의 데이터는 무시된다. 구형 노드가 SegWit 거래로만 구성된 블록을 만들더라도 서명 데이터를 제거하고 나면 1MB 미만이 되므로 문제가 되지 않는다.

신형 노드가 기존 거래를 받게 되면 기존 거래가 SegWit 거래 형식으로 변환된다. 신형 노드가 기존 거래로만 블록을 만들더라도 서명 데이터를 포함한 크기가 4M WU 미만이므로 문제가 되지 않는다.

Transaction Malleability

SegWit은 원래 비트코인 확장성 문제를 해결하기 위해 제안된 방법이 아니다. Transaction Malleability를 해결하기 위해 제안된 방법이다.

Transaction Malleability는 비트코인 네트워크에 confirm을 받기 전에 고유한 거래 ID를 변경시키는 공격이다.

모든 거래는 고유한 거래 ID를 갖고 이 거래 ID는 서명 데이터 + 거래 데이터의 해시값으로 구한다. 그런데 서명 데이터는 특정한 형식이 존재하지만 제대로 체크되지 않기 때문에 서명 데이터가 변경될 수 있는 가능성이 존재한다. 서명 데이터가 바뀌어도 유요한 거래이지만 거래 ID가 변경된다.

Transaction Malleability는 이중지불 문제와는 별개이기 때문에 큰 문제는 아니다. 그러나 라이트닝 네트워크(Lightning Network)를 구현하기 위해서는 거래 ID의 유일성이 필수적으로 보장되어야 하기 때문에 이 문제를 해결하였다.

SegWit에서는 거래 ID 생성 시 서명 데이터를 배제함으로써 서명 데이터 변경으로 인해 거래 ID 변경을 불가능하도록 하였다.

  1. TPS : Transaction Per Second의 약자로 초당 처리되는 거래량을 의미한다. 

  2. 사토시 나카모토가 2010년 1월에 설정하였다. 여기 참조 

  3. 2017년 12월 기준 비트코인 거래 수수료는 37달러이다. 

  4. 2017년 12월 기준 최대 2322분이 소요되었다. 

  5. https://github.com/bitcoin/bips 

  6. BIP 101에 따라 BITCOIN XT로 하드 포크, BIP 109에 따라 BITCOIN CLASSIC으로 하드 포크