거래소 출금 수수료, 과연 서비스에 맞는 합당한 가격인가?
비트코인 트랜잭션은 또다시 치솟고 있다. 거래가 발생할 때 노드에 지불하는 트랜잭션 수수료는 불특정한 노드들의 선의를 믿을 수 없는 블록체인 구조에서 매우 적합하고 합리적인 보상이다. 이러한 보상체계가 존재하기에 노드의 욕심을 제어하고 한편으로는 충족시켜주며 조화로운 블록체인 생태계가 지속될 수 있는 것이다.
“중개자가 없는 P2P 거래 시스템” 이라는 문구는 비트코인 백서에서 가장 메인에 등장하는 문구이다. 그러나 지금은 블록체인 시장 속에서 특정한 중개자들이 생겨났고 그 중개자는 트랜잭션 수수료를 통해서 이윤을 취하고 있다. 많은 사람이 이러한 사실을 알고 있지만 대수롭지 않게 여기고 있는 사람들이 많을 것이다. 이 내용을 좀 더 의미 있게 다뤄 보려고 한다.
트랜잭션은 블록에 포함되는 거래데이터이고, 거래란 송금을 의미하는 서명된 데이터 구조인 셈이다. 이 거래데이터가 비트코인 네트워크를 통해 전송되고 노드(채굴자)들이 수집하여 블록에 포함시켜서 블록체인 체인 내에서 영구적으로 존재하게 만든다.
현재의 트랜잭션 수수료는 Mempool Transaction Count를 보니 대략 바이트당 8사토시(0.00000008 BTC)로 책정이 되었을 때 컨펌처리가 된 것으로 보아 대략 8사토시로 책정 되어있는 듯하다. 물론 수시로 변화하기에 좀 더 반복적인 접근이 필요한 부분이긴 하다.
노드에 지불하는 트랜잭션 수수료는 트랜잭션의 크기에 따라 수수료가 달라지겠지만 일반적으로 Input과 Output이 1개씩인 최소 크기 트랜잭션은 대략 223 bytes 정도이다. 현재 시점으로 계산하면 그에 따른 트랜잭션 수수료는 다음과 같다:
223 bytes * 0.00000008 BTC = 0.00001784 BTC
그러나 필자가 사용하는 국내의 암호화폐 거래소 비트코인 출금수수료는 0.0005 BTC이다. 거래소가 노드에게 얼마의 트랜잭션 수수료를 설정한 지는 모르겠으나, 컨펌이 나오기까지 최소로 필요한 트랜잭션 수수료는 바이트당 0.0000008 BTC이다.
만약 단일 트랜잭션으로 최소의 비용을 지불하고 전송했다면 유저가 지불한 출금 수수료에서 실제 지불 수수료인 0.00001784 BTC를 제외한 0.00048216 BTC가 중개자의 이익이 된다. 그뿐만 아니라 다른 의문점 역시 존재한다. 국내의 특정 거래소는 단일 트랜잭션으로 전송이 진행되는 반면에 필자가 사용한 암호화폐 거래소는 트랜잭션의 Output이 일정한 시간 동안 계속해서 늘어난 뒤에 전송되었다.
필자는 13시 15분에 출금을 신청했는데 14시 13분까지 출금이 처리가 진행되지 않았고, 트랜잭션에 Output이 계속 늘어나 일정한 시간이 지난 뒤에야 출금이 진행되었다.
위 이미지는 필자가 진행한 한 거래의 트랜잭션이다. 해당 트랜잭션에서는 25개의 Output이 발생했다. 거래소가 원하는 만큼의 출금 신청이 모이기 전까지 트랜잭션을 날리지 않으며, 어느 정도 모이면 날리는 방식이기 때문에 Output이 일찍 달린 사람일수록 기다리는 시간이 늘어나게 된다.
해당 트랜잭션 크기는 3,134 bytes이며, 바이트당 트랜잭션 수수료를 0.00000008 BTC로 계산해보면 거래소가 노드에 지불한 트랜잭션 수수료는 다음과 같다:
3,134 bytes * 0.00000008 BTC = 0.00025072 BTC
그러나 실제 Output에 참여한 유저들이 지출한 총 출금 수수료는 0.0005 BTC * 25 = 0.0125 BTC가 된다. 그렇다면 0.0125 BTC에서 0.00025072 BTC를 제외한 0.01224928 BTC는 거래소가 취한 것으로 볼 수 있는 것이다. 물론 위 내용은 한 번의 거래에서 발생한 것이다. 2020년 1월 27일 기준 원화로 계산할 시, 유저들이 지출한 출금 수수료는 대략 총 123,000원이며, 이 가운데 거래소가 취한 금액은 노드에 지불한 2,500원을 제외한 120,500원이다.
앞서 설명한 바와 같이 하나의 트랜잭션 내에 다수의 Output을 포함시키는 것을 Batching이라 일컫는다. 쉽게 설명하면 한 번의 트랜잭션을 통해 여러 비트코인 주소에 송금하는 것을 뜻한다.
2명에게 각각 0.23 BTC, 1.69 BTC를 보낸다고 가정해보자. ‘sendtoaddress’ RPC를 이용하면 다음과 같다:
sendtoaddress “3Qsxe7eYy8GQ6PnkVA1zweotREXDVwhj1W” 0.23
sendtoaddress “3CWtx9zUxrGMv6gsFy9nCknmhq54fR3t4Q” 1.69
위와 같이 송금을 두 번 할 경우 평균적으로 각 트랜잭션 당 230 bytes, 총 460 bytes가 책정된다. 하지만 아래와 같이 ‘sendmany’ RPC를 이용하여 Batching을 할 경우 약 260 bytes가 책정된다. 즉, 200 bytes만큼의 비용이 절약되는 효과를 누릴 수 있다.
sendmany“”“{\“3Qsxe7eYy8GQ6PnkVA1zweotREXDVwhj1W\”:0.23, \“3CWtx9zUxrGMv6gsFy9nCknmhq54fR3t4Q\”:1.69}”
2017년 이전부터 이미 여러 거래소는 Batching을 적용하고 있다. 현재는 국내를 포함하여 대부분의 거래소가 이 방식을 적용하고 있으며, 비트코인 코어를 포함한 많은 지갑 서비스 역시 이를 빌트인 기능으로 포함하고 있다. 실제로 모든 비트코인 트랜잭션 중 12% 이상은 Batching이 활용되며, 모든 Output 가운데 Batching이 활용되는 비율은 약 40%이다. 이 비율은 높아져 가고 있는 상황이며, 이는 Batching을 잘 사용하지 않는 개인들의 거래가 줄어들고 있음을 의미하기도 한다. 그렇다면 Batching을 사용하는 가장 큰 이유는 무엇일까?
위 표에서 볼 수 있듯이 하나의 트랜잭션 내에 10개의 지불금(Payment)이 존재할 경우, 10개의 지불금을 10개의 트랜잭션으로 송금하는 것과 비교하여 최대 75%가량의 수수료를 절약할 수 있다. 거래소, 마이닝 풀, 그리고 송금 대행사와 같이 트랜잭션을 자주 날려야 하는 이들에겐 거래 수수료를 대폭 줄일 수 있어 효과적이다.
Output에 참여한 유저 개개인의 상황마다 다르겠지만 빠른 출금을 목적으로 하는 유저의 출금이 위의 트랜잭션에 포함되어 있었다면 유저는 블록체인의 전송처리 속도와는 다르게 중개자의 불합리한 운영에 의해서 자산의 피해가 발생했을 가능성도 존재한다.
또한 위의 내용을 토대로 다른 한 가지의 경우를 유추해볼 수 있다. 만약 중개자가 의도를 가지고 매시간 변화하는 트랜잭션 수수료를 모니터링하여 수수료가 저렴한 시간대에 트랜잭션을 송출할 목적을 가지고 있었다면 그에 따른 수수료는 중개자의 주머니에 쌓이게 될 것이고 변동성이 심한 암호화폐의 특성상 늦은 출금으로 인해 발생할 수 있는 피해는 유저들에게 고스란히 돌아가는 것이다. 즉, 특정한 중개자는 이윤을 위해 타인의 자산 손실 가능성을 묵인하는 행위가 겉으로 드러나지 않은 채 빈번하게 일어날 수 있다는 것이다.
물론 Batching을 이용한 출금은 여러 가지 이점도 존재한다. Bytes를 축소시키기 때문에 비트코인의 제한적인 블록 크기를 더욱 효율적으로 사용할 수 있게 된다. 이는 사용 가능한 블록 크기가 더욱 많이 제공된다는 점을 의미하며, 이를 통해 여타 비트코인 사용자들의 거래 수수료 역시 감소할 가능성도 존재한다.
하지만 이미 거래소는 1건의 출금만으로도 노드에 대한 지불 금액을 훨씬 웃도는 출금 수수료를 취하고 있다. 몇몇 거래소에서는 높은 수수료의 이유로 보다 빠른 출금이라 주장하지만, 이는 사실이 아니다. 암호화폐 거래소 역시 하나의 영리 기업이기에 이윤 추구에 목적을 두고 있는 것도 일정 부분은 이해한다. 그럼에도 불구하고 폭리 수준의 수수료와 늦은 출금으로 인한 유저들의 피해를 간과하고 위와 같은 방식을 고수하는 것이 옳다고 볼 수 있는 것인지 다시 한번 생각하게 되는 바이다.
본 콘텐츠는 블록체인 인사이트 미디어 '노더'에 기고된 글입니다.
https://noder.foundation/2high-fee/
노더 구독하기: https://t.me/noder_foundation