비트코인의 블록 구조는 다음과 같았다.
디지털 서명 데이터 (75%)
그 외 데이터 (25%)
전체 블록의 크기가 1MB인데, 그 중 디지털 서명 데이터가 75%를 차지하였기 때문에, 당시 비트코인은 초당 처리할 수 있는 트랜잭션이 단 7TPS 정도로 확장성이 매우 제한적이었다.
그래서 비트코인 관련 커뮤니티에서는 디지털 서명 데이터를 별도의 공간에 저장하고, 대신 블록에 더 많은 트랜잭션을 담자는 세그윗(SegWit)이라는 제안이 나왔다.
세그윗을 도입하여 블록 당 저장용량을 늘리자는 것이었다.
2017년 8월 1일 기준으로 비트코인은 세그윗을 적용하는 소프트 포크를 진행했다.
기존의 비트코인에서 서명 부분을 분리한 세그윗(Segwit)을 처음으로 활성화한 암호화폐는 그로스톨코인(Groestlcoin)이다.
비트코인은 7TPS인 반면, 비자 카드는 50,000TPS를 가진다.
즉, 비트코인과 같은 블록체인은 중앙화된 금융 기관에 비해 현저히 속도가 떨어지며, 이를 거래 속도의 확장성 문제라고 한다. (블록체인 트릴레마 참조)
이 확장성 문제를 해결하기 위해 세그윗을 사용한다.
거래를 진행하기 위해서는 거래를 개시하는 당사자의 서명이 필요하다.
서명은 신원을 증명하는 것인데, 디지털 서명은 컴퓨터상에서 숫자 등으로 암호화하여 만든다.
디지털 서명이란 송금자의 개인 키로 암호화한 메세지들을
수금자가 송금자의 공개키로 해석하여
송금자의 신원을 확인하고 증명하는 것이다. ( 관련 개념 -- 공개키 ( 비대칭키 ) 암호화 방식 )
블록은 다음과 같이 2개의 공간으로 구성되어 있다.
트랜잭션 데이터를 저장하는 공간
디지털 서명을 저장하는 공간
서명 공간에 서명이 실제로 차지하는 크기는 크지 않지만, 서명 공간 자체가 차지하는 부피가 큰 문제가 있다.
이런 문제를 확장성 문제라고 하고 블록의 크기를 1MB 내외로 유지하면서 거래를 처리할 수 있는 속도를 더 빠르게
만들어주는 업그레이드가 세그윗이다.
세그윗은 서명 부분을 따로 Witness라는 데이터 영역으로 분리해 더 많은 거래를 처리할 수 있도록 업데이트한다.
세그윗은 블록에 불필요한 부분(ex. 서명란)을 줄여 블록의 크기를 줄인다.
블록의 불필요한 부피가 줄어들면, 더 많은 트랜잭션을 블록에 담을 수 있게 된다.
TXID가 ID라면 TXID를 따라다니는 전자서명은 비밀번호라고 할 수 있다.
거래 가변성은 실질적인 거래 내용에는 변화가 없지만, 거래 ID(TXID)만 변경하여 새로운 거래를 만들어 낼 수 있는 일종의 버그다.
가변성의 문제를 세그윗이 이 TXID를 따로 보관하고 관리함으로써 여러 개의 ID를 가지고 장난을 치거나 동일한 거래 내역 여러 개를 만드는 것을 막을 수 있게 된다.
세그윗의 가장 큰 장점 중 하나는 블록 용량 증가다.
트랜잭션 입력값에서 서명 데이터를 제거함으로써, 더 많은 트랜잭션이 단일 블록에 저장될 수 있게 되었다.
트랜잭션은 입력값과 출력값이라는 두 가지 주요 요소로 구성된다.
기본적으로 입력값에는 전송자의 공개 주소가 포함되는 반면,
출력값에는 수신자의 공개 주소가 포함된다.
송금자는 반드시 전송하려는 자금이 있다는 것을 디지털 서명을 통해 증명해야 한다.
이 디지털 서명 데이터는 블록 전체 용량의 75%까지 차지할 수 있는 큰 용량이다.
그러나 세그윗을 사용하면 트랜잭션 입력값으로부터 서명 데이터가 분리되어 실질 블록 크기는 1MB에서 4MB까지 증가한다.
즉, 세그윗을 적용한 1MB 블록이
세그윗을 적용하지 않은 4MB 블록과 동일한 트랜잭션 데이터를 담을 수 있게 된다.
( 세그윗이 적용되지 않은 1MB 블록에서 트랜잭션 데이터가 차지하는 용량은 0.25MB였지만
세그윗이 적용되고 나서는 1MB 블록에 트랜잭션 데이터를 1MB로 채우고 해당하는 3MB의 디지털 서명 부분은
Witness에 담아놓을 수 있게 된다. )
주목할 것은 세그윗을 통해 실제 블록 크기가 증가하는 것은 아니라는 것이다.
세그윗은 블록 크기 제한(하드 포크가 필요함)을 늘리지 않고, 실질 블록 크기를 늘리는 기술적 해결책이다.
보다 명확하게 말하자면, 실제 블록 크기는 여전히 1MB이지만, 유효한 블록 크기 제한은 4MB이다.
또한 세그윗은 블록 크기라는 개념을 대체하는 블록 무게라는 개념을 도입했다.
기본적으로 블록 무게는 모든 블록 데이터를 포함한 것으로, 트랜잭션 데이터(1MB)와 더는 입력 영역의 일부가 아닌 서명
데이터(최대 3MB)를 포함한다.
더 많은 트랜잭션을 저장할 수 있는 블록을 통해 세그윗은 트랜잭션 속도를 증가시킨다.
더 많은 트랜잭션이 블록체인에서 진행될 수 있기 때문이다.
하나의 블록을 마이닝 하는 데는 동일한 시간이 소요되지만, 하나의 블록 안에서 더 많은 트랜잭션이 처리될 수 있으며,
따라서 TPS가 증가한다.
트랜잭션 속도가 증가하면 비트코인 네트워크 트랜잭션 수수료 절감에도 도움이 된다.
세그윗 전에는 하나의 트랜잭션에 30달러 이상을 지출하곤 했다.
그러나 세그윗은 트랜잭션당 수수료를 1달러 미만으로 대폭 절감시켰다.
비트코인의 주된 문제는 잠재적으로 트랜잭션 서명을 조작할 수 있다는 것이었다.
서명이 변경되면 두 당사자 간의 트랜잭션에 오류가 생길 수 있다.
블록체인에 저장된 데이터는 사실상 불변하는 것이기 때문에, 유효하지 않은 트랜잭션이 블록체인에 영구적으로 저장될 수 있었다.
세그윗을 사용하면 서명이 더 이상 트랜잭션 데이터의 일부가 아니기 때문에 해당 데이터를 변경할 수 없다.
이러한 해결책은 블록체인 커뮤니티 내에서 세컨드 레이어 프로토콜과 스마트 콘트랙트와 같은 추가적인 혁신이 이뤄질 수 있게 했다.