비트코인 결제 단위와 전송 메커니즘 분석
시리즈 1편부터 정주행 하기 -> [쉽게 배우는 비트코인 작동원리]
많은 사람들이 비트코인을 사지 못하는 이유로 "너무 비싸서"를 종종 꼽는다. 얼핏 들으면 비트코인의 가격이 고평가 되었다는 것 같지만 사실 대부분 1개씩 사기가 버겁다는 오해를 담고 있다.
현재 한화 약 1억 3천만 원을 웃도는 비트코인을 1개 단위로 사기는 당연히 어렵다. 하지만 비트코인은 소수점 단위의 전송과 구매가 가능하다.
1 BTC = 100,000,000 satoshi(sat)
Sats(사토시)는 비트코인을 이루는 최소 단위로, 1억 개의 사토시가 모이면 1 BTC, 즉 하나의 비트코인이 된다. 이는 비트코인 가격의 상승과 더불어 작은 거래에서도 원활한 결제가 가능하도록 설계되었다.
지갑에 10,000원짜리 지폐 한 장이 들어있는 상태로 슈퍼마켓에서 3,000원어치 과자를 사는 상황을 가정해 보자. 당연하게도 구매자는 10,000원을 지불하고 7,000원을 거스름돈으로 받는다.
이때 정상적인 구매자라면 10,000원짜리 지폐를 정확히 7:3으로 잘라 지불하려는 생각은 하지 않을 것이다. 1만 원권 지폐 그 자체는 하나의 나눌 수 없는 단위로서 존재하기 때문이다.
비트코에서는 이 지폐같은 단위를 UTXO(Unspent Transaction Output), 라고 부른다. 직역하면 "미사용 거래 출력"인데, 쉽게 말해 아직 사용되지 않은 비트코인 조각이라고 이해하면 된다.
*참고). 수수료는 고려하지 않았음
예시 상황
가령 1 BTC가 들어있는 UTXO인 A를 가진 사람이 누군가로부터 0.3 BTC어치 물건을 구매한다고 가정해 보자. 우선 UTXO를 쪼갤 수 없기 때문에 UTXO A는 1만 원권 지폐를 지불하는 것처럼 전액 지불되어야 한다.
UTXO A가 지불되는 과정에서 전송자는 1 BTC가 보내지게 될 새로운 UTXO들을 생성하거나 선택할 수 있다.
위 그림의 경우 하나의 UTXO에서 두 개의 새로운 UTXO가 생겨났다. 마치 1만 원권을 입력했더니 7천 원권과 3천 원권 권종이 새로 발행된 것 과 같은 개념이다.
이때 UTXO B는 판매자가 소유한 지갑에 생겨난 UTXO를 의미한다.
그리고 구매자는 남은 거스름돈을 change(잔돈) 형태의 UTXO로 다시 지불받게 된다. 이때 아예 새로운 주소로 보내서 UTXO C를 생성하는 방법이 있고, 기존에 사용했던 UTXO A의 주소를 재사용하는 방법도 있다.
*참고). UTXO A에 사용된 주소로 잔돈을 보내더라도 A라는 단위는 이미 지불 과정에서 소멸되었기에 그 자리에는 UTXO C가 생성된다.
만약 UTXO B나 C가 생겨날 주소에 이미 비트코인 잔액이 존재한다면 이미 있는 잔액과 보내진 금액이 합산된 UTXO가 생성된다.
쉽게 말해, 1만 원권을 쪼개서 사용할 수는 없으나, 위에 5천 원권을 얹어서 1만 5천 원권이라는 권종을 만들어낼 수는 있다는 개념이다.
매 거래마다 꼭 1개의 UTXO를 사용할 필요는 없다.
비트코인 네트워크에서는 여러 개의 UTXO를 소유한 주체가 다시 1개 또는 여러 개의 UTXO로 비트코인을 전송하는 것이 가능하다. 위 사진은 실제 비트코인 블록체인에 기록된 거래내역이다. 링크
앞선 글 [2. 비트코인은 장부다]와 [3. 비트코인 블록체인 해부하기]에서 비트코인 장부를 강건하게 유지해 주는 대가로 채굴자들은 일정한 보상을 받는다는 사실을 언급했었다.
사실, 시스템에서 주는 보상 이외에 비트코인 거래를 일으키는 사용자들이 채굴자들에게 지급할 수 있는 일종의 팁 또한 존재한다. 이 팁을 transaction fee(거래수수료)라 부른다.
거래 수수료는 크게 두 가지 방식으로 책정된다.
1. 거래의 크기와 서명방식
거래 수수료는 해당 거래를 저장하고 실행시키는 데 있어서 얼마나 많은 용량을 소모하는지에 따라 결정된다.
같은 양의 BTC를 전송할 때도 10개의 UTXO를 사용한다면 해당 거래의 vByte(가상 바이트), 즉 용량이 늘어나 거래 진행에 필요한 수수료가 올라간다.
반대로 그보다 적은 수의 UTXO를 이용한다면 상대적으로 저렴하다.
서명 방식에 따라서도 수수료 책정이 달라진다. 기존 비트코인 주소에 비해 SegWit 방식의 주소들은 데이터를 효율적으로 저장하기 때문에 vByte의 크기가 줄어들어 상대적으로 수수료를 아낄 수 있다.
자세한 원리는 글의 요지를 벗어나기에 생략했다.
2. 시장경쟁
비트코인의 장부 단위인 블록은 담을 수 있는 거래의 크기에 한계가 존재한다.
각 블록은 최대 4MB(실질적으로는 1MB)의 공간이 있으며, 채굴자는 임의로 블록을 채워 새 장부를 생성한다. 이때 경제적으로 합리적인 채굴자라면 가장 높은 수수료를 제공하는 거래를 우선적으로 포함시킬 것이다.
따라서 비트코인 네트워크의 이용수요가 올라 많은 사용자들이 한정된 장부 안에 자신의 거래를 기록하려 하면, 수요에 맞춰 용량당 평균 수수료는 올라간다. 이를 수치화한 지표가 sat/vByte(가상 바이트당 사토시 단위)이다.
바로 이전 글인 [4-2. 비트코인 지갑과 소유권 개념 (하)]에서는 Hot Wallet(핫 월렛)과 Cold Wallet(콜드 월렛)의 개념을 다루며 서명하는 방식에 따라 달라지는 지갑의 종류에 대해 서술했었다.
이제 서명 후 해당 거래가 비트코인 블록체인에 등록되는 과정을 간단히 알아보자. 비트코인 지갑을 일종의 확성기라고 생각하면 비교적 쉽게 이해할 수 있다.
1. 트랜잭션(거래) 생성
우선 송신자가 받을 주소, 송금액, 수수료 등의 거래 세부내역을 지정한 거래를 생성한다.
이렇게 서명되지 않은 상태의 거래 초안을 PSBT(Partially Signed Bitcoin Transaction)라 부른다.
예시)
수취인 주소 : bc1qy4...hpd
송금액 : 0.5 btc
수수료 : 3,000 sats
2. 트랜잭션 서명
해당 지갑의 인감도장이라고 할 수 있는 개인키를 이용해 생성한 거래를 서명한다.
이 과정에서 사용자의 개인키는 네트워크에 노출되지 않는다.
3. 거래 브로드캐스팅(전파)
서명이 완료된 거래는 확성기로 비유될 수 있는 지갑 애플리케이션을 통해 비트코인 네트워크에 브로드캐스팅(전파)된다.
지갑은 말 그대로 확성기의 역할만 하기 때문에 사용자가 개인키를 잃어버리지만 않는다면 언제 어느 기기에서나 비트코인 거래를 서명하고 브로드캐스팅할 수 있다.
비트코인의 장부를 검증하고 보관하는 노드들은 브로드캐스팅된 거래를 확인하고, 만약 거래가 유효하다면 이를 Mempool(멤풀)이라 불리는 대기 목록에 추가시킨다.
비트코인 장부의 불변성을 담당하는 노드와 채굴자 등의 개념은 추후 심층적으로 다룰 예정입니다.
마지막으로 채굴자들은 Mempool의 대기열에 있는 거래들을 모아 블록을 생성하여 비트코인 블록체인의 장부를 최신화한다.
지금까지 다룬 비트코인상의 거래 단위와 전송이 발생하는 기술적 개념을 바탕으로 다음 글에서는 거래와 블록 등이 네트워크에서 합의에 도달하는 채굴 과정을 심도 있게 서술할 예정이다.
Antonopoulos, Andreas. Mastering Bitcoin, 2nd Edition. O’Reilly Media, Inc, 2017.