跳转到主要内容
TRON 约每 3 秒出一个区块,支持高吞吐的交易和智能合约执行。TRON 使用独特的资源模型(Energy 和 Bandwidth)和 Witness(超级代表)共识机制。 Schema 仓库github.com/chainstream-io/streaming_protobuf/tron

Message Types 总览

TRON Streams 提供以下消息类型:
Message Type说明Topic
TradeEventsDEX 交易事件tron.dex.trades
TokenEventsToken 事件tron.tokens
BalanceEvents余额变动事件tron.balances
DexPoolEvents流动性池事件tron.dex.pools
TransfersMessage转账消息tron.v1.transfers.proto
CandlestickEventsK线数据tron.candlesticks

Block-Level Data

BlockHeader 核心字段

字段类型说明
Numberuint64区块号
Hashbytes区块哈希
ParentHashbytes父区块哈希
TimestampTimestamp出块时间
TxTrieRootbytes交易树根
Versionuint32区块版本

Witness(超级代表)信息

字段说明
AddressWitness 地址
IdWitness ID
Signature区块签名
TRON 使用 DPoS 共识机制,由 27 个超级代表(Witness)轮流出块。

Transaction-Level Data

TransactionHeader

字段类型说明
Hashbytes交易哈希
Feeuint64交易费用
Indexuint32区块内索引
ExpirationTimestamp过期时间
FeeLimituint64费用上限
Signatures[]bytes签名列表
FeePayerbytes费用支付方

Result — 执行结果

字段说明
Status执行状态
Success是否成功
Message失败时的错误信息

Receipt — 资源消耗

字段说明
EnergyUsageTotal总 Energy 消耗
EnergyFeeEnergy 费用
NetUsage带宽消耗
NetFee带宽费用

Contract

包含合约执行详情:
字段说明
Address合约地址
Type合约类型(TransferContract、TriggerSmartContract 等)
Parameters调用参数
InternalTransactions内部交易
Logs事件日志
ExecutionTrace执行 Trace
WithdrawInfo奖励提取信息

Transfer Data

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转账金额
IdstringToken ID(NFT)
URIstringToken URI
CurrencyTokenInfoToken 信息
Successbool是否成功
Indexuint32转账索引
TransactionHeaderTransactionHeader交易头信息

TokenInfo 结构

字段类型说明
SmartContractstring合约地址
Delegatedbool是否委托
DelegatedTostring委托地址
ProtocolNamestring协议名称
NamestringToken 名称
SymbolstringToken 符号
Decimalsint32精度
HasURIbool是否有 URI
Fungiblebool是否同质化
AssetIdstring资产 ID(TRC-10)

TRON Token 标准

标准说明
TRC-10TRON 原生 Token,无需智能合约
TRC-20智能合约 Token(类似 ERC-20)
TRC-721NFT Token(类似 ERC-721)
TRC-10 是 TRON 独有的原生 Token 标准,创建和转账更便宜,但功能不如 TRC-20 灵活。

DEX Data

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    // 智能合约消耗
  EnergyFee: 0               // 如有质押则为 0
  NetUsage: 265              // 交易数据大小
  NetFee: 0                  // 如有质押则为 0
}

Witness 系统

特性说明
名称Witness(超级代表)
数量27 个活跃超级代表
选举持币者投票选举
出块轮流出块,约 3 秒/块
BlockMessage 中包含 Witness 的地址、ID 和签名。

预定义合约类型

TRON 为常见操作预定义了合约类型:
类型说明
TransferContractTRX 转账
TransferAssetContractTRC-10 转账
TriggerSmartContract调用智能合约
CreateSmartContract创建智能合约
FreezeBalanceV2Contract质押 TRX
UnfreezeBalanceV2Contract解除质押
DelegateResourceContract资源委托
WithdrawBalanceContract提取奖励
通过 Contract 的 Type 字段标识。

资源委托

用户可以将 Energy 和 Bandwidth 委托给其他账户使用,这在 TRON 生态中常用于:
  • 降低用户交易成本
  • DApp 为用户代付资源

Topic → Message Type 映射表

TopicProto FileMessage Type说明
tron.dex.tradestrade_event.protoTradeEventsDEX 交易事件
tron.dex.trades.processedtrade_event.protoTradeEvents含 USD 价格、可疑标记
tron.tokenstoken_event.protoTokenEventsToken 事件
tron.tokens.processedtoken_event.protoTokenEvents含描述、图片、社交链接
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.protoCandlestickEventsK线数据

代码示例

Python 示例:消费 TRON DEX 交易

from kafka import KafkaConsumer
from common import trade_event_pb2  # 从 streaming_protobuf 仓库获取

# 创建 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'
)

# 消费并解析消息
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 Token 事件

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:
        # 过滤 USDT 事件
        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("---")

相关文档