본문 바로가기
블록체인/비트코인

[비트코인]SegWit vs SegWit2x - 세그윗과 세그윗2x

by dev_mac-_- 2019. 4. 4.

SegWit (Segregated Witness) - 분리된 증인

BlockStream의 Peter Wiulle가 구상한 SegWit은 하나의 Side Chain 개념이다.

Witness는 Side Chain과 같다.

분리된 증인(Segregated Witness)는 각각의 트랜잭션, 전체 트랜잭션의 서명 정보와 같다. 

기존의 서명정보는 Merkle Tree에 같이 존재해왔지만, SegWit을 통해 Side Chain으로 분리해 Main Chain과 병렬적으로 동작한다.

BIP 141 (Bitcoin Improvement Proposal)에서 제한된 기존 트랜잭션의 포멧을 바꾸는 Soft Fork이다.

BIP는 Bitcoin 개선안을 제안한 것들을 의미한다. BIP 뒤에 존재하는 숫자는 몇 번째로 제안된 개선안인지를 의미하는데 BIP 414에서는 기존 비트코인 트랜잭션의 데이터 구조를 증인(Witness)을 추가하는 것을 제안했다.

바뀐 트랜잭션의 데이터 구조

증인(Witness)를 알기 전에 Bitcoin의 트랜잭션의 영향을 미치는 요인들을 알아야 한다.

비트코인 트랜잭션에 관한 포스팅 : https://developer-mac.tistory.com/40

Bitcoin에서 트랜잭션은 Output spends(보냄)과 새로운 output 생성(보낼 것)이다. 그런데 비트코인의 각 트랜잭션마다 올바른 트랜잭션이라는 것을 검증한 전자서명(Digital Signature)이 포함되어있는데, 

기존 거래정보

 

실제로 전자서명(Digital Signature)은 단지 블록 상태 검증에만 사용된다. 

즉, 각 트랜잭션마다 전자서명이 포함되어 있지 않아도 영향을 미치지 않는 것 뿐이다. (검증을 받았을 때)

따라서 비트코인 트랜잭션을 묶은 Merkle Tree에 전자 서명정보를 제거하고 Witness와 몇가지 데이터 구조를 추가했다.
이게 SegWit의 큰 특징이다.

세그윗 미적용 vs 세그윗 적용

출저 : https://cryptokiwi.kr/currency?id=btc&category=2&content_id=217

위 그림은 SegWit을 미적용한 트랜잭션과 SegWit을 적용한 트랜잭션을 표현한 그림이다.

 

Witness

 

SegWit을 통해 얻는 이점

SegWit을 통해 얻는 이점으로는 2가지를 들 수 있다.

  1. 트랜잭션 가변성 문제(Transaction Malleability problem) 해결

  2. 제한된 블록사이즈에 담을 수 있는 트랜잭션의 갯수가 늘어난다.

 

트랜잭션 가변성 문제 (Transaction Malleability Problem)

트랜잭션 가변성 문제는 실질적인 거래 내용에는 변화가 없지만 거래 ID만 변경하여 새로운 거래를 만들어 낼 수 있는 버그이다.

철수가 영희에게 1BTC를 보내는 트랜잭션

철수가 영희에게 1 비트코인을 보내는 트랜잭션이다.

영희는 나쁜마음을 가지고 거래 A의 ID값만 바뀐 거래 B (거래B 역시 1BTC를 받는 거래정보)를 네트워크에 전파한다.

그런데 영희가 전파한 트랜잭션만 채굴이 되었고, 원래 거래인 A는 채굴되지 않아 거래가 성사되지 않아서 영희는 철수에게 재 요청을 하는 일종의 버그이다. 

SegWit에서 거래에 포함되어 있는 전자서명 정보를 분리된 증인이라는 공간을 따로 만들어 트랜잭션 가변성 문제를 해결한다.

Transaction ID

위 그림에서 BIP141 이 적용되기 전 트랜잭션이다.

TransactionID값만 바꿔준다면 트랜잭션 가변성 문제를 이용해 부당이익을 취할 가능성이 있었다.

기존 Transaction ID 결정 값, 새로운 Witness ID

https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki#hashes  

BIP 144에서 제안된 내용이다. 새로운 Witness ID는 Witness 정보를 포함한다.

(세그윗이 적용되었지만 이전 트랜잭션 데이터 구조를 사용할 수 있다.)

 

SegWit 2x

SegWit을 통해 블록에 담을 수 있는 트랜잭션의 양을 늘렸지만 폭발적으로 늘어나는 비트코인 트랜잭션에 기존 중앙시스템으로 동작하는 결결제 수단 비자, 마스터카드 보다 훨씬 느린 TPS(1초당 처리 트랜잭션량)을 해결하지 못했다.

2017년 Bitcoin의 블록 사이즈 크기를 2MB로 늘리자는 주제로 비트코인 재단 내부에서 논의하였다.

블록 사이즈 크기를 늘리자는 진형과 블록 사이즈가 늘어남에 의해 컴퓨터 해시파워가 상대적으로 약한 채굴자들은 피해를 보고 대형 채굴업체에 이득이 가기 때문에 소수의 채굴자가 네트워크를 차지하는 일이 일어남을 우려하는 진형으로 나뉘어 졌다.

결국에는 SegWit2x가 취소되었다.

그 이후 중국의 채굴업자 대표인 우지한이 이끄는 비트메인에서 478558이후 블록에서 비트코인 캐시로 하드포크 하는 일이 발생했다.

 

이 주제를 통해 비트코인의 고질적인 문제인 낮은 TPS를 풀기위한 노력들을 알 수 있고, Ethereum에서 자주 봤을 EIP 처럼 Bicoin Impovement Proposal 문서 들을 통해 비트코인 코어를 공부할 수 있게 해준다.

 

참고자료

SegWit - Wikipedia : https://en.wikipedia.org/wiki/SegWit 

BIP 141 : https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki

 

'블록체인 > 비트코인' 카테고리의 다른 글

비트코인이 Merkle Tree를 사용하는 이유  (0) 2019.02.24
[비트코인]Bitcoin Transaction  (0) 2018.11.26

댓글