가스비는 전송료가 아닙니다. 실패한 거래에서도 빠져나가는 이유
수수료는 코인을 보내는 값이 아니라 블록 안의 자리를 사는 값입니다. 그래서 계산식에 금액이 없고, 실패해도 청구됩니다.
| 묻는 것 | 짧은 답 |
|---|---|
| 수수료는 무엇을 산 값인가 | 블록 안의 자리입니다. 자리는 한정돼 있고 수수료가 순서를 정합니다. |
| 무엇이 금액을 정하나 | 내 거래의 무게 곱하기 단위가격입니다. 단위가격은 직전 블록이 얼마나 찼는지로 정해집니다. |
| 보내는 금액이 영향을 주나 | 아닙니다. 이더리움에도 비트코인에도 계산식에 금액이 들어가지 않습니다. |
| 실패해도 내나 | 블록에 들어갔다면 냅니다. 되돌림은 실행된 만큼, 가스 소진은 한도 전액입니다. |
| 어느 코인으로 내나 | 그 체인의 기본 코인입니다. USDT를 이더리움으로 보내려면 지갑에 ETH가 있어야 합니다. |
| 거래소 출금 수수료가 네트워크 수수료인가 | 아닙니다. 그 숫자는 거래소가 정하고 거래소가 받습니다. |
1. 코인은 그대로인데 수수료만 나간 이유
2. 실패에도 종류가 있고, 청구가 다릅니다
3. 계산식을 열어보면 ‘보내는 금액’ 칸이 없습니다
4. 가스와 가스 가격은 서로 다른 두 숫자입니다
5. 단위가격은 직전 블록 하나가 정합니다
6. 지갑에 뜬 숫자는 청구서가 아니라 상한선입니다
7. 비트코인은 금액이 아니라 거래의 크기로 값을 매깁니다
8. 체인마다 세고 있는 것이 다릅니다
9. USDT는 있는데 USDT를 못 보내는 이유
10. 승인은 스왑과 별개의 거래입니다
11. L2는 값이 두 층으로 나뉘고, 뒤쪽은 이더리움에 남습니다
12. 출금 화면의 수수료는 네트워크 수수료가 아닙니다
13. 내 거래가 실제로 얼마를 냈는지 탐색기에서 확인하기
14. 자주 도는 이야기와 실제 규칙
15. 네 체계를 나란히 놓고 필자가 판단한 것
코인은 그대로인데 수수료만 빠져나간 화면에서 시작하겠습니다. 물건이 안 왔으면 값도 안 나가야 한다는 상식이 여기서만 안 통하는 이유가, 사실은 수수료의 정체를 그대로 보여줍니다. 이 하나를 잡으면 나머지가 같이 풀립니다. 왜 10만 원을 보내든 1억 원을 보내든 수수료가 같은지, 왜 지갑에 뜬 숫자보다 적게 나가는지, 왜 USDT만 들고 있으면 그 USDT를 못 보내는지가 전부 한 줄에서 나옵니다. 아래 수치는 전부 프로토콜과 거래소 공식 문서에서 확인한 값입니다.

