系统合约类型

TRON 交易可携带的每种系统合约类型的参考资料——涵盖账户、余额、质押、投票、治理、智能合约、权限管理、交易所和市场。

TRON 系统合约类型

在 TRON 中,一笔交易在协议层有且仅能携带一个合约载荷。尽管 raw_data.contract 在 Protobuf 中被定义为列表(Repeated 结构),当前协议只填充并解析 contract[0]。该载荷的核心是 Contract 结构:type 字段对应 ContractType 枚举,parameter 字段封装具体合约类型的 Protobuf 序列化数据。

本文按用途整理 TRON 常用系统合约类型、Protobuf 字段和关键校验规则。

💡

开发提示

文中涉及的动态数值(如账户激活费、解除质押等待期、资产发行费等)都由链上参数控制。开发时应通过 wallet/getchainparameters 查询当前值,不要在代码中硬编码。


账户与余额

TransferContract — 枚举值 1

用于执行常规的 TRX 转账操作。

字段名类型描述
owner_addressbytes交易发起方(发送方)地址
to_addressbytes资产接收方地址
amountint64转账的 TRX 金额,单位为 sun(1 TRX = 1,000,000 sun)
  • 未激活地址处理:若 to_address 在链上尚未激活,该笔转账除了会扣除相应的转账金额外,还会额外从发送方账户扣除一笔“新账户激活费”以隐式创建账户。

AccountCreateContract — 枚举值 0

显式创建并激活一个新的链上账户。

字段名类型描述
owner_addressbytes创建方(付费方)地址
account_addressbytes待激活的新账户地址
typeenum账户类型:Normal=0(普通账户)、AssetIssue=1(TRC-10 发行账户)、Contract=2(智能合约账户)
  • 隐式触发:在实际业务中,开发者很少需要显式构造此合约,向一个未激活的地址直接发送 TRX 或 TRC-10 资产会自动隐式触发账户激活流程。
  • 开销费用:由链上参数 getCreateNewAccountFeeInSystemContract 控制(当前主网默认为 1 TRX)。

AccountUpdateContract —— 枚举值 10

为账户设置一个易于阅读的别名(账户名称)。

字段名类型描述
owner_addressbytes目标操作账户地址
account_namebytes新的账户名称(必须为 UTF-8 编码)

当前主网环境下,该名称一经设置便无法再次修改

SetAccountIdContract —— 枚举值 19

为账户绑定一个自定义的非地址标识符(账户 ID)。

字段名类型描述
owner_addressbytes目标操作账户地址
account_idbytes自定义账户 ID(必须为纯 ASCII 字符串)

WithdrawBalanceContract —— 枚举值 13

提取超级代表(SR)累积的产块奖励,或投票人累积的投票奖励,并划转到账户可用余额。

字段名类型描述
owner_addressbytes发起提取请求的超级代表(SR)或投票者地址
  • 提取冷却期每 24 小时仅允许成功提取一次

TRC-10 资产(系统层 Token)

TRC-10 是 TRON 内置在协议层的资产 Token 标准,不依赖 TVM。现代复杂 Token 通常采用 TRC-20,但协议层仍保留 TRC-10 资产相关操作。更多内容参见Token 标准概览

AssetIssueContract — 枚举值 6

在网络中发行一种全新的 TRC-10 Token。

字段名类型描述
idstringToken 全局唯一 ID(由系统自增并自动分配)
owner_addressbytesToken 发行方地址
namebytesToken 全称(UTF-8 编码,长度不超过 32 字节)
abbrbytesToken 符号/缩写(UTF-8 编码,长度不超过 16 字节)
total_supplyint64发行总供应量(必须 ≥ 1 )
frozen_supplyFrozenSupply[]满足时间锁定(逐步释放)的锁仓供给配置集
trx_numint32申购时所对应的 TRX 价格分子
numint32申购时在 trx_num 下可获得的 Token 数量分母
precisionint32小数点后精度位数(取值为 0,或 1–6;上限由 PRECISION_DECIMAL = 6 约束,超过会报错 "precision cannot exceed 6")
start_timeint64发行认购窗口的开启时间(Unix 毫秒时间戳)
end_timeint64发行认购窗口的关闭时间(Unix 毫秒时间戳)
descriptionbytesToken 的详细功能描述信息(UTF-8 编码)
urlbytes项目方官方网站的链接 URL(UTF-8 编码)
free_asset_net_limitint64每个持有者可享用的该 Token 免费带宽上限(后续可用 UpdateAssetContract.new_limit 修改)
public_free_asset_net_limitint64全网共享的该 Token 免费带宽总池(后续可用 UpdateAssetContract.new_public_limit 修改)
  • FrozenSupply 内部子结构

    • frozen_amount (int64): 当前批次被锁定的 Token 数量。
    • frozen_days (int64): 锁定持续的时长,单位为天(取值范围 1–3,652,约 10 年;下限 MinFrozenSupplyTime = 1,上限 MaxFrozenSupplyTime = 3652,均为协议默认值)。
  • 费用:链参数 #4 getAssetIssueFee——当前为 1,024 TRX。每个账户只能发行一次(AssetIssueActuator.java:286-288)。

