메인 콘텐츠로 건너뛰기
TRON은 약 3초마다 블록을 생성하며, 높은 처리량의 트랜잭션과 스마트 컨트랙트 실행을 지원합니다. TRON은 독자적인 리소스 모델(Energy 및 Bandwidth)과 Witness(슈퍼 대표) 합의 메커니즘을 사용합니다. Schema 저장소: github.com/chainstream-io/streaming_protobuf/tron

메시지 유형 개요

TRON Streams는 다음 메시지 유형을 제공합니다:
메시지 유형설명Topic
TradeEventsDEX 거래 이벤트tron.dex.trades
TokenEvents토큰 이벤트tron.tokens
BalanceEvents잔고 변동 이벤트tron.balances
DexPoolEvents유동성 풀 이벤트tron.dex.pools
TransfersMessage전송 메시지tron.v1.transfers.proto
CandlestickEvents캔들스틱 데이터tron.candlesticks

블록 레벨 데이터

BlockHeader 핵심 필드

필드유형설명
Numberuint64블록 번호
Hashbytes블록 해시
ParentHashbytes부모 블록 해시
TimestampTimestamp블록 시간
TxTrieRootbytes트랜잭션 트리 루트
Versionuint32블록 버전

Witness(슈퍼 대표) 정보

필드설명
AddressWitness 주소
IdWitness ID
Signature블록 서명
TRON은 DPoS 합의 메커니즘을 사용하며, 27명의 슈퍼 대표(Witness)가 교대로 블록을 생성합니다.

트랜잭션 레벨 데이터

TransactionHeader

필드유형설명
Hashbytes트랜잭션 해시
Feeuint64트랜잭션 수수료
Indexuint32블록 내 인덱스
ExpirationTimestamp만료 시간
FeeLimituint64수수료 한도
Signatures[]bytes서명 목록
FeePayerbytes수수료 납부자

Result — 실행 결과

필드설명
Status실행 상태
Success성공 여부
Message실패 시 오류 메시지

Receipt — 리소스 소비

필드설명
EnergyUsageTotal총 Energy 소비
EnergyFeeEnergy 수수료
NetUsageBandwidth 소비
NetFeeBandwidth 수수료

Contract

컨트랙트 실행 세부 정보를 포함합니다:
필드설명
Address컨트랙트 주소
Type컨트랙트 유형 (TransferContract, TriggerSmartContract 등)
Parameters호출 매개변수
InternalTransactions내부 트랜잭션
Logs이벤트 로그
ExecutionTrace실행 트레이스
WithdrawInfo보상 인출 정보

전송 데이터

TransfersMessage는 TRON 체인 전송 정보를 제공합니다 (Topic: tron.v1.transfers.proto).

TransfersMessage 구조

message TransfersMessage {
  Chain Chain = 1;
  BlockHeader Header = 2;
  repeated Transfer Transfers = 3;
}

Transfer 구조

필드유형설명
CallIndexuint64호출 인덱스
LogIndexuint64로그 인덱스
Senderstring발신자 주소
Receiverstring수신자 주소
Amountstring전송 금액
Idstring토큰 ID (NFT)
URIstring토큰 URI
CurrencyTokenInfo토큰 정보
Successbool성공 상태
Indexuint32전송 인덱스
TransactionHeaderTransactionHeader트랜잭션 헤더

TokenInfo 구조

필드유형설명
SmartContractstring컨트랙트 주소
Delegatedbool위임 여부
DelegatedTostring위임 주소
ProtocolNamestring프로토콜 이름
Namestring토큰 이름
Symbolstring토큰 심볼
Decimalsint32소수점 자릿수
HasURIboolURI 존재 여부
Fungiblebool대체 가능 여부
AssetIdstring자산 ID (TRC-10)

TRON 토큰 표준

표준설명
TRC-10TRON 네이티브 토큰, 스마트 컨트랙트 불필요
TRC-20스마트 컨트랙트 토큰 (ERC-20과 유사)
TRC-721NFT 토큰 (ERC-721과 유사)
TRC-10은 TRON 고유의 네이티브 토큰 표준으로, 생성 및 전송 비용이 저렴하지만 TRC-20보다 유연성이 낮습니다.

DEX 데이터

TradeEvents는 DEX 거래 데이터를 제공합니다 (Topic: tron.dex.trades). 공통 TradeEvent 구조를 사용합니다.

Trade 핵심 필드

필드설명
token_a_address / token_b_address거래 쌍 토큰 주소
user_a_amount / user_b_amount사용자 거래 수량
pool_address풀 주소
vault_a / vault_b풀 Vault 주소
vault_a_amount / vault_b_amountVault 수량

DApp 정보

필드설명
program_addressDEX 컨트랙트 주소 (예: SunSwap)
inner_program_address내부 프로그램 주소
chain체인 식별자 (CHAIN_TRON)

DexPoolEvent - 유동성 풀

필드설명
type이벤트 유형 (INITIALIZE/INCREASE_LIQUIDITY/DECREASE_LIQUIDITY/SWAP)
address풀 주소
token_a_address / token_b_address토큰 주소
token_a_amount / token_b_amount토큰 수량
lp_walletLP 지갑 주소

TRON 체인 특성