1. 코인은 그대로인데 수수료만 나간 이유
거래가 실패했는데 수수료는 빠져나간 화면을 보신 적이 있을 겁니다. 코인은 그대로 있고, 보내려던 곳에는 아무것도 도착하지 않았습니다. 그런데 잔고는 줄어 있습니다.
상식으로는 이상합니다. 물건이 안 왔으면 값도 안 나가야 맞습니다. 그런데 여기서만 그 상식이 안 통합니다.
안 통하는 이유가 수수료의 정체입니다
수수료로 산 것이 ‘전송’이 아니기 때문입니다. 산 것은 블록 안의 자리입니다. 자리는 이미 썼고, 그 자리에서 계산기도 이미 돌았습니다. 결과가 실패였을 뿐입니다.
네트워크 입장에서 보면 일은 다 한 겁니다. 검증자들이 내 명령을 받아 실제로 실행했고, 중간에 성립하지 않는다는 걸 알아냈습니다. 그 연산과 그 자리가 청구되는 값입니다.
애초에 왜 값을 받나
수수료가 있는 이유는 돈을 걷기 위해서가 아닙니다. 이더리움 문서는 이유를 분명하게 적어 두었습니다. 모든 연산에 값을 붙여서 네트워크를 도배하는 행위를 막기 위해서입니다.
값이 붙지 않으면 누구나 무한히 반복되는 명령을 던져 넣을 수 있습니다. 그러면 블록은 그 명령을 처리하다 멈추고, 나머지 사람들의 거래는 들어갈 자리를 잃습니다.
그래서 거래마다 연산 단계의 상한을 반드시 정하게 되어 있습니다. 실수로 만든 무한 반복이든 의도적인 공격이든, 상한에 걸리면 거기서 끊깁니다.
이 설계를 알고 보면 실패한 거래에 값을 매기는 것도 자연스러워집니다. 값을 안 받으면 실패하는 거래를 무한정 던지는 게 공짜가 되기 때문입니다.
이 문장 하나를 잡고 나면 나머지가 전부 풀립니다. 왜 금액이 커도 수수료가 그대로인지, 왜 지갑에 뜬 숫자보다 적게 빠져나가는지, 왜 USDT만 있으면 USDT를 못 보내는지가 전부 같은 이유에서 나옵니다.
2. 실패에도 종류가 있고, 청구가 다릅니다
먼저 실패부터 정리하겠습니다. 실패에도 종류가 있고, 종류마다 청구가 다릅니다. 이걸 모르면 어떤 날은 조금 나가고 어떤 날은 많이 나가는 게 그냥 운처럼 보입니다.
되돌림은 남은 가스를 돌려줍니다
계약이 스스로 멈추는 방식을 되돌림(REVERT)이라고 합니다. 이 명령의 사양 문서에는 되돌림 자체가 남은 가스를 전부 쓰지는 않는다고 적혀 있습니다.
이 명령이 만들어진 이유가 거기에 있습니다. 그전까지 계약이 중간에 멈추는 방법은 가스를 다 써버리거나 잘못된 명령을 만나는 두 가지뿐이었고, 둘 다 남은 가스를 전부 소진했습니다.
가스 소진은 돌려주지 않습니다
한도를 필요한 양보다 적게 잡으면 실행이 도중에 멈춥니다. 이때는 잡아둔 한도가 전부 사라집니다. ‘아무 일도 안 일어났는데 크게 나갔다’는 사례는 대부분 이쪽입니다.
| 어떤 실패인가 | 블록에 들어갔나 | 청구되는 값 |
|---|---|---|
| 계약이 되돌림으로 멈춤 | 들어갔습니다 | 실행된 만큼만. 남은 가스는 돌아옵니다 |
| 가스가 모자라 중간에 멈춤 | 들어갔습니다 | 한도 전액 |
| 잘못된 명령을 만남 | 들어갔습니다 | 한도 전액 |
| 일반 전송에 한도를 21,000 미만으로 지정 | 아닙니다 | 없습니다. 검증 단계에서 걸립니다 |
| 요율이 낮아 대기 중 | 아닙니다 | 없습니다. 대신 언제 들어갈지 모릅니다 |
내 거래가 어느 쪽이었는지 구분하는 법
탐색기에서 거래를 열면 두 숫자가 나란히 보입니다. 사용한 가스량과 가스 한도입니다. 이 둘을 비교하면 어떤 실패였는지 바로 갈립니다.
사용량이 한도와 똑같이 붙어 있으면 가스 소진입니다. 쓸 수 있는 만큼 끝까지 쓰고 멈춘 겁니다. 사용량이 한도보다 눈에 띄게 작으면 되돌림입니다. 계약이 중간에 스스로 멈췄고 나머지는 돌아왔습니다.
같은 ‘실패’ 표시라도 빠져나간 금액이 몇 배씩 차이 나는 이유가 여기 있습니다. 화면에는 실패라고만 뜨니까 차이가 안 보일 뿐입니다.
목록에 아예 안 보이는 경우도 있습니다. 그건 블록에 못 들어간 상태입니다. 요율이 낮아 대기 중이거나, 검증 단계에서 걸러졌습니다. 이때는 청구도 없습니다.
솔라나는 순서가 다릅니다. 수수료를 실행 전에 지불자에게서 먼저 빼기 때문에, 실행 중 실패한 거래는 이미 낸 상태가 됩니다. 실패가 아니라 조용히 안 보이는 경우라면 입금이 안 들어올 때 확인하는 순서 쪽이 맞습니다.
3. 계산식을 열어보면 ‘보내는 금액’ 칸이 없습니다
이제 계산식을 열어보겠습니다. 이더리움 공식 문서에 적힌 식은 짧습니다. 사용한 가스량 곱하기 (기본수수료 더하기 우선수수료)입니다.
표준 숫자를 넣으면 21,000 × (10 + 2) = 252,000 gwei가 되고, ETH로는 0.000252입니다. gwei는 ETH를 10억으로 나눈 단위입니다. 소수점 아래 0이 길게 이어지는 걸 피하려고 쓰는 표기입니다.
없는 항목을 보십시오
이 식 어디에도 ‘보내는 금액’ 자리가 없습니다. 10만 원어치를 보내든 1억 원어치를 보내든, 같은 세 값이 들어가면 같은 답이 나옵니다.
은행 이체 수수료나 카드 수수료를 떠올리고 오면 여기서 어긋납니다. 그쪽은 금액에 붙지만 이쪽은 그렇지 않습니다. 계산식에 금액이 없습니다.
세 값이 각각 무엇인가
21,000은 ETH를 그냥 보낼 때 드는 작업량입니다. 값이 아니라 일의 양입니다. 기본수수료는 네트워크가 정하고 블록마다 움직입니다. 우선수수료는 내가 정하는 부분이고, 검증자가 내 거래를 앞에 넣어주는 대가입니다.
우선수수료가 하는 일
기본수수료는 그 블록에 들어가려면 누구나 내야 하는 값입니다. 여기서는 차이가 나지 않습니다. 같은 블록에 들어가는 거래는 전부 같은 기본수수료를 냅니다.
차이는 우선수수료에서 납니다. 블록을 만드는 쪽은 들어올 거래 중에서 무엇을 담을지 고르는데, 그때 더 얹은 쪽이 먼저 담깁니다. 순서를 사는 값이 이쪽입니다.
그래서 ‘수수료를 올렸는데 왜 그대로냐’는 상황이 설명됩니다. 기본수수료 쪽을 올려봐야 순서는 그대로입니다. 그 값은 내가 정하는 값도 아닙니다.
반대로 한산할 때는 우선수수료를 거의 안 얹어도 바로 들어갑니다. 자리를 두고 다투는 사람이 없기 때문입니다. 경쟁이 없으면 순서를 살 이유도 없습니다.
같은 전송인데 지갑마다 숫자가 다른 이유
같은 금액을 같은 주소로 보내는데 지갑 A와 지갑 B가 서로 다른 수수료를 띄우는 일이 있습니다. 작업량은 21,000으로 똑같습니다. 달라진 건 단위가격 쪽입니다.
지갑마다 기본수수료를 읽어오는 시점이 다르고, 우선수수료를 얼마나 얹을지 잡는 기준도 다릅니다. 어떤 지갑은 여유 있게, 어떤 지갑은 빠듯하게 잡습니다.
그래서 두 숫자를 비교할 때는 총액만 보지 말고 단위가격과 한도를 따로 보시는 편이 정확합니다. 총액이 크다고 그 지갑이 더 비싼 게 아니라, 상한을 더 넉넉히 잡아둔 경우가 많습니다.
블록에 자리가 한정돼 있다는 전제가 낯설다면 블록체인이 어떻게 돌아가는지부터 보시면 이 뒤가 편합니다.
4. 가스와 가스 가격은 서로 다른 두 숫자입니다
‘가스비’라는 한 단어 안에 서로 다른 두 숫자가 들어 있습니다. 하나는 내 거래가 하는 일의 양입니다. 다른 하나는 그 일 한 단위가 지금 얼마인가입니다.
이더리움 문서는 가스를 ‘연산에 드는 노력의 양을 재는 단위’로 정의합니다. 돈의 단위가 아닙니다. ETH를 주소에서 주소로 보내는 일은 완전히 표준화돼 있어서 언제나 21,000으로 값이 매겨집니다. 계약을 부르는 일은 더 무겁고, 그만큼 숫자가 커집니다.
무엇을 하느냐가 작업량을 정합니다
21,000은 ETH를 그대로 보낼 때의 숫자입니다. 다른 일을 하면 다른 숫자가 나옵니다. 작업량은 내가 고르는 값이 아니라 그 일이 몇 단계를 밟느냐로 정해집니다.
토큰을 보내는 건 단순 전송보다 무겁습니다. 장부를 고쳐야 하는 계약을 부르기 때문입니다. 스왑은 더 무겁습니다. 여러 계약을 거치면서 잔고를 확인하고 교환 비율을 계산하고 두 방향으로 옮깁니다.
그래서 같은 지갑에서 같은 순간에 보내도 전송이냐 스왑이냐에 따라 청구액이 몇 배 갈립니다. 단위가격은 똑같았는데 작업량이 달랐던 겁니다.
화면의 총액만 보면 이 차이가 안 보입니다. 총액을 작업량과 단위가격으로 나눠서 봐야 어느 쪽이 커진 건지 구분됩니다.
가스 한도는 속도 설정이 아닙니다
지갑에 보이는 가스 한도는 이 거래가 쓸 수 있는 최대 단위 수입니다. 이걸 올려도 빨라지지 않습니다. 청구는 실제로 쓴 만큼만 되고, 여유분은 그냥 남습니다.
반대로 너무 낮게 잡으면 결과가 분명합니다. 일반 전송에 한도를 20,000으로 주면 검증 단계에서 실패한다고 문서에 적혀 있습니다. 그 일에는 21,000이 필요하기 때문입니다.
| 값 | 정하는 쪽 | 가는 곳 | 내가 바꿀 수 있나 |
|---|---|---|---|
| 가스 사용량 | 거래가 하는 일 | 해당 없음 | 아닙니다. 무엇을 하느냐가 정합니다 |
| 기본수수료 | 프로토콜(직전 블록) | 소각 | 아닙니다 |
| 우선수수료 | 보내는 사람 | 검증자 | 그렇습니다 |
| 최대 수수료 | 보내는 사람 | 초과분은 환불 | 그렇습니다. 상한선일 뿐입니다 |
| 가스 한도 | 보내는 사람·지갑 | 쓴 만큼만 청구 | 그렇습니다. 낮으면 실패합니다 |
낸 돈의 큰 쪽은 사라집니다
이더리움에서 기본수수료는 블록이 만들어질 때 소각됩니다. 누구의 수입도 아닙니다. 검증자가 가져가는 건 우선수수료뿐입니다. 위 예시에서 전체가 0.000252 ETH일 때 검증자 몫은 0.000042 ETH입니다.
혼잡할 때 ‘채굴자만 돈 번다’는 말이 도는데, 기본수수료 쪽은 계산이 그렇지 않습니다. 막힐수록 더 많이 태워지고 팁만 지급됩니다. 블록에 무엇을 넣을지 고르는 쪽이 혼잡으로 이득을 보지 않게 만든 설계입니다.
5. 단위가격은 직전 블록 하나가 정합니다
정가표를 붙여두는 곳은 없습니다. 기본수수료는 프로토콜이 직전 블록 하나만 보고 계산합니다. 블록의 목표 크기는 현재 가스 한도의 절반이고, 한 블록은 그 목표의 두 배까지 담을 수 있습니다.
직전 블록이 목표보다 컸으면 다음 블록의 기본수수료가 오릅니다. 작았으면 내립니다. 변동 폭에는 상한이 있습니다. 문서에 적힌 범위는 블록당 최대 12.5%입니다. 빈 블록이면 마이너스 12.5%, 목표에 딱 맞으면 0%, 한도까지 찼으면 플러스 12.5%입니다.
12.5%가 생각보다 빠릅니다
블록당 12.5%는 한 번만 보면 작아 보입니다. 그런데 이건 매 블록 이전 값 위에 다시 붙습니다.
계산해보면 감이 옵니다. 한도까지 찬 블록이 여섯 번 이어지면 1.125를 여섯 번 곱한 값이 되고, 대략 두 배가 됩니다. 블록은 몇 초에 하나씩 나오니까 1~2분 만에 벌어지는 일입니다.
반대 방향도 같습니다. 수요가 빠져 빈 블록이 이어지면 같은 속도로 내려옵니다. 가스비가 갑자기 튀었다가 금방 가라앉는 것처럼 보이는 이유가 이 구조에 있습니다.
그래서 ‘지금 비싸다’는 판단은 유통기한이 아주 짧습니다. 몇 분 전 화면과 지금 화면이 다른 게 정상입니다.
그래서 싼 시간대라는 건 없습니다
새벽이나 주말이 싸다는 말이 오래 돌았습니다. 그런데 이 계산에는 시계가 들어 있지 않습니다. 방금 닫힌 블록이 얼마나 찼는지, 그 측정값 하나만 들어 있습니다.
수요가 빠지면 몇 블록 만에 내려갑니다. 무슨 요일이든 상관없습니다. 반대로 인기 있는 민팅이나 청산이 몰려 블록이 한도까지 차면, 조용한 일요일에도 같은 속도로 올라갑니다.
추천 요율은 예측이지 약속이 아닙니다
지갑과 탐색기가 띄우는 추천 요율은 계속 변하는 대기열을 그 순간 읽은 값입니다. 비트코인 쪽에서 가장 널리 쓰이는 추정치를 내놓는 mempool.space도 자기 추천값이 어떤 기간 안의 확정도 보장하지 않는다고 못 박아 둡니다.
추천 요율을 계약서처럼 믿으면 거래가 안 들어갈 때 당황하게 됩니다. 붐비는 노드는 일정 요율 아래 거래를 아예 받지 않기도 합니다.
6. 지갑에 뜬 숫자는 청구서가 아니라 상한선입니다
확인 버튼 앞에 뜨는 숫자는 보통 최댓값입니다. 최댓값은 청구서가 아닙니다.
지갑이 실제로 보내는 값은 두 개입니다. 가스 단위당 최대 수수료와 최대 우선수수료입니다. 거래가 실행되려면 최대 수수료가 기본수수료와 팁의 합보다 커야 합니다. 그리고 그 차액은 보낸 사람에게 환불됩니다.
그래서 뜬 숫자보다 적게 나갑니다
빠져나간 금액이 확인 화면의 숫자보다 작아서 이상하게 느껴질 때가 있습니다. 잘못된 게 아닙니다. 기다리는 동안 기본수수료가 오를 것에 대비해 상한을 넉넉히 잡았는데 오르지 않았고, 안 쓴 만큼 돌아온 겁니다.
앞 거래가 막히면 뒤가 다 멈춥니다
한 지갑에서 보낸 거래들은 순번을 달고 나갑니다. 이 순번은 건너뛸 수 없습니다. 앞 번호가 아직 블록에 못 들어갔으면 뒤 번호는 아무리 넉넉하게 잡아도 먼저 들어가지 못합니다.
그래서 낮은 요율로 하나를 보내놓고 잊어버리면, 그 뒤에 보낸 거래들이 줄줄이 대기 상태가 됩니다. 지갑에는 여러 건이 멈춰 있는 것처럼 보이지만 막고 있는 건 맨 앞 하나입니다.
이 구조를 모르면 뒤에 있는 거래의 수수료를 계속 올려보게 됩니다. 그런데 막힌 지점은 거기가 아닙니다.
상한선이 막아주는 것
서명한 순간과 블록에 들어가는 순간 사이에 기본수수료가 움직입니다. 여유 없이 딱 맞춰 잡으면 기본수수료가 한 칸 오르는 순간 그 거래는 유효하지 않게 되고, 그대로 대기합니다.
여유를 둔 상한은 그 움직임을 흡수합니다. 그리고 안 쓰면 비용이 되지 않습니다. 확인 화면의 숫자는 최악의 경우를 보여주는 값으로 읽으시면 맞습니다.

