TVM 解释:TRON 面向开发人员的虚拟机 — TRON Wiki

TVM 解释:TRON 面向开发人员的虚拟机

10 分钟阅读 · ⌘K 搜索

TRON虚拟机(TVM)在TRON区块链上执行智能合约字节码。开发人员编写 Solidity(或某些工具中的 Vyper),编译为 TVM 字节码,并通过 TronBox 或 TronWeb 进行部署。 TVM 的 EVM 传统意味着许多以太坊模式可以直接移植 - 但资源计量和链细节有所不同。

本指南解释了 TVM 架构、EVM 比较、能源成本以及对 dApp 开发人员的实际影响。

TVM 在 TRON {#role} 中的角色

当您呼叫 TRC-20 transfer 或 SunSwap 路由器时:

1.交易包含合约地址+calldata

  1. TVM加载合约字节码
  2. 操作码执行(SLOAD、CALL 等)

4.状态更新(余额、存储)

  1. 收据记录所用能源、成功/失败

TRX 无合约转账使用更简单的验证——基本转账无需完整的 TVM 合约执行。

TVM 与 EVM

方面EVM(以太坊)TVM (TRON)
语言Solidity 初级Solidity 初级
天然气代币以太币能量 + 带宽 / TRX 燃烧
区块时间〜12秒〜3秒
地址格式0x 十六进制Base58 T...
模具安全帽,铸造厂TronBox、TronIDE

大多数ERC-20模式映射到TRC-20。跨链移植仍然需要:

  • 重新编译TVM
  • 重新测试所有外部调用和预言机
  • 调整feeLimit与gasLimit

请参阅TRON上的 Solidity

能量和费用限制

TVM 执行消耗 Energy (与 Gas 的概念作用类似):

  • 用户冻结TRX→接收能量
  • 没有能量,TRX以动态速率燃烧
  • feeLimit 限制每笔交易最大TRX 燃烧(太阳单位)

合约开发者应该优化存储和循环——昂贵的合约会让用户花费更多的USDT传输。

代码
await contract.method().send({ feeLimit: 150_000_000 });

带宽

简单交易消耗带宽(免费每日配额+冻结TRX)。智能合约调用主要针对能源,但带宽仍然适用于交易字节。

字节码和编译

Solidity → TVM 字节码通过 solc 并带有 TRON 补丁。 TronBox 固定编译器版本。字节码通过以下方式部署:

  • 迁移中的CREATE操作码
  • TronWeb contract().new()

部署地址是T...Base58,源自创建者+随机数。

预编译合约

TVM 包括用于签名验证、散列等的预编译。地址与以太坊不同——硬编码的 address(0x1) 假设可能会被破坏。

REVERT 和调试

失败的 TVM 执行返回REVERT——除了费用消耗之外,没有状态变化。调试通过:

  • TronScan内部交易选项卡
  • Shasta 测试网复制
  • 较小的测试合约隔离逻辑

升级模式

代理模式(EIP-1967 风格)存在于 TRON 上并进行了调整。可升级性增加了安全风险——用户必须信任管理密钥。

事件日志

TVM 发出索引器和事件侦听器 使用的日志。 Transfer 事件电源USDT 存款检测。

性能特征{#性能}

3 秒区块可实现响应式用户体验,但会增加高价值即时交付的重组考虑(与 PoW 链相比,TRON 上的罕见问题)。

TVM 与 EVM 操作码差异

能源计量与以太坊天然气不同——操作码价格不相同。在某些操作中,循环和存储写入的成本相对较高。在主网启动之前,在交易收据中使用 energy_usage_total 在测试网上配置合约 Energy。

资源模型总结

TVM执行会消耗Energy;交易字节消耗带宽。合约开发人员针对更少的存储写入和更紧密的循环进行优化,以降低用户成本。用户冻结TRX来获取能量——你的dApp的用户体验直接取决于你的合约功能的能量消耗程度。

相关指南 {#相关}

常见问题解答

TVM 与以太坊智能合约兼容吗?

TVM 在 Solidity 级别上很大程度上与 EVM 兼容,但气体/能源模型、预编译和一些操作码有所不同。在 Shasta 上进行彻底测试。

TVM 执行的费用是什么?

能量和带宽。合约调用消耗Energy;呼叫者帐户的能量消耗不足TRX。

我可以部署未修改的以太坊字节码吗?

不需要。使用TRON工具链重新编译。操作码和地址编码不同。

为什么我的合同花费的能源比预期多?

存储写入、外部调用和大型调用数据会增加成本。优化 Solidity 模式。

TVM 在哪里运行?

TRON超级代表全节点验证区块。 TronGrid公开HTTP以远程触发TVM调用。