TRON Developer Hub CN

TRON开发者中心

欢迎来到TRON开发者中心。您将找到全面的指南和文档,以帮助您尽快开始使用TRON Developer Hub,并在遇到困难时提供支持。让我们跳进去吧!

Get Started    

虚拟机简介

TRON 虚拟机(TVM)

波场虚拟机(Tron Virtual Machine, 简称TVM),是 TRON 团队为了满足自身生态发展的需求,开发出的轻量级架构、图灵完备、且兼容以太坊 EVM(Ethereum VM) 的虚拟机, 旨在为全球百万级开发者提供一个高效、简单、稳定、安全、且容易优化的区块链专用系统。

TVM 能无缝对接现有的开发者生态,并且能满足 DPoS 共识机制的要求。TVM 兼容以太坊虚拟机环境。开发者无需学习新的编程语言,就能用 Solidity 等编程语言在熟悉的 Remix 环境中进行智能合约的开发、调试、编译。 TRON 智能合约编写完毕后,部署到到 TRON 主网当中,在超级代表节点的 TVM 虚拟机执行,保持了对虚拟机和外部系统环境的隔离性。

此外,TVM 采用 Energy(能量) 机制作为消耗模型。 与以太坊 EVM 上的 Gas 机制不同,TVM 上部署或操作智能合约成本极低,价格稳定。 从技术上讲,总代币供应量不会限制 TVM 上的可执行计算容量。

TVM 的特点

  1. 轻量级: TVM 采用轻量级架构,旨在减少资源消耗,以保证系统性能。
  2. 稳定性和安全性: 通过精细的设计范例和细粒度的底层操作代码,TVM 可以保证计算的每个步骤的精确性,最大限度地减少模糊性。
  3. 兼容性: 目前,TVM 与 EVM 兼容,未来将与更多主流虚拟机兼容。 因此,EVM 上的所有智能合约都可以在 TVM 上执行。 通过与现有开发生态系统无缝连接,开发人员可以实现更高的效率。 无需学习新的编程语言,他们可以使用主流编程语言 (如 Solidity) 在 Remix 环境中开发,调试和编译智能合约,大大降低开发成本。
  4. 开发人员友好: 由于 TVM 的带宽设置,开发成本降低,开发人员可以专注于合约代码的逻辑。 为方便开发人员,TVM 还提供合约部署,触发和查看的一体化界面。TRON Wallet-CLI 提供以下接口功能:
  • deploysmartcontract: 部署合约
  • triggersmartcontract: 调用合约函数
  • triggerconstantcontract: 调用合约 view/pure 函数
  • getcontract: 获取合约信息

TVM 如何运作

Tron虚拟机架构图Tron虚拟机架构图

Tron虚拟机架构图

以上流程图显示了 TVM 如何工作:

TRON 智能合约的编译 → VM的执行和计算引擎 → 外部接口的互操作服务层

简而言之,流程如下:

  • 编译器将 Solidity 智能合约转换为 TVM 上可读和可执行的字节码。
  • 虚拟机通过操作码处理数据,相当于操作基于堆栈的有限状态机的逻辑。
  • TVM 访问区块链数据并通过互操作层调用外部数据接口。
  • TVM 的结束状态通过 API 返回给用户或写入区块。

内部交易

内部交易是在一次智能合约调用中发生的所有交易。内部交易中包含一些重要信息,如:TRX或代币转账的发送/接收者地址、数量以及交易状态。用户可以通过InternalTransaction列表来查看内部交易的所有信息。

内部交易结构

message InternalTransaction {
  bytes hash = 1;
  // the one send trx or token via function
  bytes caller_address = 2;
  // the one recieve trx or token via function
  bytes transferTo_address = 3;
  message CallValueInfo {
    // trx or token value
    int64 callValue = 1;
    // tokenId, trx should be empty
    string tokenId = 2;
  }
  repeated CallValueInfo callValueInfo = 4;
  bytes note = 5;
  bool rejected = 6;
}

属性

描述

hash

交易的唯一标识

caller_address

交易的发起者地址

transferTo_address

交易的接收者地址

callValueInfo

包含了发送TRX的数量,或TRC-10的id以及数量

callValue:TRX或TRC-10的数量
tokenID:TRC-10的id。发送TRX时为空

note

note可以包含三种类型的值:call、create或者suicide。这表示了内部交易的类型。

call:合约调用合约
create:合约创建合约
suicide:合约自毁

rejected

布尔值,true代表交易被拒绝且未被执行;false代表交易成功被执行

获取内部交易

使用交易ID,通过gettransactioninfobyid接口,在一个支持内部交易的节点上查询。

要支持内部交易,节点需要在配置文件中,将saveInternalTx设置为true。在Wallet-cli中,可以使用gettransactioninfobyid <transactionId>来查询。

📘

注意

节点只能获取到将saveInternalTx置为true之后的内部交易。如果想要获得从创世块开始的所有内部交易,需要将saveInternalTx置为true之后从零同步节点。

内部交易查询示例

InternalTransactionList: 
[
  hash:
  a07aaf40f35b42344d4909e8f739b32463c21a0c543fa212335f5d0d35f4db9d16  
  caller_address:
  4145867eff384dd351003dffc38fe6e25549fac58  
  transferTo_address:
  41537144c324033c5dc51759872f76e8f00f2edfa6  
  callValueInfo:
  [
    TokenName(Default trx):
    TRX(SUN)    
    callValue:
    10000000  
  ]
    
  note:
  create  
  rejected:
  false  
]
[
  hash:
  28fbeeeab85eda244cf83172380b1f26da07ad7a34bb90abdb75dff905736ab1c  
  caller_address:
  4143144c324033c5dc51776572f76e8f00f2edfa6  
  transferTo_address:
  412301d22dd9c7533b3d9c006f4279a823af41456  
  callValueInfo:
  [
    TokenName(Default trx):
    TRX(SUN)    
    callValue:
    10000000  
  ]
    
  note:
  call  
  rejected:
  false 
]

Updated about a month ago

虚拟机简介


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.