7. 비트코인은 금액이 아니라 거래의 크기로 값을 매깁니다
비트코인은 같은 결론에 완전히 다른 길로 도착합니다. 연산량을 재지 않습니다. 잴 만한 연산이 거의 없습니다. 대신 거래를 데이터 덩어리로 보고 그 크기를 잽니다.
단위는 가상바이트(vB)이고, 요율은 가상바이트당 사토시로 표시합니다. 총액은 거래 크기 곱하기 요율입니다. 크기를 정하는 건 지갑이 끌어모은 조각의 개수, 만들어지는 출력의 개수, 주소 형식입니다. 옮기는 금액이 아닙니다.
요율을 낮게 잡으면 생기는 일
비트코인에서 요율을 낮게 잡으면 거래가 사라지는 게 아닙니다. 대기열에 남아 있습니다. 다만 요율이 더 높은 거래들이 계속 앞으로 들어가기 때문에 순서가 뒤로 밀립니다.
대기열이 한산해지면 그때 들어갑니다. 그래서 몇 시간 뒤에 갑자기 확정되는 일이 생깁니다. 붐비는 상태가 길게 이어지면 그만큼 오래 걸립니다.
더 붐빌 때는 아예 안 받는 경우도 있습니다. 노드가 일정 요율 아래의 거래를 받지 않기 시작하면 대기열에 들어가지도 못합니다.
수수료가 ‘항목’이 아니라 ‘나머지’입니다
비트코인 거래 안에는 수수료라고 적힌 칸이 없습니다. 들어온 값에서 나간 값을 뺀 나머지가 수수료이고, 채굴자가 그걸 가져갑니다.
이 구조 때문에 유명한 사고 유형이 하나 있습니다. 거래를 잘못 만들어 거스름돈 출력을 빠뜨리면, 그 전부가 수수료가 되어 버립니다.
같은 잔고인데 비용이 다른 경우
비트코인 잔고는 하나의 숫자처럼 보이지만 실제로는 여러 조각의 합입니다. 받을 때마다 조각이 하나씩 생기고, 그 조각들이 따로 보관됩니다.
보낼 때는 필요한 금액이 채워질 때까지 조각을 끌어옵니다. 조각 하나를 쓸 때마다 거래에 바이트가 붙고, 바이트가 붙으면 크기가 커지고, 크기가 커지면 총액이 올라갑니다.
그래서 같은 잔고를 가진 두 지갑이라도 비용이 갈립니다. 큰 조각 하나로 들어온 지갑은 조각 하나만 쓰면 되고, 소액을 여러 번 받은 지갑은 여러 개를 끌어와야 합니다.
잔돈이 많은 지갑이 더 냅니다
비트코인은 조각으로 들어옵니다. 보낼 때는 필요한 만큼 조각을 끌어모읍니다. 소액을 여러 번 받은 지갑은 조각이 많고, 조각 하나마다 바이트가 붙습니다.
같은 날 같은 금액을 보낸 두 사람이 서로 다른 수수료를 내는 일이 여기서 생깁니다. 잔고가 어떻게 쌓였느냐가 값을 가른 겁니다. 구조 자체는 비트코인 설명에 정리해 두었습니다.
8. 체인마다 세고 있는 것이 다릅니다
두 체인이 같은 행동에 서로 다른 잣대를 대는 걸 봤으니, 나머지도 무엇을 세고 있는지 보겠습니다.
| 체인 | 재는 것 | 값이 오르는 조건 | 내는 코인 |
|---|---|---|---|
| 이더리움 | 연산 작업량(가스) | 직전 블록이 목표보다 찼을 때 | ETH |
| 비트코인 | 거래 크기(가상바이트) | 대기 거래가 몰릴 때 | BTC |
| 트론 | 대역폭(크기)·에너지(계약 실행) | 무료·스테이킹 할당을 넘길 때 | TRX 소각 |
| 솔라나 | 서명 개수와 요청한 연산량 | 같은 계정에 거래가 몰릴 때 | SOL |
| L2(OP 계열) | L2 실행분 + 이더리움에 올리는 데이터 | 이더리움 데이터 값이 오를 때 | 그 L2의 ETH |
트론은 먼저 주고 모자랄 때 태웁니다
트론은 수수료 대신 자원 개념을 씁니다. 계정마다 하루 무료 대역폭 600이 주어지고, 에너지에는 무료 할당이 없습니다.
빠져나가는 순서가 정해져 있습니다. 대역폭은 스테이킹으로 받은 몫, 무료 600, 그다음에야 TRX 소각입니다. 소각 요율은 바이트당 1,000 sun, 즉 0.001 TRX입니다. 에너지는 스테이킹 몫, 계약 배포자가 부담하기로 한 몫, 그다음 TRX 소각이고 요율은 에너지당 100 sun입니다.
공식 문서 예시가 있습니다. 대역폭이 없는 270바이트짜리 TRX 전송은 270 × 1,000 = 270,000 sun, 그러니까 0.27 TRX를 태웁니다. USDT 같은 토큰 전송은 계약 실행이라 에너지도 씁니다. 트론 설명에 왜 이 체인에 스테이블코인이 몰려 있는지 정리해 두었습니다.
태우는 쪽과 묶어두는 쪽
트론에서 자원을 확보하는 길은 두 갈래입니다. TRX를 태우거나, TRX를 묶어서 자원을 받거나입니다. 두 방식은 성격이 완전히 다릅니다.
태우는 쪽은 그때그때 지불하는 방식입니다. 쓴 만큼 TRX가 사라지고 끝납니다. 묶어두는 쪽은 TRX를 그대로 둔 채 거기서 나오는 자원만 쓰는 방식입니다. 원금은 남아 있습니다.
그래서 전송이 잦은 쪽과 어쩌다 한 번인 쪽의 계산이 서로 다릅니다. 어느 쪽이 낫다는 판단은 사용 빈도와 묶어둘 수 있는 금액에 따라 갈리고, 그건 화면 앞의 각자 사정입니다.
구조만 정리하면 이렇습니다. 태우기는 지출이고, 묶어두기는 잠그기입니다. 화면에 뜨는 ‘수수료 0’은 자원이 있다는 뜻이지 비용이 없다는 뜻이 아닙니다.
솔라나는 서명과 연산을 셉니다
솔라나 기본 수수료는 서명 하나당 5,000 lamports입니다. 여기에 우선순위 수수료를 붙일 수 있습니다. 연산 단가에 연산 한도를 곱하고 100만으로 나눈 뒤 올림한 값입니다. 명령 하나의 기본 한도는 200,000이고 거래 전체 상한은 1,400,000입니다. 자세한 구조는 솔라나 설명에 있습니다.
9. USDT는 있는데 USDT를 못 보내는 이유
실무에서 제일 자주 막히는 지점입니다. 규칙은 짧습니다. 수수료는 그 체인의 기본 코인으로 내고, 보내는 토큰으로는 못 냅니다.
| 보내려는 것 | 지갑에 같이 있어야 하는 것 | 없으면 |
|---|---|---|
| USDT(이더리움) | ETH | 전송 자체가 시작되지 않습니다 |
| USDT(트론) | TRX 또는 스테이킹한 에너지·대역폭 | TRX가 소각되거나 전송이 막힙니다 |
| USDC(솔라나) | SOL | 서명 수수료를 못 내서 실패합니다 |
| BNB 체인의 토큰 | BNB | 같습니다 |
| L2 위의 토큰 | 그 L2에 있는 ETH | 이더리움 본체 잔고는 도움이 안 됩니다 |
마지막 줄이 제일 많이 걸립니다. 이더리움 본체에 ETH가 있어도 L2에서는 못 씁니다. 장부가 다르기 때문입니다. 네트워크마다 소액이라도 따로 있어야 합니다.
이름이 같아도 장부가 다릅니다
USDT라는 이름 하나가 여러 체인 위에 따로따로 올라가 있습니다. 이름과 가치는 같게 취급되지만 기록되는 장부는 완전히 다릅니다.
그래서 이더리움 위의 USDT와 트론 위의 USDT는 서로 다른 자리에 적혀 있는 잔고입니다. 한쪽에서 다른 쪽으로 그냥 넘어가지 않고, 옮기려면 별도의 절차가 필요합니다.
입금 주소가 네트워크마다 다르게 발급되는 것도 같은 이유입니다. 주소는 특정 장부 위의 자리를 가리키는 값이고, 장부가 다르면 자리도 다릅니다.
거래소 입금 화면에서 네트워크를 먼저 고르게 되어 있는 건 이 때문입니다. 코인 이름만 맞추고 네트워크를 넘기면, 맞는 이름을 틀린 장부에 적는 셈이 됩니다.
돈이 실제로 나가는 버전
코인을 고르는 것과 네트워크를 고르는 건 다른 결정입니다. 같은 USDT가 여러 네트워크에 있고 비용 구조가 전부 다릅니다. 무엇이 달라지는지는 USDT ERC20과 TRC20 비교에 정리해 두었습니다.
네트워크를 잘못 고르면 되찾을 수 있는 경우와 없는 경우가 갈립니다. 잘못된 네트워크로 보냈을 때에서 경우별로 다뤘고, 거래소로 보낼 때는 메모나 태그가 필요한 곳도 있습니다.
거래소에서 개인 지갑으로 옮길 때 걸리는 순서
국내 거래소에서 산 코인을 개인 지갑이나 해외 거래소로 옮기는 동선에서 이 문제가 가장 자주 터집니다. 순서를 보면 어디서 막히는지 분명해집니다.
거래소에서 토큰을 출금할 때는 수수료를 거래소가 알아서 떼기 때문에 기본 코인이 없어도 나갑니다. 그래서 여기까지는 아무 문제가 없습니다.
문제는 그다음입니다. 도착한 지갑에는 토큰만 있고 기본 코인은 0입니다. 그 토큰을 다시 어디론가 옮기거나 스왑하려는 순간 막힙니다. 수수료를 낼 코인이 지갑에 없기 때문입니다.
그래서 토큰을 먼저 보내고 기본 코인은 나중에 생각하는 순서가 사고를 만듭니다. 반대로 기본 코인을 소액 먼저 보내두면 이 상황 자체가 생기지 않습니다.
이 전부를 막는 습관은 하나입니다. 쓰는 지갑마다 그 체인의 기본 코인을 조금 남겨 두면 수수료 잔고 때문에 전송이 막히는 일이 사라집니다.
10. 승인은 스왑과 별개의 거래입니다
탈중앙 거래소에서 처음 보는 토큰을 바꾸면 수수료가 두 번 나갑니다. 한 번을 예상했던 분들이 나머지 한 번이 뭐냐고 물어보십니다. 잘못된 게 아닙니다.
계약이 내 토큰을 옮기게 하려면 승인이 먼저 필요하고, 승인은 그 자체가 별개의 거래입니다. 그리고 스왑이 두 번째 거래입니다.
둘 다 진짜 거래입니다. 둘 다 블록의 자리를 씁니다. 둘 다 그때의 요율로 청구됩니다. 승인은 하는 일이 적어서 보통 더 쌉니다. 그래도 공짜는 아니고, 그 계약이 한 번도 만져본 적 없는 토큰이면 건너뛸 수도 없습니다.
승인이 더 싼 이유
승인이 스왑보다 싼 데는 이유가 있습니다. 승인이 하는 일은 한 줄을 기록하는 것에 가깝습니다. 이 계약이 내 토큰을 얼마까지 옮겨도 된다는 값 하나를 적어두는 겁니다.
스왑은 그 기록을 읽고, 잔고를 확인하고, 교환 비율을 계산하고, 양쪽 잔고를 고칩니다. 밟는 단계가 훨씬 많으니 작업량도 그만큼 큽니다.
같은 원리로 두 번째 스왑부터는 승인 단계가 빠집니다. 이미 적어둔 값이 남아 있기 때문입니다. 처음 한 번만 두 건이고, 그다음부터는 한 건입니다.
거래가 끝나도 남는 부분
승인은 스왑이 끝나면 사라지는 게 아닙니다. 기록으로 남습니다. 게다가 많은 화면이 다음번에 이 단계를 반복하지 않으려고 무제한 한도로 승인을 요청합니다.
편한 만큼 노출입니다. 몇 달 전에 준 권한은 오늘도 권한입니다. 지갑이 비는 경로 중 하나가 이겁니다. 안 쓰는 승인을 확인하고 지우는 방법은 토큰 승인 회수에 있고, 이 계약들이 무엇을 하는지는 디파이 설명에 정리해 두었습니다.
스왑 견적을 볼 때는 수수료가 비용의 전부가 아니라는 점도 같이 보시면 좋습니다. 항목으로 안 뜨는 비용은 호가창과 슬리피지 쪽에서 다뤘습니다.
11. L2는 값이 두 층으로 나뉘고, 뒤쪽은 이더리움에 남습니다
L2가 싼 데는 홍보가 아니라 구조적인 이유가 있고, 그 구조는 자기 문서의 식에 그대로 나와 있습니다. OP 계열 체인의 총액은 가스 사용량 곱하기 (기본수수료 더하기 우선수수료), 거기에 L1 수수료를 더한 값입니다.
앞부분은 L2에서 실행하는 값입니다. 뒤의 L1 수수료는 그 거래 데이터를 이더리움에 올리는 값입니다. 이 뒷부분이 있어서 L2가 검증 가능한 체인이 됩니다. 그리고 이 부분은 거래가 아무리 늘어도 사라지지 않습니다.
일은 그대로이고 값만 다릅니다
문서에 정확한 문장이 있습니다. L2에서 어떤 거래가 쓰는 가스량은 같은 거래를 이더리움에서 했을 때와 정확히 같다는 겁니다. 일이 줄어든 게 아닙니다.
다른 건 단위당 값과, 데이터 비용을 묶음 안에서 나눠 낸다는 점입니다. blob이라는 저장 방식을 쓰는 체인은 이더리움의 blob 데이터 가격이 L1 수수료를 크게 좌우합니다.
오가는 것 자체가 거래입니다
본체와 L2 사이를 오가는 것도 거래입니다. 넘어갈 때 한 번, 돌아올 때 한 번 값이 붙습니다. 그리고 넘어가는 거래는 본체에서 일어나므로 본체 요율로 계산됩니다.
소액을 옮기려다 옮기는 값이 더 나오는 상황이 여기서 생깁니다. 안에서 쓰는 값은 싼데 문을 통과하는 값은 싸지 않기 때문입니다.
돌아오는 쪽은 시간도 걸립니다. 설계에 따라 대기 기간이 붙는 경우가 있고, 그동안 자금은 묶여 있습니다. 값과 시간을 같이 봐야 전체 그림이 맞습니다.
그래서 내가 쓰지도 않는 체인의 사정으로 L2 수수료가 움직이는 일이 생깁니다. 밑에서 무슨 일이 벌어지는지는 이더리움 설명을 보시면 됩니다.

