TRC-20 전송 수수료 해부: 에너지, bandwidth, 그리고 실제로 부과되는 것
두 가지 리소스, 하나의 트랜잭션
TRON의 모든 TRC-20 전송은 두 가지 별개의 리소스, 즉 bandwidth와 에너지를 소모합니다. 이들은 별도로 청구되고, 별도의 풀에서 차감되며, 완전히 다른 보충 메커니즘을 가집니다. 대부분의 개발자는 둘 중 하나는 이해하지만, 둘 사이의 상호작용에서 비용이 관리 가능한 수준에 머물거나 폭증하게 됩니다.
Bandwidth는 트랜잭션을 네트워크에 브로드캐스트하는 원시 바이트 비용을 충당합니다. 에너지는 스마트 컨트랙트 로직을 실행하는 VM 실행 비용을 충당합니다. 단순 TRX 전송은 bandwidth만 필요합니다. 토큰 컨트랙트의 transfer(address,uint256) 함수를 트리거하는 TRC-20 전송은 두 가지 모두 필요합니다.
Bandwidth: 더 단순한 절반
모든 TRON 계정은 기본 할당을 통해 하루 600의 무료 bandwidth를 받습니다. 표준 TRC-20 전송 트랜잭션은 일반적으로 약 345 바이트이며, 이는 대략 345 bandwidth 단위에 매핑됩니다(네트워크는 서명 및 메모 필드를 포함한 트랜잭션 데이터의 바이트당 1 bandwidth를 부과합니다).
계정에 무료 일일 bandwidth 또는 bandwidth용으로 스테이킹된 TRX가 충분하다면, 이 차원에서 트랜잭션 비용은 없습니다. Bandwidth 풀이 비어 있으면, 네트워크는 bandwidth 단위당 0.001 TRX(바이트당 1,000 SUN) 비율로 직접 TRX를 소각합니다. 345 단위 트랜잭션의 경우 송신 주소에서 0.345 TRX가 소각되며, 스테이킹이 필요하지 않습니다.
무료 일일 600 단위는 UTC 00:00에 재설정됩니다. 저볼륨 전송을 하는 경우, bandwidth 비용에 거의 도달하지 않을 것입니다. 대용량 송신자는 일반적으로 소각보다는 bandwidth용으로 TRX를 스테이킹합니다. 스테이킹 수율이 소각 비율보다 TRX당 더 많은 트랜잭션을 충당하기 때문입니다.
에너지: 실제 비용이 있는 곳
USDT TRC-20 전송은 약 65,000 energy를 소비합니다. 이 수치는 TRON Virtual Machine 내부의 EVM 호환 바이트코드 실행에서 나옵니다. 컨트랙트의 잔액 매핑에 대한 스토리지 읽기와 쓰기, Transfer 로그에 대한 이벤트 발생, 내부 안전 검사 등이 포함됩니다. 정확한 수치는 스토리지 슬롯이 처음 쓰여지는지(콜드) 또는 업데이트되는지(웜)에 따라 약간 다를 수 있지만, 65,000은 두 활성 주소 간 일반적인 USDT 전송의 표준 수치입니다. 현재 USDT 잔액이 0인 수신자에게로의 전송은 새 스토리지 슬롯이 할당되기 때문에 약 130,000 energy로 대략 두 배가 됩니다.
에너지에는 두 가지 출처가 있습니다. 자신이 스테이킹한 TRX 또는 제3자로부터 임대(위임)한 에너지입니다. TRX를 스테이킹하면 네트워크 전체 에너지 풀에서 비례하는 몫을 얻게 되며, 풀은 24시간에 걸쳐 100%로 선형적으로 재생성됩니다. 스테이킹된 TRX당 정확한 에너지 비율은 네트워크 전체에 스테이킹된 총 양에 따라 다르며 시간이 지남에 따라 변합니다. 자신의 스테이킹만으로 65,000 energy를 회복하려면 상당한 양의 TRX가 잠겨야 하며, 이것이 에너지 임대가 존재하는 이유입니다.
에너지가 떨어지면 일어나는 일
트랜잭션이 65,000 energy를 필요로 하는데 계정에 충분한 양이 없다면, 네트워크는 부분 실행을 조용히 처리하지 않습니다. 대신 트랜잭션의 fee_limit을 확인하고 그 한도까지 계정에서 TRX를 소각하여 에너지 부족분을 충당한 다음, 전체 트랜잭션을 실행합니다. 부족분이 fee_limit을 초과한다면, 상태 변경이 커밋되기 전에 트랜잭션이 실패합니다.
이는 피해야 할 시나리오입니다. 스테이킹된 에너지에 추가로 소각된 TRX까지 지불하거나, 더 나쁘게는 fee_limit이 너무 낮게 설정되어 트랜잭션이 완전히 실패하는 경우입니다. 전략을 결정하기 전에 가격 페이지에서 65,000 energy 충당에 대한 현재 TRX 비용을 확인할 수 있습니다.
Stake 2.0은 위임 작동 방식을 바꿨습니다
Stake 2.0(2023년 4월 메인넷에서 활성화) 이전에는 스테이킹과 위임이 얽혀 있었습니다. 리소스 소유자는 freezeBalance를 호출하고 수신자 주소를 직접 지정했으며, 프리즈는 그 수신자에 묶여 있었고, 모델은 리소스 시장에 필요한 유연성이 없었습니다.
Stake 2.0은 freezeBalanceV2를 도입하고 스테이킹 행위를 위임 행위와 분리했습니다. 이제 TRX를 개인 에너지 또는 bandwidth 풀에 스테이킹한 다음, delegateResource를 통해 그 리소스를 별도로 위임합니다. 이는 다음을 의미합니다.
- 위임은 기본적으로 철회 가능하며 언스테이킹 없이 재할당할 수 있습니다. 선택적인
lock플래그가 있습니다. true로 설정하면 네트워크의 최소 잠금 기간(현재 3d) 동안 위임을 유지합니다. 그 플래그 없이는 언제든 위임을 회수할 수 있습니다. - 14일 언프리즈 대기 기간은 인출 시 기초 TRX 스테이킹에 적용되며, 위임 자체에는 적용되지 않습니다.
- 에너지 임대 플랫폼은 단일 스테이킹된 포지션에서 많은 수신자 주소에 위임을 순환시킬 수 있습니다.
온체인에서 tronenergyrent.com과 같은 임대 플랫폼이 주소에 에너지를 위임하면, 위임된 양은 계정 상태에 반영되어 wallet/getaccount를 통해 acquired_delegated_frozenV2_balance_for_energy로 볼 수 있습니다. 해당 사용 가능 에너지는 계정의 에너지 한도에 표시되며 별도 작업 없이 즉시 사용할 수 있습니다.
임대 비용 vs. 소각 비용
임대는 1h, 1d, 3d, 30d라는 기간 등급별로 가격이 책정됩니다. 1h 등급은 절대 TRX 기준으로 가장 저렴하고, 30d 등급은 가장 비싸며, 1d와 3d가 그 사이입니다. 가격은 플랫폼의 기초 TRX 스테이킹이 주소에 얼마나 오래 잠겨 있는지를 반영합니다. 더 긴 기간 = 더 많은 자본 묶임 = 더 많은 TRX 청구. 현재 등급별 TRX 수치는 가격 페이지를 참조하십시오.
소각과 비교하면, 미리 계획하는 송신자에게는 임대가 거의 항상 유리합니다. 네트워크의 동적 비율로 전체 65,000 energy를 소각하는 것은 직관적이지만, 총 네트워크 에너지 수요가 변할 때 급격히 움직일 수 있는 현재 소각 비용에 그대로 노출됩니다. 임대는 주문 시점에 고정 TRX 비용을 제공합니다.
실행 중 리소스 우선순위
트랜잭션이 실행될 때 VM은 특정 순서로 에너지를 차감합니다.
- 다른 계정이 주소에 위임한 리소스로 뒷받침되는 에너지
- 자신이 스테이킹한 TRX의 에너지
- 남은 부족분을 충당하기 위해 계정에서 소각된 TRX(
fee_limit으로 제한)
이 순서는 임대 전략에 중요합니다. 위임된 에너지가 자신의 스테이킹보다 먼저 소비됩니다. 따라서 자신의 스테이킹된 에너지와 임대된 에너지를 모두 가지고 있다면, 임대된 부분이 먼저 차감됩니다. 임대 기간이 만료되고 위임이 회수되면, 계정은 자신의 스테이킹된 잔액으로 되돌아가거나, 그것이 부족하면 TRX 소각으로 넘어갑니다.
Bandwidth도 동일한 우선순위를 따릅니다. 무료 일일 할당량 먼저, 그다음 스테이킹된 bandwidth, 그다음 TRX 소각입니다. 리소스 간 대체는 없습니다. 여분의 에너지를 사용하여 bandwidth 부족분을 충당할 수 없습니다.
온체인에서 계정의 리소스 상태 읽기
TRON API 엔드포인트 wallet/getaccountresource는 다음 필드를 가진 JSON 객체를 반환합니다. 알아두어야 합니다.
EnergyLimit: 자신의 스테이킹에서 계정에 현재 사용 가능한 총 에너지EnergyUsed: 현재 24시간 기간에 소비된 에너지TotalEnergyLimit: 네트워크 전체 총 에너지(스테이킹 대 에너지 비율 계산에 유용)TotalEnergyWeight: 에너지에 대한 네트워크 전체 총 스테이킹 가중치freeNetLimit: 무료 일일 bandwidth 할당량(보통 600)NetLimit: 자신이 스테이킹한 TRX의 bandwidthNetUsed: 오늘 소비된 bandwidthTotalNetLimit,TotalNetWeight: bandwidth에 대한 네트워크 전체 총합
다른 사람이 주소에 위임한 에너지의 양을 보려면, wallet/getaccount를 쿼리하고 acquired_delegated_frozenV2_balance_for_energy 필드를 읽으십시오. 잠금 만료를 포함한 위임자별 세부 정보는 wallet/getdelegatedresourcev2를 사용하십시오.
TRC-20 전송을 프로그램적으로 보내는 시스템을 구축하고 있다면, 브로드캐스트 전에 이 엔드포인트를 폴링하면 예상치 못한 TRX 소각이 발생하기 전에 에너지 부족 상황을 감지할 수 있습니다. API 문서는 자동화 워크플로에 리소스 검사와 에너지 주문을 통합하는 방법을 다룹니다.
토큰 컨트랙트별로 에너지 소비가 다른 이유
USDT의 65,000 energy 수치는 TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t의 Tether 컨트랙트에 특정한 것입니다. 다른 TRC-20 컨트랙트는 다를 것입니다. 추가 로직(전송 시 수수료 메커니즘, 라우터에 대한 허용량 검사, 여러 토픽에 대한 이벤트 발생)이 있는 토큰 컨트랙트는 호출당 더 많은 에너지를 소비합니다. 최소한의 ERC-20 스타일 컨트랙트는 30,000 미만일 수 있습니다.
컨트랙트의 실제 에너지 비용을 알 수 있는 유일하게 신뢰할 만한 방법은 트랜잭션을 시뮬레이션하거나 블록 익스플로러에서 해당 특정 컨트랙트의 과거 실행 기록을 보는 것입니다. USDT 수치를 모든 TRC-20 토큰에 보편적으로 적용하지 마십시오.