맨위로 가기
  • 공유 공유
  • 댓글 댓글
[이지 인사이트] 엑소 말고 UTXO, 비트코인의 트랜잭션을 알아보자 Powered by Ludium
코인이지

2024.08.19 13:50:40

지난번에는 비트코인 블록의 헤더를 알아봤어. 오늘은 블록에서 트랜잭션들을 기록한 부분인 바디에 대해 공부할거야. 그리고 우리가 1BTC를 주고 받는 트랜잭션은 은행 계좌에서 보는 것 같은 잔고증명 방식이 아니야. 비트코인은 UTXO라는 독특한 시스템을 사용하는데, 그게 비트코인의 핵심이지.

트랜잭션의 실체 파헤치기

출처: 자체제작

 

사실 블록의 바디가 따로 있는 건 아니야. 헤더 아래에 트랜잭션 기록들이 쭉 나열되는데, 그 부분이 블록에서 가장 길고 큰 사이즈를 차지해. 그래서 마치 모양이 머리 밑에 몸통이 있는 것 같아서 트랜잭션들이 있는 부분을 블록의 바디라고 불러.

출처: 자체제작

 

트랜잭션에는 버전 번호부터 락타임까지 위와 같은 정보들이 있어. 각각의 필드가 무엇을 의미하는지 우리가 모두 알 필요는 없어. 다만 이 트랜잭션의 정보들이 ‘A가 B에게 1BTC를 보냈다.’, ‘C가 D에게 2BTC를 보냈다’와 같이 누가 누구에게 몇 비트코인을 보냈는지를 의미한다는 것만 알면 돼. 그리고 지난 편에서 설명했듯이 한 블록에 있는 모든 트랜잭션을 SHA 256 함수로 해시해서 그 블록의 머클루트가 된다는 걸 기억하자. 즉 이 블록 트랜잭션의 요약본이 머클루트인 셈이야.

출처: https://commons.wikimedia.org/wiki/File:Bitcoin_block_structure.svg

 

그런데 첫번째 트랜잭션을 보면 낯익은 이름이 보이지? 블록의 가장 첫 번째 트랜잭션을 코인베이스 트랜잭션(Coinbase Transaction)이라고 불러. 코인베이스 트랜잭션은 채굴자가 블록을 처음 생성한 댓가로 주어지는 보상이야. 여기에는 채굴자에게 지급하는 보상금 내역이 적혀있어. 당연히 첫번째 블록이니까, 이 블록을 채굴한 아무개 채굴자 지갑 주소로 채굴 보상금 비트코인을 보낸다는 내용이지.

출처: 자체제작

 

그럼 과연 이 트랜잭션들은 어떻게 처리될까? 구체적으로 어떻게 블록에 트랜잭션이 기록되고, 비트코인 네트워크 전체에 퍼지는 걸까? 위 이미지에서 A가 B에게 1BTC를 보냈어. A의 지갑에서 B의 지갑으로 1BTC를 보내겠다고 선언한 거야. 이 선언을 Node1이 받아서 사실인지 거짓인지 검증해. Node1이 검증을 하면, 가십 프로토콜에 따라 무작위로 다른 노드들에게도 이 트랜잭션을 전파하지. 그럼 Node2, Node3 등도 이 트랜잭션을 똑같이 검증하고 전파하는 과정을 거쳐서 전체 노드에 이 트랜잭션이 전파돼. 그렇기 때문에 전체 노드의 51%를 확보하면, 거짓 트랜잭션을 일으킬 수 있다는 뜻이야.

비트코인 트랜잭션의 핵심 UTXO(Unspent Transaction Output, 미사용 트랜잭션 출력값)

비트코인 트랜잭션에서 가장 중요한 개념인 UTXO에 대해 알아볼게. UTXO는 비트코인만의 독특한 트랜잭션 구조야. UTXO를 1,000원, 5,000원, 10,000원 짜리 지폐처럼 쪼갤 수 없는 지폐라고 생각하면 쉬워. 큰 단위인 10,000원 짜리 지폐를 쪼갤 수는 없고, 다만 그보다 작은 1,000원 짜리와 5,000원 짜리 지폐를 조합해서 10,000원을 만들어야 하는 방식이지.

내가 A에게 1BTC를, B에게 3BTC를 받으면 내 지갑에 4BTC라고 저장하는 게 아니라, 1BTC와 3BTC를 각각 나눠서 저장하는 거야. 그래서 내 지갑주소를 보면 사실은 1BTC, 3BTC, … 등 각각의 UTXO가 있는 거야. 다만 지갑이 사용자 편의를 위해서 우리에게 그 합한 값인 7.5BTC만 보여주는 것이고.

출처: 자체제작

 

위 예시를 가지고 더 구체적으로 살펴보자. D가 E에게 9BTC를 보내려고 해. 하지만 D는 9BTC짜리 지폐, 즉 UTXO가 없어. 그래서 D가 가진 UTXO 중 가장 큰 단위인 10BTC짜리를 보내는 트랜잭션을 먼저 만들어. 그리고서 거스름돈인 1BTC를 돌려받는 트랜잭션도 만들지.

출처: 자체제작

 