12. 출금 화면의 수수료는 네트워크 수수료가 아닙니다
거래소에서 출금하면 화면에 수수료가 뜹니다. 그 숫자를 네트워크가 매긴 값으로 읽기 쉬운데, 그렇지 않습니다. 서로 다른 두 수수료가 있고, 정하는 쪽도 받는 쪽도 다릅니다.
| 네트워크 수수료 | 거래소 출금 수수료 | |
|---|---|---|
| 정하는 쪽 | 네트워크(혼잡도) | 거래소(자체 수수료표) |
| 받는 쪽 | 채굴자·검증자 | 거래소 |
| 어떻게 움직이나 | 블록마다 | 고정해 두는 경우가 많습니다 |
| 보내는 금액과의 관계 | 없습니다 | 대개 없습니다. 코인·네트워크별 고정 |
| 내가 고를 수 있는 것 | 개인 지갑에서는 요율 | 네트워크 선택뿐 |
거래소 쪽 설명도 같은 이야기를 합니다. 바이낸스 US 도움말은 네트워크 수수료가 거래소가 아니라 네트워크가 정하는 값이고 채굴자와 검증자에게 간다고 적어 두었습니다. 거래소 수수료는 거래소가 자기 표로 정하고 거래소가 받는다고 되어 있습니다. 둘 다 출금액에서 먼저 빠진 뒤 지갑에 도착합니다.
거래소가 네트워크를 여러 개 여는 이유
같은 코인에 네트워크 선택지를 여러 개 열어두는 거래소가 많습니다. 이건 친절이라기보다 비용 구조가 서로 다르기 때문에 생기는 선택지입니다.
거래소 입장에서는 어느 네트워크로 내보내느냐에 따라 부담하는 값이 달라집니다. 그래서 네트워크별로 출금 수수료를 따로 매겨 둡니다.
이용자 입장에서 볼 것은 두 가지입니다. 내가 내는 값이 얼마인가, 그리고 받는 쪽이 그 네트워크를 여는가. 두 번째를 빠뜨리면 첫 번째를 아무리 잘 골라도 소용이 없습니다.
두 숫자가 같을 이유가 없습니다
거래소는 출금을 한 건씩 보내지 않습니다. 여러 건을 하나의 거래에 담습니다. 비트코인처럼 크기로 값을 매기는 체인에서는 이게 확실히 가볍습니다. 출력을 하나 더 붙이는 쪽이, 입력과 거스름돈을 따로 가진 거래를 하나 더 만드는 것보다 적게 듭니다.
그래서 거래소가 실제로 부담한 건당 비용이 얼마인지는 공개되지 않습니다. 정확히 말할 수 있는 건 여기까지입니다. 출금 화면의 숫자는 거래소가 정한 값이고, 네트워크가 청구한 값의 영수증이 아닙니다.
수수료가 0으로 뜨는 화면도 있습니다
같은 거래소 안에서 사용자끼리 보낼 때는 수수료가 0으로 표시되는 경우가 있습니다. 그건 할인이 아니라 애초에 다른 종류의 이동이기 때문입니다.
이 경우 코인이 블록체인 위에서 움직이지 않습니다. 거래소 내부 장부에서 한쪽 숫자를 줄이고 다른 쪽 숫자를 늘릴 뿐입니다. 블록의 자리를 쓰지 않으니 네트워크에 낼 값도 없습니다.
대신 그 기록은 거래소 안에만 남습니다. 밖으로 나가는 순간부터는 앞에서 본 계산이 다시 적용됩니다.
왜 코인마다, 네트워크마다 숫자가 다른가
출금 화면을 보면 코인마다 수수료가 제각각입니다. 어떤 코인은 소수점 아래로 붙고 어떤 코인은 눈에 띄게 큽니다. 같은 거래소인데도 그렇습니다.
체인마다 값을 매기는 기준이 다르기 때문입니다. 앞에서 본 그대로입니다. 크기로 매기는 체인과 작업량으로 매기는 체인과 자원으로 매기는 체인이 한 화면에 나란히 놓여 있는 겁니다.
같은 코인인데 네트워크만 바꿔도 숫자가 달라지는 것도 같은 이유입니다. USDT 하나가 여러 체인 위에 올라가 있고, 각 체인이 자기 방식으로 값을 매깁니다.
여기서 조심할 지점이 하나 있습니다. 출금 수수료가 싼 네트워크를 골랐는데 받는 쪽이 그 네트워크를 지원하지 않으면 코인이 도착하지 않습니다. 싼 쪽을 고르는 것과 받는 쪽이 여는 문을 맞추는 건 다른 문제입니다.
같은 코인인데 거래소마다 출금 비용이 크게 다른 이유도 여기 있습니다. 비교는 거래소 정리와 매수부터 보관까지 비용이 숨는 곳에 있고, 출금이 접수됐는데 도착하지 않았다면 출금이 대기 상태인 이유에서 단계별로 다뤘습니다.
출금 화면과 지원 네트워크 목록을 비교해볼 만한 곳들입니다. 아래 코드는 저희 추천 코드입니다.
Binance
Bybit
OKX
Gate.io
KuCoin
제휴 고지: 일부 링크는 제휴 링크이며, 추가 비용 없이 수수료를 받을 수 있습니다. 투자 조언이 아닙니다.
13. 내 거래가 실제로 얼마를 냈는지 탐색기에서 확인하기
여기까지 읽고 나면 남는 질문은 하나입니다. 내 거래는 실제로 얼마를 어디에 냈는가. 탐색기에서 직접 확인할 수 있습니다.
영수증에서 볼 네 가지
거래 해시를 탐색기에 넣으면 상세 화면이 열립니다. 여기서 볼 것은 네 개입니다. 상태, 사용한 가스량과 한도, 단위가격, 그리고 최종 청구액입니다.
상태는 성공인지 실패인지만 알려줍니다. 실패라도 그 자체로는 정보가 적습니다. 앞에서 본 대로 사용량과 한도를 비교해야 어떤 실패였는지가 나옵니다.
단위가격 칸에는 보통 기본수수료와 우선수수료가 따로 적혀 있습니다. 둘을 더한 값에 사용량을 곱하면 최종 청구액이 나옵니다. 화면의 숫자로 직접 검산해보시면 구조가 손에 잡힙니다.
확인 화면의 숫자와 다를 때
서명하기 전 지갑이 보여준 값과 탐색기의 최종 청구액이 다른 건 정상입니다. 앞의 값은 상한을 포함한 예상이고, 뒤의 값은 실제로 정산된 결과입니다.
비교할 대상을 잘못 잡으면 계속 이상해 보입니다. 예상값과 결과값을 비교할 게 아니라, 내 거래가 들어간 블록의 기본수수료와 비교해야 맞습니다.
비트코인은 보는 칸이 다릅니다
비트코인 탐색기에서는 가스 대신 크기와 요율을 봅니다. 가상바이트 단위의 크기와 가상바이트당 사토시 요율이 적혀 있고, 둘을 곱하면 총액입니다.
입력이 몇 개 들어갔는지도 같이 보입니다. 이 개수가 크기를 키운 주범인 경우가 많습니다. 가령 소액 입금을 여러 번 받아둔 지갑이라면 입력 개수부터 눈에 띌 겁니다.
영수증을 한 번 직접 뜯어보고 나면, 다음부터 화면의 숫자가 무엇을 말하는지 훨씬 빨리 읽힙니다.
14. 자주 도는 이야기와 실제 규칙
| 자주 듣는 말 | 규칙은 이렇습니다 |
|---|---|
| 새벽이나 주말이 싸다 | 기본수수료는 직전 블록이 얼마나 찼는지에 반응합니다. 계산에 시계가 없습니다. |
| 출금 수수료가 네트워크가 청구한 값이다 | 정하는 쪽도 받는 쪽도 다릅니다. |
| 많이 보내면 더 낸다 | 이더리움에도 비트코인에도 계산식에 금액이 들어가지 않습니다. |
| 실패했으면 안 나간다 | 블록에 들어갔으면 청구됩니다. 가스 소진이면 한도 전액입니다. |
| 가스 한도를 올리면 빨라진다 | 한도는 상한일 뿐입니다. 순서에 영향을 주는 건 우선수수료입니다. |
| L2는 수수료가 없다 | L2 실행분에 이더리움에 데이터를 올리는 값이 더해집니다. |
용어 정리
가스. 연산에 드는 노력의 양을 재는 단위입니다. 돈의 단위가 아닙니다.
gwei. ETH를 10억으로 나눈 단위이고, 가스 가격을 여기에 맞춰 표시합니다.
기본수수료. 프로토콜이 직전 블록을 보고 정하는 단위당 값이며 소각됩니다.
우선수수료. 검증자에게 붙이는 단위당 값이고, 순서에 영향을 줍니다.
가스 한도. 이 거래가 쓸 수 있는 최대 단위 수입니다.
가상바이트(vB). 비트코인이 거래 크기를 재는 단위이고 요율이 여기에 붙습니다.
멤풀. 블록에 들어가기를 기다리는 거래들이 모여 있는 곳입니다.
소각. 코인을 유통에서 없애는 것이고, 이더리움 기본수수료가 이렇게 처리됩니다.
15. 네 체계를 나란히 놓고 필자가 판단한 것
네 가지 수수료 체계를 나란히 놓고 보면 공통점이 하나 보입니다. 어느 쪽도 ‘가치’에 값을 매기지 않습니다. 이더리움은 작업량을 세고, 비트코인은 바이트를 세고, 트론은 자원을 세고, 솔라나는 서명과 연산을 셉니다. 옮기는 금액을 보는 곳이 하나도 없습니다.
그런데 수수료에 관해 들어오는 질문은 거의 다 그 반대를 전제합니다. 은행에서 가져온 감각이 화면 앞에서 한 번도 깨지지 않은 채 남아 있는 셈입니다.
가장 비싸게 치르는 오해 두 가지
첫째는 비례한다는 생각입니다. 소액은 ‘수수료 아까워서’ 안 보내고 큰 금액은 아무 생각 없이 보냅니다. 비용은 어느 쪽이나 같습니다. 실제로 값을 가른 건 지갑이 조각을 몇 개 모았는지, 그 순간 블록이 어땠는지입니다.
둘째는 실패하면 돌려받는다는 생각입니다. 돌려주지 않습니다. 되돌림이냐 가스 소진이냐에서 금액이 갈릴 뿐입니다. 제가 보기에 이 지점에서 대부분 이해가 완성됩니다. 낸 값이 배달에 대한 값이 아니라 시도에 대한 값이었다는 게 그때 분명해지기 때문입니다.
화면을 읽는 순서가 바뀝니다
이 구조를 알고 나면 수수료 화면에서 보는 순서가 달라집니다. 예전에는 총액부터 봤는데, 지금은 작업량과 단위가격을 먼저 갈라 봅니다.
총액이 커졌을 때 원인이 둘 중 어느 쪽인지가 대응을 가르기 때문입니다. 단위가격이 올라간 것과 내가 무거운 일을 시킨 것은 완전히 다른 상황입니다.
실패 화면도 같습니다. 예전에는 실패라는 글자만 봤는데, 지금은 사용량과 한도를 나란히 봅니다. 그 두 숫자가 그날 무슨 일이 있었는지 대부분 말해줍니다.
제가 스스로 약하다고 보는 부분
거래소 비교가 이 글에서 가장 약합니다. 공개 문서로 확인되는 건 누가 정하고 누가 받느냐까지입니다. 어느 거래소의 건당 실제 원가가 얼마인지는 확인할 수 없습니다.
묶어 보내기가 크기 기반 체인에서 원가를 낮춘다는 건 분명한데, 얼마나 낮추는지는 공개되지 않습니다. 그러니 그 섹션은 구조에 대한 설명으로만 읽으시면 됩니다. 두 번째 질문에 대한 더 나은 자료가 있다면 그 자리에 들어가야 할 내용입니다.
네 체계 전부에서 흔들리지 않는 건 맨 앞의 문장입니다. 수수료는 블록 안의 자리를 사는 값입니다. 나머지는 각 체인이 그 자리의 값을 어떻게 매기는지에 대한 세부일 뿐입니다.









