系统合约类型
TRON 交易可携带的每种系统合约类型的参考资料——涵盖账户、余额、质押、投票、治理、智能合约、权限管理、交易所和市场。
TRON 系统合约类型
在 TRON 中,一笔交易在协议层有且仅能携带一个合约载荷。尽管 raw_data.contract 在 Protobuf 中被定义为列表(Repeated 结构),当前协议只填充并解析 contract[0]。该载荷的核心是 Contract 结构:type 字段对应 ContractType 枚举,parameter 字段封装具体合约类型的 Protobuf 序列化数据。
本文按用途整理 TRON 常用系统合约类型、Protobuf 字段和关键校验规则。
开发提示文中涉及的动态数值(如账户激活费、解除质押等待期、资产发行费等)都由链上参数控制。开发时应通过
wallet/getchainparameters查询当前值,不要在代码中硬编码。
账户与余额
TransferContract — 枚举值 1
用于执行常规的 TRX 转账操作。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 交易发起方(发送方)地址 |
to_address | bytes | 资产接收方地址 |
amount | int64 | 转账的 TRX 金额,单位为 sun(1 TRX = 1,000,000 sun) |
- 未激活地址处理:若
to_address在链上尚未激活,该笔转账除了会扣除相应的转账金额外,还会额外从发送方账户扣除一笔“新账户激活费”以隐式创建账户。
AccountCreateContract — 枚举值 0
显式创建并激活一个新的链上账户。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 创建方(付费方)地址 |
account_address | bytes | 待激活的新账户地址 |
type | enum | 账户类型:Normal=0(普通账户)、AssetIssue=1(TRC-10 发行账户)、Contract=2(智能合约账户) |
- 隐式触发:在实际业务中,开发者很少需要显式构造此合约,向一个未激活的地址直接发送 TRX 或 TRC-10 资产会自动隐式触发账户激活流程。
- 开销费用:由链上参数
getCreateNewAccountFeeInSystemContract控制(当前主网默认为 1 TRX)。
AccountUpdateContract —— 枚举值 10
为账户设置一个易于阅读的别名(账户名称)。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 目标操作账户地址 |
account_name | bytes | 新的账户名称(必须为 UTF-8 编码) |
当前主网环境下,该名称一经设置便无法再次修改。
SetAccountIdContract —— 枚举值 19
为账户绑定一个自定义的非地址标识符(账户 ID)。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 目标操作账户地址 |
account_id | bytes | 自定义账户 ID(必须为纯 ASCII 字符串) |
WithdrawBalanceContract —— 枚举值 13
提取超级代表(SR)累积的产块奖励,或投票人累积的投票奖励,并划转到账户可用余额。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 发起提取请求的超级代表(SR)或投票者地址 |
- 提取冷却期:每 24 小时仅允许成功提取一次。
TRC-10 资产(系统层 Token)
TRC-10 是 TRON 内置在协议层的资产 Token 标准,不依赖 TVM。现代复杂 Token 通常采用 TRC-20,但协议层仍保留 TRC-10 资产相关操作。更多内容参见Token 标准概览。
AssetIssueContract — 枚举值 6
在网络中发行一种全新的 TRC-10 Token。
| 字段名 | 类型 | 描述 |
|---|---|---|
id | string | Token 全局唯一 ID(由系统自增并自动分配) |
owner_address | bytes | Token 发行方地址 |
name | bytes | Token 全称(UTF-8 编码,长度不超过 32 字节) |
abbr | bytes | Token 符号/缩写(UTF-8 编码,长度不超过 16 字节) |
total_supply | int64 | 发行总供应量(必须 ≥ 1 ) |
frozen_supply | FrozenSupply[] | 满足时间锁定(逐步释放)的锁仓供给配置集 |
trx_num | int32 | 申购时所对应的 TRX 价格分子 |
num | int32 | 申购时在 trx_num 下可获得的 Token 数量分母 |
precision | int32 | 小数点后精度位数(取值为 0,或 1–6;上限由 PRECISION_DECIMAL = 6 约束,超过会报错 "precision cannot exceed 6") |
start_time | int64 | 发行认购窗口的开启时间(Unix 毫秒时间戳) |
end_time | int64 | 发行认购窗口的关闭时间(Unix 毫秒时间戳) |
description | bytes | Token 的详细功能描述信息(UTF-8 编码) |
url | bytes | 项目方官方网站的链接 URL(UTF-8 编码) |
free_asset_net_limit | int64 | 每个持有者可享用的该 Token 免费带宽上限(后续可用 UpdateAssetContract.new_limit 修改) |
public_free_asset_net_limit | int64 | 全网共享的该 Token 免费带宽总池(后续可用 UpdateAssetContract.new_public_limit 修改) |
-
FrozenSupply内部子结构:frozen_amount(int64): 当前批次被锁定的 Token 数量。frozen_days(int64): 锁定持续的时长,单位为天(取值范围 1–3,652,约 10 年;下限MinFrozenSupplyTime = 1,上限MaxFrozenSupplyTime = 3652,均为协议默认值)。
-
费用:链参数
#4getAssetIssueFee——当前为 1,024 TRX。每个账户只能发行一次(AssetIssueActuator.java:286-288)。
TransferAssetContract —— 枚举值 2
执行 TRC-10 Token 的转账。
| 字段名 | 类型 | 描述 |
|---|---|---|
asset_name | bytes | 目标 TRC-10 Token 的字符串形式 ID(例如:"1000001") |
owner_address | bytes | 资产发送方地址 |
to_address | bytes | 资产接收方地址 |
amount | int64 | 转账的资产原始单位数量 |
ParticipateAssetIssueContract —— 枚举值 9
在 TRC-10 资产的公开发行期内,使用 TRX 参与众筹认购。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 认购方(买方)地址 |
to_address | bytes | 资产发行方地址 |
asset_name | bytes | 目标认购 Token 的全局 ID |
amount | int64 | 支付的 TRX 数额(单位为 sun) |
- 有效性要求:该笔交易被执行时,当前的链上时间戳必须严格落在发行时定义的
start_time ≤ now ≤ end_time区间内。
UpdateAssetContract —— 枚举值 15
由 Token 初始发行方更新基础属性信息。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 发行方地址 |
description | bytes | 新的 Token 描述信息 |
url | bytes | 新的项目官方网站链接 |
new_limit | int64 | 修改后的单账户持有上限配额 |
new_public_limit | int64 | 修改后的公开发行限制配额 |
UnfreezeAssetContract —— 枚举值 14
释放已经到达解锁期限的 TRC-10 Token 锁仓份额(即释放在 frozen_supply 中定义的份额)。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 发行该 Token 的发行方账户地址 |
投票与超级代表(SR)治理
VoteWitnessContract —— 枚举值 4
使用当前账户拥有的 TRON Power(TP)为超级代表候选人投票。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 投票发起方的账户地址 |
votes | Vote[] | 包含一个或多个(候选人地址,分配票数)结构体的列表 |
-
Vote内部子结构:vote_address(bytes): 目标超级代表候选人的账户地址。vote_count(int64): 分配给该候选人的具体票数(质押 1 TRX 获得 1 TP)。
-
核心限制:单次投票交易中最多只能同时包含 30 个 不同的候选人对。同时,列表中所有
vote_count的绝对值总和,不得超过调用方账户当时拥有的可用 TP 总数。
WitnessCreateContract —— 枚举值 5
申请并注册成为超级代表(SR)候选人。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 申请方账户地址 |
url | bytes | 候选人的项目官网链接(UTF-8 编码) |
- 开销费用:受链上参数
#1getAccountUpgradeCost控制,当前固定扣除 9,999 TRX 且该部分资金会被系统直接销毁(无法退回)。 - 晋升机制:注册完成后账户将进入候选人资源池。如果账户在下一个固定的网络维护周期中,得票总数排名前 27 位,则将自动晋升为合法的超级代表,参与区块生产。
WitnessUpdateContract —— 枚举值 8
超级代表或候选人更新其公示的项目链接 URL。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 目标超级代表/候选人的账户地址 |
update_url | bytes | 新的公示项目链接(可传入空字节流以清除已有记录) |
UpdateBrokerageContract —— 枚举值 49
由超级代表(SR)自行调整其奖励留存比例(Brokerage)。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 超级代表账户地址 |
brokerage | int32 | 留存率,取值范围为 [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_address | bytes | 解除质押方地址 |
resource | enum | 原始质押时使用的资源类型 |
receiver_address | bytes | 原代理目标地址(必须与原始质押一致) |
FreezeBalanceV2Contract — 枚举值 54
质押 TRX 以获得网络基础资源额度(能量或带宽)以及对应的投票权(TP)。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 质押发起方的账户地址 |
frozen_balance | int64 | 本次质押的 TRX 数量(单位为 sun) |
resource | enum | 期望获取的目标资源类别:0 = BANDWIDTH(带宽)、1 = ENERGY(能量) |
UnfreezeBalanceV2Contract —— 枚举值 55
对处于质押状态下的 TRX 发起解除质押流程。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 解除质押的账户地址 |
unfreeze_balance | int64 | 拟解质押的 TRX 数量(单位为 sun,且必须 ≤ 当前该资源类别的总质押额) |
resource | enum | 解除的目标资源类别:0 = BANDWIDTH、1 = ENERGY、2 = TRON_POWER |
- 资金锁定等待期:受链上参数
#70getUnfreezeDelayDays控制,主网当前值为 14 天。等待期结束后,需要调用WithdrawExpireUnfreezeContract提取已解除质押的 TRX。
WithdrawExpireUnfreezeContract —— 枚举值 56
在 14 天的解质押锁定等待期结束后,主动申领并收回这部分已经解锁的自由 TRX 资产。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 目标执行账户地址 |
CancelAllUnfreezeV2Contract —— 枚举值 59
一键取消当前账户下所有正处于 14 天锁定等待期之内的“待处理解质押”订单。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 目标执行账户地址 |
- 协议表现:执行成功后,仍处于等待期内的 TRX 会恢复为解除质押前的资源类型,相应资源配额与投票权同步恢复。已经到期的解除质押份额无法通过此接口取消。
DelegateResourceContract —— 枚举值 57
将自身账户通过质押获得的闲置资源(能量或带宽)代理派发给其他指定的第三方账户使用。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 资源的提供方(所有权人)地址 |
resource | enum | 代理派发的目标资源类型:0 = BANDWIDTH、1 = ENERGY |
balance | int64 | 拟代理资源所对应的质押 TRX 等值额度(单位为 sun) |
receiver_address | bytes | 资源接收方地址 |
lock | bool | 是否为本次代理设置锁定期 |
lock_period | int64 | 强制锁定的持续周期,单位为区块数。仅在 lock = true 时生效 |
- 最长锁定期约束:受链上参数
#78getMaxDelegateLockPeriod约束:协议默认值为 86,400 个区块(约 3 天),理论上限为 10,512,000 个区块(约 365 天),主网当前值为 864,000 个区块(约 30 天)。
UnDelegateResourceContract —— 枚举值 58
撤回此前向接收方代理派发的资源。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 原资源提供方(所有权人)地址 |
resource | enum | 撤回的资源类型 |
balance | int64 | 拟撤回的等值 TRX 额度(单位为 sun,且 ≤ 当初对其代理的总数额) |
receiver_address | bytes | 目标接收方的账户地址 |
治理与网络提案
ProposalCreateContract —— 枚举值 16
由符合资质的超级代表(SR)、合伙人或候选人向全网提交一个新的链上全局参数修改提案。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 提案创建方的超级代表/候选人地址 |
parameters | map<int64, int64> | 键值对映射表:[参数编号ID -> 目标修改新值] |
- 决策通过要求:提案的投票开放时间受链上参数
#92getProposalExpireTime约束,当前通常为 3 天。投票窗口到期时,如果获得 27 名活跃超级代表中至少 18 人投赞成票,该参数修改即通过,并在到期计票时生效。
ProposalApproveContract —— 枚举值 17
超级代表对处于待表决状态的参数修改提案投票。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 执行表决操作的超级代表地址 |
proposal_id | int64 | 目标表决提案的全局唯一自增 ID |
is_add_approval | bool | true 代表投赞成票;false 代表撤回自己之前对该提案投过的赞成票 |
ProposalDeleteContract —— 枚举值 18
由参数提案的初始创建者在其尚未到期失效前,撤销并删除该条提案。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 提案发起方的超级代表地址 |
proposal_id | int64 | 拟撤销的提案 ID |
智能合约运作
CreateSmartContract —— 枚举值 30
部署一段全新的智能合约字节码,创建合约账户。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 合约部署者地址 |
new_contract | SmartContract | 合约的核心 Protobuf 定义体 |
call_token_value | int64 | (可选) 随部署事务一同向合约充值的 TRC-10 Token 数量 |
token_id | int64 | (可选) 充值 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_address | bytes | 合约的调用方地址 |
contract_address | bytes | 目标合约的链上地址 |
data | bytes | 标准 ABI 编码的调用报文 |
call_value | int64 | 随本次执行请求一并向 payable 函数注入的 TRX 数量(单位为 sun) |
call_token_value | int64 | 随本次执行请求一并向合约注入的 TRC-10 Token 绝对数量 |
token_id | int64 | 被注入的 TRC-10 Token 全局 ID |
ABI 编码规则参见参数编码与解码。
UpdateSettingContract — 枚举值 33
更新合约的 consume_user_resource_percent(调用方/部署者能量分摊比例)。
| 字段 | 类型 | 说明 |
|---|---|---|
owner_address | bytes | 合约部署者 |
contract_address | bytes | 目标合约 |
consume_user_resource_percent | int64 | 新值,取值范围 [0, 100] |
UpdateEnergyLimitContract — 枚举值 45
更新合约的 origin_energy_limit。
| 字段 | 类型 | 说明 |
|---|---|---|
owner_address | bytes | 合约部署者 |
contract_address | bytes | 目标合约 |
origin_energy_limit | int64 | 新值;必须 > 0 |
ClearABIContract — 枚举值 48
清除合约的链上 ABI。合约继续正常执行;仅 wallet/getcontract 返回空 ABI。
| 字段 | 类型 | 说明 |
|---|---|---|
owner_address | bytes | 合约部署者 |
contract_address | bytes | 目标合约 |
GetContract — 枚举值 32
仅查询的合约类型(不改变状态的交易)。返回合约的元数据。大多数调用方直接使用 wallet/getcontract HTTP 接口,而非手动构建此合约类型。
账户权限管理
AccountPermissionUpdateContract — 枚举值 46
更新账户的权限结构—— Owner 权限、超级代表出块权限(witness 权限,仅限 SR)以及 Active 权限。
| 字段名 | 类型 | 描述 |
|---|---|---|
owner_address | bytes | 拟修改控制结构的账户地址 |
owner | Permission | 全新定义的所有者权限结构(最高控制权) |
witness | Permission | (可选) 针对超级代表专门指定的出块签名权限结构 (Witness Permission) |
actives | Permission[] | 包含一个或多个 Active(活跃权限)子分权层级的列表 |
每个 Permission 包含一个阈值、一个“地址 + 权重”密钥列表,以及用于限制可签署合约类型的 operations 位图。完整结构见多签。
核心系统合约类型编码快速查找表
构建 raw_data.contract[0] 时,可用下表快速查找协议枚举 ID 与系统合约类型的对应关系:
| 协议枚举 ID | 底层 Java-Tron 系统合约类名 | 所属功能逻辑分组 |
|---|---|---|
0 | AccountCreateContract | 账户与余额管理 |
1 | TransferContract | 账户与余额管理 |
2 | TransferAssetContract | TRC-10 资产层运营 |
4 | VoteWitnessContract | 社区选举与 SR 投票 |
5 | WitnessCreateContract | 社区选举与 SR 投票 |
6 | AssetIssueContract | TRC-10 资产层运营 |
8 | WitnessUpdateContract | 社区选举与 SR 投票 |
9 | ParticipateAssetIssueContract | TRC-10 资产层运营 |
10 | AccountUpdateContract | 账户与余额管理 |
12 | UnfreezeBalanceContract (旧版) | Stake 1.0 向后兼容区 |
13 | WithdrawBalanceContract | 账户与余额管理 |
14 | UnfreezeAssetContract | TRC-10 资产层运营 |
15 | UpdateAssetContract | TRC-10 资产层运营 |
16 | ProposalCreateContract | 全网共识治理与提案 |
17 | ProposalApproveContract | 全网共识治理与提案 |
18 | ProposalDeleteContract | 全网共识治理与提案 |
19 | SetAccountIdContract | 账户与余额管理 |
30 | CreateSmartContract | TVM 智能合约 |
31 | TriggerSmartContract | TVM 智能合约 |
32 | GetContract | TVM 智能合约 |
33 | UpdateSettingContract | TVM 智能合约 |
45 | UpdateEnergyLimitContract | TVM 智能合约 |
46 | AccountPermissionUpdateContract | 账户权限管理 |
48 | ClearABIContract | TVM 智能合约生命周期 |
49 | UpdateBrokerageContract | SR 奖励留存比例 |
54 | FreezeBalanceV2Contract | Stake 2.0 质押 |
55 | UnfreezeBalanceV2Contract | Stake 2.0 解质押 |
56 | WithdrawExpireUnfreezeContract | Stake 2.0 提取解质押本金 |
57 | DelegateResourceContract | Stake 2.0 资源代理 |
58 | UnDelegateResourceContract | Stake 2.0 撤回资源代理 |
59 | CancelAllUnfreezeV2Contract | Stake 2.0 取消解质押 |
相关资源
Updated 11 days ago