이걸 조금 더 기술적인 말로 설명해볼게. 비트코인의 트랜잭션은 크게 입력(input)과 출력(output)으로 구성돼. 입력은 이전 트랜잭션에서의 출력, 즉 이전 트랜잭션의 UTXO를 소비하는 것이고, 출력은 새로운 UTXO를 생성하는 것이야. 위 그림과 같이 Txn의 인풋이 이전 트랜잭션인 txn-1의 아웃풋을 소비하는 형태로 트랜잭션이 일어나. 그래서 G의 10 BTC는 소비되어 소멸하고, 1 BTC 를 자신에게 돌려주는 새로운 UTXO를 생성했어.

 

UTXO 왜 쓰는거야?

UTXO를 그 반대 개념인 잔고증명 방식과 비교해보면 비트코인이 UTXO를 쓰는 이유에 대해 알 수 있어. 잔고증명은 우리가 흔히 아는 은행 계좌의 잔액을 확인하는 방식이야. A가 B에게 송금을 신청하면 은행이 A의 잔액을 확인해서 잔액이 있을 때만 B에게 송금해주지. 참고로 이더리움은 비트코인과 다르게 잔고증명 방식을 채택하고 있어. 그런데 비트코인은 이전 블록인 n-1 블록의 정보가 있지만, 그 정보가 해싱되어있어. 따라서 과거 내역이 맞다는 걸 검증은 할 수 있지만, 그 내역 하나하나를 확인하는 건 불가능해. 잔액을 조회하려면 이 지갑의 잔액이 얼마라는 걸 모든 블록에 새로 갱신해줘야 하거든. 매우 비효율적이지.

이렇게 UTXO 개념을 사용하면, 어느 지갑 주소에 잔고가 얼마가 있는지 정확한 잔고를 파악하기 어려워서 익명성과 보안에 장점이 있어. 단, UTXO마다 수수료가 부과되니 수수료가 비싸지는 단점이 있지. 그래서 우리가 비트코인을 송금할 때 수수료가 많이 나오는 거야. 특히 UTXO는 이중지불과 돈 복사를 방지하게 해줘. 블록체인 시스템의 최대 문제가 바로 거짓말 하는 것, 즉 이중지불과 돈 복사였잖아. 내 지갑에 있는 1BTC를 A에게도 보내면서 동시에 B와 C에게도 보내는 거짓말을 할 수가 없어. A에게 1BTC를 보내는 순간 1BTC짜리 지폐가 소비되어 사라진다고 보면 돼.

 

트랜잭션의 생성과 전파 과정 쪽집게 요약

1. 트랜잭션 생성 — 지갑에서 1BTC를 보낸다는 트랜잭션을 생성하고 네트워크에 전송

2. 트랜잭션 전파 — 처음 노드가 이 트랜잭션 받고, 다른 노드들에게 무작위로 전파

3. 트랜잭션 검증 — 트랜잭션을 받은 각각의 노드는 이 트랜잭션이 유효한지 검증(이중 지불이 아닌지, 서명이 올바른지 등)

4. 멤풀(Mempool)에 저장 — 검증 완료된 트랜잭션은 각 노드 메모리에 있는 멤풀에 저장

* 멤풀은 Memory pool의 약자로, 검증된 트랜잭션을 일단 임시로 저장해두는 공간

5. 블록 생성 — 채굴자가 멤풀에 있는 트랜잭션들 중 일부를 뽑아서 새로운 블록 채굴 시도

*채굴자가 멤풀에 있는 유효한 트랜잭션을 뽑아서 올려야 비트코인을 보상으로 받을 수 있음. 잘못된 트랜잭션을 뽑아 올리면 다른 노드들이 그 블록을 거부할 수 있음. 채굴자는 자기가 뽑은 트랜잭션들에 대한 수수료도 보상으로 받음.

6. 블록 전파 — 채굴자가 채굴해서 트랜잭션 기록한 블록을 네트워크에 전파

7. 블록 검증 — 다른 노드들이 전파받은 블록을 검증

8. 블록체인에 추가 — 검증 완료된 블록은 각 노드의 블록체인에 추가됨

 

출처: 루디움(https://ludium.world),
디애셋 프로(https://contents.premium.naver.com/digitalasset/digitalassetpro)

작성자: Koo (@koorypto)

크립토가 세상을 바꿀 수 있다고 믿는 낭만파

작성자: Blynn(@0xBlynn)

전통금융과 크립토 이슈에 관심이 있어 이에 기여하고 싶은 사람.

 

댓글 6

0/1000

다사랑

2024.08.22 14:47:39

감사합니다.

답글달기

0

0
0

이전 답글 더보기

러너일이

2024.08.22 06:11:06

잘 봤습니다.

답글달기

0

0
0

이전 답글 더보기

릴라당

2024.08.22 00:07:47

잘보고갑니다

답글달기

0

0
0

이전 답글 더보기

Slowpoke82

2024.08.20 08:15:24

잘 봤습니다

답글달기

0

0
0

이전 답글 더보기

릴라당

2024.08.20 06:58:20

잘 봤습니다.

답글달기

0

0
0

이전 답글 더보기

러너일이

2024.08.20 02:48:24

잘 봤습니다.

답글달기

0

0
0

이전 답글 더보기

1