TransferAssetContract —— 枚举值 2

执行 TRC-10 Token 的转账。

字段名类型描述
asset_namebytes目标 TRC-10 Token 的字符串形式 ID(例如:"1000001"
owner_addressbytes资产发送方地址
to_addressbytes资产接收方地址
amountint64转账的资产原始单位数量

ParticipateAssetIssueContract —— 枚举值 9

在 TRC-10 资产的公开发行期内,使用 TRX 参与众筹认购。

字段名类型描述
owner_addressbytes认购方(买方)地址
to_addressbytes资产发行方地址
asset_namebytes目标认购 Token 的全局 ID
amountint64支付的 TRX 数额(单位为 sun
  • 有效性要求:该笔交易被执行时,当前的链上时间戳必须严格落在发行时定义的 start_time ≤ now ≤ end_time 区间内。

UpdateAssetContract —— 枚举值 15

由 Token 初始发行方更新基础属性信息。

字段名类型描述
owner_addressbytes发行方地址
descriptionbytes新的 Token 描述信息
urlbytes新的项目官方网站链接
new_limitint64修改后的单账户持有上限配额
new_public_limitint64修改后的公开发行限制配额

UnfreezeAssetContract —— 枚举值 14

释放已经到达解锁期限的 TRC-10 Token 锁仓份额(即释放在 frozen_supply 中定义的份额)。

字段名类型描述
owner_addressbytes发行该 Token 的发行方账户地址

投票与超级代表(SR)治理

VoteWitnessContract —— 枚举值 4

使用当前账户拥有的 TRON Power(TP)为超级代表候选人投票。

字段名类型描述
owner_addressbytes投票发起方的账户地址
votesVote[]包含一个或多个(候选人地址,分配票数)结构体的列表
  • Vote 内部子结构

    • vote_address (bytes): 目标超级代表候选人的账户地址。
    • vote_count (int64): 分配给该候选人的具体票数(质押 1 TRX 获得 1 TP)。
  • 核心限制:单次投票交易中最多只能同时包含 30 个 不同的候选人对。同时,列表中所有 vote_count 的绝对值总和,不得超过调用方账户当时拥有的可用 TP 总数。

WitnessCreateContract —— 枚举值 5

申请并注册成为超级代表(SR)候选人。

字段名类型描述
owner_addressbytes申请方账户地址
urlbytes候选人的项目官网链接(UTF-8 编码)
  • 开销费用:受链上参数 #1 getAccountUpgradeCost 控制,当前固定扣除 9,999 TRX 且该部分资金会被系统直接销毁(无法退回)。
  • 晋升机制:注册完成后账户将进入候选人资源池。如果账户在下一个固定的网络维护周期中,得票总数排名前 27 位,则将自动晋升为合法的超级代表,参与区块生产。

WitnessUpdateContract —— 枚举值 8

超级代表或候选人更新其公示的项目链接 URL。

字段名类型描述
owner_addressbytes目标超级代表/候选人的账户地址
update_urlbytes新的公示项目链接(可传入空字节流以清除已有记录)

UpdateBrokerageContract —— 枚举值 49

由超级代表(SR)自行调整其奖励留存比例(Brokerage)。

字段名类型描述
owner_addressbytes超级代表账户地址
brokerageint32留存率,取值范围为 [0, 100] 的整数(主网默认通常为 20,代表留存 20% 的奖励,分发 80% 给投票用户)

Stake 2.0(现行网络质押体系)

Stake 2.0 是 TRON 当前运行的第二代质押机制。相较于旧版 Stake 1.0,它将质押资产与资源代理分离,提供更灵活的资金和资源流转路径。

UnfreezeBalanceContract — 枚举值 12

Stake 1.0 兼容操作:解质押 Stake 1.0 质押的 TRX。调用成功后资金立即解锁释放。

字段类型说明
owner_addressbytes解除质押方地址
resourceenum原始质押时使用的资源类型
receiver_addressbytes原代理目标地址(必须与原始质押一致)

FreezeBalanceV2Contract — 枚举值 54

质押 TRX 以获得网络基础资源额度(能量或带宽)以及对应的投票权(TP)。

字段名类型描述
owner_addressbytes质押发起方的账户地址
frozen_balanceint64本次质押的 TRX 数量(单位为 sun
resourceenum期望获取的目标资源类别:0 = BANDWIDTH(带宽)、1 = ENERGY(能量)

UnfreezeBalanceV2Contract —— 枚举值 55

对处于质押状态下的 TRX 发起解除质押流程。

字段名类型描述
owner_addressbytes解除质押的账户地址
unfreeze_balanceint64拟解质押的 TRX 数量(单位为 sun,且必须 ≤ 当前该资源类别的总质押额)
resourceenum解除的目标资源类别:0 = BANDWIDTH1 = ENERGY2 = TRON_POWER
  • 资金锁定等待期:受链上参数 #70 getUnfreezeDelayDays 控制,主网当前值为 14 天。等待期结束后,需要调用 WithdrawExpireUnfreezeContract 提取已解除质押的 TRX。

WithdrawExpireUnfreezeContract —— 枚举值 56

在 14 天的解质押锁定等待期结束后,主动申领并收回这部分已经解锁的自由 TRX 资产。

字段名类型描述
owner_addressbytes目标执行账户地址

CancelAllUnfreezeV2Contract —— 枚举值 59

一键取消当前账户下所有正处于 14 天锁定等待期之内的“待处理解质押”订单。

字段名类型描述
owner_addressbytes目标执行账户地址
  • 协议表现:执行成功后,仍处于等待期内的 TRX 会恢复为解除质押前的资源类型,相应资源配额与投票权同步恢复。已经到期的解除质押份额无法通过此接口取消。

DelegateResourceContract —— 枚举值 57

将自身账户通过质押获得的闲置资源(能量或带宽)代理派发给其他指定的第三方账户使用。

字段名类型描述
owner_addressbytes资源的提供方(所有权人)地址
resourceenum代理派发的目标资源类型:0 = BANDWIDTH1 = ENERGY
balanceint64拟代理资源所对应的质押 TRX 等值额度(单位为 sun
receiver_addressbytes资源接收方地址
lockbool是否为本次代理设置锁定期
lock_periodint64强制锁定的持续周期,单位为区块数。仅在 lock = true 时生效
  • 最长锁定期约束:受链上参数 #78 getMaxDelegateLockPeriod 约束:协议默认值为 86,400 个区块(约 3 天),理论上限为 10,512,000 个区块(约 365 天),主网当前值为 864,000 个区块(约 30 天)。

UnDelegateResourceContract —— 枚举值 58

撤回此前向接收方代理派发的资源。

字段名类型描述
owner_addressbytes原资源提供方(所有权人)地址
resourceenum撤回的资源类型
balanceint64拟撤回的等值 TRX 额度(单位为 sun,且 ≤ 当初对其代理的总数额)
receiver_addressbytes目标接收方的账户地址

治理与网络提案

ProposalCreateContract —— 枚举值 16

由符合资质的超级代表(SR)、合伙人或候选人向全网提交一个新的链上全局参数修改提案。

字段名类型描述
owner_addressbytes提案创建方的超级代表/候选人地址
parametersmap<int64, int64>键值对映射表:[参数编号ID -> 目标修改新值]
  • 决策通过要求:提案的投票开放时间受链上参数 #92 getProposalExpireTime 约束,当前通常为 3 天。投票窗口到期时,如果获得 27 名活跃超级代表中至少 18 人投赞成票,该参数修改即通过,并在到期计票时生效。

ProposalApproveContract —— 枚举值 17

超级代表对处于待表决状态的参数修改提案投票。

字段名类型描述
owner_addressbytes执行表决操作的超级代表地址
proposal_idint64目标表决提案的全局唯一自增 ID
is_add_approvalbooltrue 代表投赞成票;false 代表撤回自己之前对该提案投过的赞成票

ProposalDeleteContract —— 枚举值 18

由参数提案的初始创建者在其尚未到期失效前,撤销并删除该条提案。

字段名类型描述
owner_addressbytes提案发起方的超级代表地址
proposal_idint64拟撤销的提案 ID

智能合约运作

CreateSmartContract —— 枚举值 30

部署一段全新的智能合约字节码,创建合约账户。

字段名类型描述
owner_addressbytes合约部署者地址
new_contractSmartContract合约的核心 Protobuf 定义体
call_token_valueint64(可选) 随部署事务一同向合约充值的 TRC-10 Token 数量
token_idint64(可选) 充值 TRC-10 Token 时所对应的 Token 唯一 ID
  • SmartContract 结构体核心子字段
    • origin_address (bytes): 合约部署者。
    • abi (ABI): 智能合约的 ABI 描述信息。
    • bytecode (bytes): 智能合约字节码。
    • name (string): 合约名称(最长 32 字节)。
    • call_value (int64): 随部署事务一同附带充值的 TRX 数量(单位为 sun)。
    • consume_user_resource_percent (int64): 开发者定义的能量分摊机制。取值范围为 [0, 100]。protobuf 层默认为 0(即调用方承担 0%、部署方承担 100%);TronWeb、Trident 等 SDK 在未指定该字段时通常自动填为 100(调用方承担 100%)——两者属于不同层级,勿混淆。
    • origin_energy_limit (int64): 部署者为单次用户调用所设置的最高代付能量上限。

TriggerSmartContract —— 枚举值 31

向已部署的智能合约发送调用数据,触发对应函数的 TVM 执行。

字段名类型描述
owner_addressbytes合约的调用方地址
contract_addressbytes目标合约的链上地址
databytes标准 ABI 编码的调用报文
call_valueint64随本次执行请求一并向 payable 函数注入的 TRX 数量(单位为 sun)
call_token_valueint64随本次执行请求一并向合约注入的 TRC-10 Token 绝对数量
token_idint64被注入的 TRC-10 Token 全局 ID

ABI 编码规则参见参数编码与解码

UpdateSettingContract — 枚举值 33

更新合约的 consume_user_resource_percent(调用方/部署者能量分摊比例)。

字段类型说明
owner_addressbytes合约部署者
contract_addressbytes目标合约
consume_user_resource_percentint64新值,取值范围 [0, 100]

UpdateEnergyLimitContract — 枚举值 45

更新合约的 origin_energy_limit

字段类型说明
owner_addressbytes合约部署者
contract_addressbytes目标合约
origin_energy_limitint64新值;必须 > 0

ClearABIContract — 枚举值 48

清除合约的链上 ABI。合约继续正常执行;仅 wallet/getcontract 返回空 ABI。

字段类型说明
owner_addressbytes合约部署者
contract_addressbytes目标合约

GetContract — 枚举值 32

仅查询的合约类型(不改变状态的交易)。返回合约的元数据。大多数调用方直接使用 wallet/getcontract HTTP 接口,而非手动构建此合约类型。


账户权限管理

AccountPermissionUpdateContract — 枚举值 46

更新账户的权限结构—— Owner 权限、超级代表出块权限(witness 权限,仅限 SR)以及 Active 权限。

字段名类型描述
owner_addressbytes拟修改控制结构的账户地址
ownerPermission全新定义的所有者权限结构(最高控制权)
witnessPermission(可选) 针对超级代表专门指定的出块签名权限结构 (Witness Permission)
activesPermission[]包含一个或多个 Active(活跃权限)子分权层级的列表

每个 Permission 包含一个阈值、一个“地址 + 权重”密钥列表,以及用于限制可签署合约类型的 operations 位图。完整结构见多签


核心系统合约类型编码快速查找表

构建 raw_data.contract[0] 时,可用下表快速查找协议枚举 ID 与系统合约类型的对应关系:

协议枚举 ID底层 Java-Tron 系统合约类名所属功能逻辑分组
0AccountCreateContract账户与余额管理
1TransferContract账户与余额管理
2TransferAssetContractTRC-10 资产层运营
4VoteWitnessContract社区选举与 SR 投票
5WitnessCreateContract社区选举与 SR 投票
6AssetIssueContractTRC-10 资产层运营
8WitnessUpdateContract社区选举与 SR 投票
9ParticipateAssetIssueContractTRC-10 资产层运营
10AccountUpdateContract账户与余额管理
12UnfreezeBalanceContract (旧版)Stake 1.0 向后兼容区
13WithdrawBalanceContract账户与余额管理
14UnfreezeAssetContractTRC-10 资产层运营
15UpdateAssetContractTRC-10 资产层运营
16ProposalCreateContract全网共识治理与提案
17ProposalApproveContract全网共识治理与提案
18ProposalDeleteContract全网共识治理与提案
19SetAccountIdContract账户与余额管理
30CreateSmartContractTVM 智能合约
31TriggerSmartContractTVM 智能合约
32GetContractTVM 智能合约
33UpdateSettingContractTVM 智能合约
45UpdateEnergyLimitContractTVM 智能合约
46AccountPermissionUpdateContract账户权限管理
48ClearABIContractTVM 智能合约生命周期
49UpdateBrokerageContractSR 奖励留存比例
54FreezeBalanceV2ContractStake 2.0 质押
55UnfreezeBalanceV2ContractStake 2.0 解质押
56WithdrawExpireUnfreezeContractStake 2.0 提取解质押本金
57DelegateResourceContractStake 2.0 资源代理
58UnDelegateResourceContractStake 2.0 撤回资源代理
59CancelAllUnfreezeV2ContractStake 2.0 取消解质押

相关资源