TONboard

TON Virtual Machine (TVM)

1 分钟阅读updated 2026-06-03✏️ Suggest an edit🕑 History
🌐 Машинный перевод. Возможны неточности.
目录 (12)

TON虚拟机 (TVM,有时TON VM) 执行区块链智能合约的虚拟计算机 TON这是网络执行层:每个 智能合同 存储并运行为TVM的程序. 机器处理进来的消息,改变合同的常态状态,并为其他合同构建输出消息.

TVM架构有三个要求:完全确定执行 (同一输入在任何节点上都会产生相同的结果),高密度的代码 (区块链中的最低空间) 和扩展指令集时的反向兼容性.

历史#

TVM是由Telegram团队在2018年开发的.:

  • 2018 第一个与TON测试网络发布的TVM版本.
  • 2020 年 3 月 发布详细的技术文件,描述数据类型,优化和合同说明.
  • 2020年 (主网启动) TVM支持全面的操作集,并确保生产网络的确定性.

项目传递给社区后,TVM的开发通过TEP过程继续进行,更新通过改进建议进行,并通过验证器的共识激活.

基础知识#

TVM使用比特行作为数据的基本表示.它们以两种符号表示:

  • 十六位数表示 长度乘以四位的行,分为4位的组,每个被写成一个十六位数 (0F). 如果长度不乘以4位,则添加一个特殊的结束标签来标记修改.
  • 序列化为八 字符串分为8位组,并作为字节序列记录;必要时添加到8位的等级.

堆模型#

TVM 是一个堆式虚拟机.这意味着数据存储在 сте克 (last-in-first-out) 结构中,而不是命名变量或注册.大多数操作 (算术,比较,参数传输) 将参数从堆中取出并将结果放在那里. 堆模型比注册方法简单,并提供更密集的编码说明.

值类型

TVM堆使用固定的原始类型:

  • Integer 257位符号整数 (选择分级可以容纳256位哈希加上没有损失的符号).
  • Cell 包含最多1023位数据和最多4个链接到其他单元格的对象.
  • Tuple 是各种类型的有序集合值.
  • Slice 通过:阅读时指向剩余的数据和链接.
  • Builder 一个缓冲区,可以连续组建新的Cell.
  • Continuation 继续执行点的介绍; 下面见.
  • Null 没有值;标记未初始化的字段.

指令类别

TVM指令按其用途分类为:

  • 排列式和道式 堆重置,使用tuple;
  • 常数 将预定的值插入到堆中;
  • 算法学 自动检查过度填充的标准算术操作;
  • 单元格操作 阅读Slice,录制Builder,使用链接;
  • 控制流量 有条件的分支,循环,延续的呼唤;
  • 应用原始词 专业的TON操作:处理地址,签名,消息激活器.

单元格及其类型#

单元格 (Cell) 是TVM和TON区块链本身的原子存储单元. 每个Cell包含高达1023位数据和高达4个链接到其他Cell. 通过链接形成的单元器图,导向循环图 (DAG):循环不允许. 区块区块中的任何数据 (智能合约,状态,消息,块) 都被存储为这样的图.

单元格类型

  • 常用 (类型-1) 标准的数据和链接载体.
  • 外来细胞 (exotic cells) 类型2255具有脱序和哈希的特点.用于截断的分支 (truncated branches),库链接和Merkle证据.

奇异的单元格可以传输部分区块链快照,

继续 (继续)#

Continuation 是管理流量的TVM中心结构.其实是延期计算:包含执行代码,当前堆和控制寄存器保存状态的标记.

继续是构建了子程序调用,条件操作,循环和例外处理的语言.在TVM中,继续更强大,也包括程序的不完全延续.

延伸类型

  • 通常的 包含代码,堆,保存的注册表列表和代码页面 (见下文).
  • 简单的 只有代码和代码页面,没有存储的数据堆.
  • 目前的情况 (cc, current continuation) 表示正在执行的代码,是机器状态的关键部分.

控制是通过 JMP (传输控制) 和 RET (返回) 命令切换延续之间的.例外是特殊延续,在错误时被激活:它们获得错误参数并确定进一步的行为.条件和代结构 (IF,WHILE,REPEAT) 在延续上实现.

代码页面#

每个常规的延续带有一个16位代码页面 (cp) 字段,它决定如何解码其指令.这是一个反向兼容性机制:网络中可以同时存在合同,编译为不同版本的TVM指令集.

命令以二进制前代码编码,使其能够进行明确的解码和密集的表示.如果前不符合当前代码页面的允许的指示,则会产生不允许的对代码的排除.

在代码页面之间可以根据执行的操作自动切换,这允许专业化页面进行频繁的操作 (堆操作,数据处理) 并减少代码的容量.

TVM vs Ethereum Virtual Machine#

TVM和EVM都是智能合约的堆虚拟机,但有关键的区别.

属性TVMEVM
基本数据模型单元格表 (Cell, 1023位 + 4个链接)256位字母 + 帕特里西亚·特里 Merkle
整数大小257位数256 位
过度检查自动手动使用 (Solidity ≥0.8)
密码学Curve25519, Weil pairings (zk-SNARKs), sha256secp256k1, keccak256
合同的主要语言FunC (静态类型化,ADT)Solidity
保存状态按合约单元格分配全球状态MPT

细胞图简化了处理复杂结构 (树,DAG),比MPT需要更少的内存和计算资源.自动填充检查降低了典型的漏洞类.支持 Curve25519和Weil pairings 提供了EVM 开箱无法获得的加密功能.

同类文章#

ℹ️ 信息核实于: 2025

Prepared by

TONboard

Support the project with a TON tip.

Comments

Posting a comment costs a small on-chain fee that keeps spam out.
  • No comments yet — be the first.