Energy 및 Bandwidth 리소스 모델

EVM의 Gas 모델과 달리, TRON은 두 가지 리소스를 사용합니다:
리소스설명획득 방법
Energy스마트 컨트랙트 실행 소비량 측정TRX 스테이킹 또는 지불
Bandwidth (Net)트랜잭션 데이터 크기 소비량 측정TRX 스테이킹 또는 지불
Receipt에 두 리소스의 사용량과 수수료가 표시됩니다:
Receipt {
  EnergyUsageTotal: 50000    // Smart contract consumption
  EnergyFee: 0               // 0 if staked
  NetUsage: 265              // Transaction data size
  NetFee: 0                  // 0 if staked
}

Witness 시스템

특성설명
이름Witness (슈퍼 대표)
수량27명의 활성 슈퍼 대표
선출토큰 보유자 투표
블록 생성교대 생성, 약 3초/블록
BlockMessage에는 Witness의 주소, ID, 서명이 포함됩니다.

사전 정의 컨트랙트 유형

TRON은 일반적인 작업을 위해 컨트랙트 유형을 사전 정의합니다:
유형설명
TransferContractTRX 전송
TransferAssetContractTRC-10 전송
TriggerSmartContract스마트 컨트랙트 호출
CreateSmartContract스마트 컨트랙트 생성
FreezeBalanceV2ContractTRX 스테이킹
UnfreezeBalanceV2Contract스테이킹 해제
DelegateResourceContract리소스 위임
WithdrawBalanceContract보상 인출
Contract의 Type 필드로 식별됩니다.

리소스 위임

사용자는 Energy와 Bandwidth를 다른 계정에 위임할 수 있습니다. TRON 생태계에서 다음 용도로 일반적으로 사용됩니다:
  • 사용자 트랜잭션 비용 절감
  • DApp이 사용자를 위해 리소스 대납

Topic → 메시지 유형 매핑

TopicProto File메시지 유형설명
tron.dex.tradestrade_event.protoTradeEventsDEX 거래 이벤트
tron.dex.trades.processedtrade_event.protoTradeEventsUSD 가격, 의심 플래그 포함
tron.tokenstoken_event.protoTokenEvents토큰 이벤트
tron.tokens.processedtoken_event.protoTokenEvents설명, 이미지, SNS 링크 포함
tron.balancesbalance_event.protoBalanceEvents잔고 변동 이벤트
tron.v1.transfers.prototron/transfers_message.protoTransfersMessageTRON 전송 메시지
tron.v1.transfers.processed.prototron/transfers_message.protoTransfersMessage처리된 전송 메시지
tron.dex.poolsdex_pool_event.protoDexPoolEvents유동성 풀 이벤트
tron.candlestickscandlestick.protoCandlestickEvents캔들스틱 데이터

코드 예제

Python 예제: TRON DEX 거래 소비

from kafka import KafkaConsumer
from common import trade_event_pb2  # Get from streaming_protobuf repository

# Create consumer
consumer = KafkaConsumer(
    'tron.dex.trades',
    bootstrap_servers=['<your_broker_address>'],
    security_protocol='SASL_SSL',
    sasl_mechanism='SCRAM-SHA-512',
    sasl_plain_username='your_username',
    sasl_plain_password='your_password',
    auto_offset_reset='latest',
    enable_auto_commit=False,
    group_id='my-tron-consumer'
)

# Consume and parse messages
for message in consumer:
    trade_events = trade_event_pb2.TradeEvents()
    trade_events.ParseFromString(message.value)
    
    for event in trade_events.events:
        print(f"Pool: {event.trade.pool_address}")
        print(f"Token A: {event.trade.token_a_address}")
        print(f"Token B: {event.trade.token_b_address}")
        print(f"Amount A: {event.trade.user_a_amount}")
        print(f"Amount B: {event.trade.user_b_amount}")
        print(f"Block: {event.block.height}")
        print(f"DEX: {event.d_app.program_address}")
        print("---")

TRC-20 토큰 이벤트 모니터링

from kafka import KafkaConsumer
from common import token_event_pb2

consumer = KafkaConsumer(
    'tron.tokens',
    bootstrap_servers=['<your_broker_address>'],
    security_protocol='SASL_SSL',
    sasl_mechanism='SCRAM-SHA-512',
    sasl_plain_username='your_username',
    sasl_plain_password='your_password',
    auto_offset_reset='latest',
    group_id='my-tron-token-consumer'
)

# USDT on TRON
USDT_ADDRESS = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'

for message in consumer:
    token_events = token_event_pb2.TokenEvents()
    token_events.ParseFromString(message.value)
    
    for event in token_events.events:
        # Filter USDT events
        if event.token.address == USDT_ADDRESS:
            print(f"Event Type: {event.type}")  # CREATED or UPDATED
            print(f"Token: {event.token.symbol}")
            print(f"Name: {event.token.name}")
            print(f"Decimals: {event.token.decimals}")
            print("---")

관련 문서

개념 및 통합 가이드

Kafka Streams 통합 기초

EVM Streams

EVM 체인 데이터 스트림

Solana Streams

Solana 고처리량 데이터 스트림

WebSocket 실시간 데이터

WebSocket 통합