支持的交易类型详解
TRON 支持多种类型的交易,这些交易在结构上大体一致(详见交易章节),但其 raw_data.contract 字段中的具体内容会因交易类型而有所不同。本文将针对各交易类型,分别介绍 raw_data.contract 字段的结构及各字段的含义,帮助开发者更高效地构建和解析交易数据。
1. AccountCreateContract
功能说明
创建新的 TRON 基础账户,需支付 1 TRX 的激活费用
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 创建者地址 |
account_address | bytes | 新生成的地址 |
type | enum | 账户类型 (0 = 普通账户,1 = 资产账户,2 = 合约账户) |
2. TransferContract
功能说明
执行 TRX 转账操作
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 发送方地址 |
to_address | bytes | 接收方地址 |
amount | int64 | 转账金额 (单位:SUN) |
3. TransferAssetContract
功能说明
执行 TRC-10 代币转账
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
asset_name | bytes | 代币唯一标识符 |
owner_address | bytes | 代币发送方地址 |
to_address | bytes | 接收方地址 |
amount | int64 | 转账数量(需乘以精度) |
规则
- 精度计算公式:
实际数量 = amount / 10^precision
(precision 在代币发行时定义)
4. VoteWitnessContract
功能说明
对超级代表(SR)进行投票
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 投票者地址 |
votes | Vote[] | 投票列表(最多 30 项) |
投票子结构
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
vote_address | bytes | 超级代表地址 |
vote_count | int64 | 票数(1 票 = 1 质押 TRX) |
5. WitnessCreateContract
功能说明
注册成为超级代表候选人
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 申请人地址 |
url | bytes | 官网 URL(UTF-8编码) |
6. WitnessUpdateContract
功能说明
更新超级代表的公开信息
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 超级代表地址 |
update_url | bytes | 新官网 URL(可为空) |
7. AssetIssueContract
功能说明
创建并配置 TRC-10 标准代币
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
id | string | 代币唯一标识符 |
owner_address | bytes | 代币发行方地址 |
name | bytes | 代币全称(UTF-8,最长 32 字节) |
abbr | bytes | 代币缩写(UTF-8,最长 16 字节) |
total_supply | int64 | 代币总供应量(≥ 1) |
frozen_supply | FrozenSupply[] | 代币冻结计划列表 |
trx_num | int32 | 兑换 1 个代币需要的 TRX 数量 |
precision | int32 | 小数位精度(0-8) |
num | int32 | 代币发行批次编号 |
start_time | int64 | 众筹开始时间(UNIX 毫秒) |
end_time | int64 | 众筹结束时间(UNIX 毫秒) |
order | int64 | 预留字段(当前无实际用途) |
vote_score | int32 | 投票权重系数 |
description | bytes | 代币描述文本(UTF-8) |
url | bytes | 代币官网链接(UTF-8) |
FrozenSupply 结构
| 子字段 | 类型 | 描述 |
|---|---|---|
frozen_amount | int64 | 冻结的代币数量 |
frozen_days | int64 | 冻结天数(≥ 3 天) |
规则
- 发行条件
- 总供应量必须满足:
total_supply ≥ 1 - 代币名称需全网唯一
8. ParticipateAssetIssueContract
功能说明
参与 TRC-10 代币众筹
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 参与者地址 |
to_address | bytes | 发送地址 |
asset_name | bytes | 目标代币 ID |
amount | int64 | 用于购买已发行代币的 TRX 金额(单位:SUN) |
规则
- 兑换逻辑:
获得代币量 = (投入TRX数 × 代币单价分母) / (代币单价分子 × 10^精度)- 时间限制:
必须在代币众筹期内操作(start_time ≤ 当前时间 ≤ end_time) - 失败场景:
- 众筹额度已满
- 参与者 TRX 余额不足
9. AccountUpdateContract
功能说明
更新账户基础信息
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 操作者地址 |
account_name | bytes | 新账户名称(UTF-8) |
10. FreezeBalanceContract
功能说明
质押 TRX 以获取带宽/能量资源。
请注意,这个接口在 Stake 2.0 开启后已不再可用。
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 质押操作者地址 |
frozen_balance | int64 | 质押的TRX数量(单位:SUN) |
frozen_duration | int64 | 质押天数 |
resource | enum | 资源类型: 0=带宽(BANDWIDTH) 1=能量(ENERGY) |
receiver_address | bytes | 资源接收地址(可代理给其他地址) |
规则
- 接收地址必须已激活
- 若未指定接收地址,默认资源归属
owner_address
11. UnfreezeBalanceContract
功能说明
解冻已质押的 TRX(Stake1.0)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 解冻操作者地址 |
resource | enum | 资源类型: 0=带宽(BANDWIDTH) 1=能量(ENERGY) |
receiver_address | bytes | 原质押资源的接收地址 |
12. WithdrawBalanceContract
功能说明
提取超级代表(SR)的区块奖励,或用户提取投票奖励。
超级代表可以从账户余额中提取;用户可以从超级代表处领取投票奖励,并将其存入账户余额。
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 超级代表或用户地址 |
规则
- 奖励计算:
- 区块奖励 = 出块数 × 当前区块奖励
- 投票奖励 = 得票数 × 投票奖励系数
- 提取限制:
- 最低提取金额:1 TRX
- 每 24 小时限提1次
13. UnfreezeAssetContract
功能说明
解冻已冻结的 TRC-10 代币(需发行方授权)
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 操作者地址 |
14. UpdateAssetContract
功能说明
修改已发行的 TRC-10 代币基础参数
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 代币发行方地址 |
description | bytes | 新的代币描述(UTF-8 编码) |
url | bytes | 新的代币官网链接(UTF-8 编码) |
new_limit | int64 | 新持币地址数量上限 |
new_public_limit | int64 | 新公募限额 |
15. ProposalCreateContract
功能说明
创建新的网络参数修改提案
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 提案创建者地址 |
parameters | map<int64, int64> | 参数修改列表(键值对) |
规则
- 提案内容:
- 可修改参数包括:区块奖励、交易手续费率等
- 单次提案最多包含 20 项修改
- 生效条件:
- 需获得 2/3+1 位超级代表批准
- 批准后在下个维护周期生效
16. ProposalApproveContract
功能说明
超级代表对提案进行投票表决
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 投票代表地址 |
proposal_id | int64 | 目标提案 ID |
is_add_approve | bool | 是否批准提案(true 为批准) |
规则
- 投票权限:
- 仅当前周期的活跃超级代表可投票
- 每个提案每位代表只能投票 1次
- 表决时效:
- 超时未达票数自动废弃
17. ProposalDeleteContract
功能说明
删除已存在的网络参数修改提案
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 提案删除操作者地址 |
proposal_id | int64 | 目标提案 ID |
规则
- 删除权限:
- 仅提案创建者或超级代表委员会可操作
- 已生效的提案不可删除
- 时效限制:
- 提案创建后需超过 24小时 才允许删除
18. SetAccountIdContract
功能说明
为账户设置自定义唯一标识符(账户 ID)
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 账户地址 |
account_id | bytes | 自定义 ID(ASCII 字符串) |
19. CustomContract
功能说明
执行旧版自定义合约逻辑(已弃用)
字段说明
| 字段名称 | 数据类型 | 描述 |
|---|---|---|
owner_address | bytes | 操作者地址(必须为 SR 节点) |
contract_data | bytes | 自定义数据(最大 256 KB) |
规则
- 兼容性限制
- 仅支持版本 ≤ v4.1.2
- 新合约必须使用
TriggerSmartContract
20. CreateSmartContract
功能说明
部署智能合约
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 合约部署者地址 |
new_contract | SmartContract | 智能合约 |
call_token_value | int64 | 初始资金注入量(TRC-10) |
token_id | int64 | TRC-10 代币 ID |
SmartContract结构
| 字段名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
origin_address | bytes | 是 | 合约创建者地址 |
contract_address | bytes | 是 | 合约链上地址 |
abi | ABI | 是 | 合约接口定义(包含方法/事件等元数据) |
bytecode | bytes | 是 | EVM 字节码 |
call_value | int64 | 否 | 调用时转账金额(单位:SUN,1 TRX = 1,000,000 SUN) |
consume_user_resource_percent | int64 | 是 | 用户资源消耗比例(范围 0-100,默认 100) |
name | string | 是 | 合约名称 |
origin_energy_limit | int64 | 是 | 创建者预分配能量(最小值:1_000_000) |
code_hash | bytes | 是 | 字节码哈希 |
trx_hash | bytes | 是 | 部署交易哈希 |
version | int32 | 是 | 协议版本 |
ABI 嵌套结构
Entry 结构字段
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
anonymous | bool | 否 | 事件匿名标识(仅对Event类型有效) |
constant | bool | 否 | ⚠️已废弃(由stateMutability替代) |
name | string | 是 | 方法/事件名称(构造函数为空) |
inputs | repeated Param | 是 | 输入参数列表(最少 1 个) |
outputs | repeated Param | 否 | 输出参数(仅Function有效) |
type | EntryType | 是 | 条目类型(见下方枚举表) |
payable | bool | 否 | ⚠️已废弃(由stateMutability替代) |
stateMutability | StateMutabilityType | 是 | 状态可变性(见下方枚举表) |
枚举类型表
EntryType 枚举
| 值 | 枚举名 | 对应场景 | Solidity 示例 |
|---|---|---|---|
| 0 | UnknownEntryType | 未知类型(协议保留值) | - |
| 1 | Constructor | 合约构造函数 | constructor() payable {} |
| 2 | Function | 普通函数 | function transfer() external {} |
| 3 | Event | 链上事件 | event Transfer(address indexed) |
| 4 | Fallback | 备用函数 | fallback() external {} |
| 5 | Receive | 接收TRX函数 | receive() external payable {} |
| 6 | Error | 自定义错误 | error InsufficientBalance(); |
StateMutabilityType 枚举
| 值 | 枚举名 | 状态影响 | 修饰符示例 |
|---|---|---|---|
| 0 | UnknownMutabilityType | 未知状态(协议保留值) | - |
| 1 | Pure | 不读/不写状态 | pure |
| 2 | View | 只读状态 | view |
| 3 | Nonpayable | 可修改状态(不可接收TRX) | 无修饰符 |
| 4 | Payable | 可修改状态(可接收TRX) | payable |
21. TriggerSmartContract
功能说明
与智能合约交互
字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
owner_address | bytes | 调用者的区块链地址 |
contract_address | bytes | 被调用的合约地址 |
call_value | int64 | 转账的 TRX 数量(单位:SUN,1 TRX = 1,000,000 SUN) |
data | bytes | ABI 编码数据(包含4字节函数选择器 + 32 字节对齐的参数编码) |
call_token_value | int64 | TRC-10 代币转账数量(需乘以代币精度,如精度 6 则 1 代币 = 1,000,000) |
token_id | int64 | TRC-10 代币 ID |
22. GetContract
功能说明
查询智能合约的详细信息
参数解析 (BytesMessage)
数据结构
message BytesMessage {
bytes value = 1;
}输入要求
| 字段 | 格式 |
|---|---|
value | 合约地址 |
返回值解析 (SmartContract)
关键字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
origin_address | bytes | 合约创建者的地址 |
contract_address | bytes | 合约的链上地址 |
abi.entrys | repeated Entry | 合约接口定义列表 |
bytecode | bytes | TVM 字节码 |
23. UpdateSettingContract
功能说明
用于修改智能合约的用户资源消耗比例(开发者与用户之间的资源分摊比例)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 合约拥有者地址 |
contract_address | bytes | 目标合约地址 |
consume_user_resource_percent | int64 | 用户承担的资源消耗百分比(有效范围:0-100,默认值:100) |
24. UpdateEnergyLimitContract
功能说明
修改智能合约的能源消耗上限
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 合约拥有者地址 |
contract_address | bytes | 目标合约地址 |
origin_energy_limit | int64 | 能源限制值 |
25. AccountPermissionUpdateContract
功能说明
管理账户的多重签名权限配置
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 账户地址 |
owner | Permission | owner 权限配置 |
witness | Permission | witness 权限配置(可以为空) |
actives | Permission[] | active 权限配置 |
26. ClearABIContract
功能说明
清除智能合约的 ABI 定义
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 合约拥有者地址 |
contract_address | bytes | 目标合约地址 |
规则
清除影响
- 外部无法通过 ABI 解析合约方法
- 已部署的合约仍可执行
27. UpdateBrokerageContract
功能说明
调整超级代表的佣金比例
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 超级代表地址 |
brokerage | int32 | 新佣金比例 |
规则
- 比例范围
- 最小值:0%(全部分配给投票者)
- 最大值:100%(不分配奖励)
28. DelegateResourceContract
功能说明
实现资源委托操作(带宽/能量等资源)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 资源所有者地址 |
resource | ResourceCode | 资源类型(0 = 带宽,1 = 能量) |
balance | int64 | 委托的资源数量(单位:SUN,1 TRX = 1,000,000 SUN) |
receiver_address | bytes | 资源接收方地址 |
lock | bool | 是否锁定委托(true = 锁定,false = 不锁定) |
lock_period | int64 | 锁定周期(单位:区块数,1 区块 ≈ 3 秒,仅当 lock = true 时有效) |
29. UnDelegateResourceContract
功能说明
实现资源取消委托操作
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 资源所有者地址(同委托操作地址) |
resource | ResourceCode | 资源类型(必须与委托时的类型一致) |
balance | int64 | 取消委托的资源数量(单位:SUN,需 ≤ 已委托数量) |
receiver_address | bytes | 资源接收方地址(须与委托时的地址一致) |
30. FreezeBalanceV2Contract
功能说明
用于在 TRON 网络中质押 TRX 以获取带宽或能量资源(Stake 2.0,原 1.0 的质押方法已废弃)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 质押操作发起者地址 |
frozen_balance | int64 | 质押的 TRX 数量(单位:SUN,1 TRX = 1,000,000 SUN) |
resource | ResourceCode | 目标资源类型(0 = 带宽,1 = 能量,2 = 投票权) |
附加说明
- 资源获取规则
- 每质押 1 TRX 可获得的资源量由全网动态计算决定
- 质押操作即时生效,资源可立即使用
- 解质押机制
- 需通过
UnfreezeBalanceV2Contract解除质押
- 资源类型对照
| ResourceCode 值 | 资源类型 | 用途场景 |
|---|---|---|
0 | 带宽 | 所有交易消耗 |
1 | 能量 | 智能合约执行消耗 |
31. UnfreezeBalanceV2Contract
功能说明
用于解除 TRX 质押(与FreezeBalanceV2Contract配对使用)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 解质押操作发起者地址 |
unfreeze_balance | int64 | 解质押的 TRX 数量(单位:SUN,必须 ≤ 已质押金额) |
resource | ResourceCode | 目标资源类型(0 = 带宽,1 = 能量,2 = 投票权) |
核心规则
- 解质押延迟机制
- 发起解质押后需等待 14 天(链上时间)才可提取TRX
32. WithdrawExpireUnfreezeContract
功能说明
用于提取已过解质押等待期的 TRX 资金(需在发起UnfreezeBalanceV2Contract操作后执行)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 提取操作发起者地址 |
33. CancelAllUnfreezeV2Contract
功能说明
用于取消所有未完成解质押操作(在解质押等待期内撤销已发起的解质押请求)
字段说明
| 字段名称 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 操作发起者地址 |
核心机制
- 操作影响
- 撤销所有通过
UnfreezeBalanceV2Contract发起但未过 14 天等待期的解质押请求 - 恢复对应 TRX 的质押状态,维持原有的资源(带宽/能量)配额
- 限制条件
- 仅对未到期的解质押记录生效(已过 14 天等待期的解质押无法取消)
- 操作不可逆,取消后需重新发起解质押流程
Updated about 1 month ago