TON 虚拟机 -- 引言&目录
为了深入掌握TON,我们必须深入探究TVM的精髓。在此过程中,TVM手册堪称不可或缺的参考资料。我已开始利用空余时间逐步将其翻译成中文,期望这一努力能够为各位同仁提供助力。
作者:尼古拉·杜罗夫
日期:2020年3月23日
摘要
本文的目的是提供对 Telegram 开放网络虚拟机(Telegram Open Network Virtual Machine,简称 TON VM 或 TVM)的描述,该虚拟机用于在 TON 区块链中执行智能合约。
引言
Telegram 开放网络虚拟机(TON VM 或 TVM)的主要目的是在 TON 区块链中执行智能合约代码。TVM 必须支持所有解析传入消息和持久数据所需的操作,还要能够创建新消息并修改持久数据。
此外,TVM 必须满足以下要求:
- 它必须能够为未来的扩展和改进提供支持,同时保持向后兼容性和互操作性,因为一旦智能合约代码被提交到区块链中,无论 VM 未来如何修改,该代码都必须能够以可预测的方式继续运行。
- 它必须努力实现高效的“虚拟机代码”密度,以便典型的智能合约代码占用尽可能少的区块链持久存储空间。
- 它必须完全确定性运行。换句话说,相同代码与相同输入数据的每次运行都必须产生相同的结果,无论使用的是何种软件或硬件。
TVM 的设计基于上述要求。尽管本文描述的是 TVM 的一个初步和实验版本,但系统中内置的向后兼容机制使得我们无需过于担心该版本操作编码效率的问题。
TVM 并非旨在通过硬件实现(例如,专门的微处理器芯片),而是通过在常规硬件上运行的软件实现。这种设计考虑让我们能够在 TVM 中引入一些高层次的概念和操作,这些操作若通过硬件微代码实现可能会十分复杂,但通过软件实现却不会带来显著问题。这些操作对于实现高代码密度和最小化智能合约代码在 TON 区块链中部署时的存储字节(或存储单元)占用是十分有用的。
目录
- 概述
1.0 比特串的符号表示
1.1 TVM 是栈机
1.2 TVM 指令的类别
1.3 控制寄存器
1.4 TVM 的整体状态(SCCCG)
1.5 整数运算 - 栈
2.1 栈调用约定
2.2 栈操作原语
2.3 栈操作原语的效率 - 单元、内存和持久存储
3.1 单元的概述
3.2 数据操作指令和单元
3.3 哈希映射或字典
3.4 具有可变长度键的哈希映射 - 控制流、延续与异常
4.1 延续与子程序
4.2 控制流原语:条件与迭代执行
4.3 对延续的操作
4.4 延续作为对象
4.5 异常处理
4.6 函数、递归和字典 - 代码页与指令编码
5.1 代码页和不同 TVM 版本的互操作性
5.2 指令编码
5.3 代码页零中的指令编码
附录 A 指令和操作码
附录 B TVM 的形式化属性和规格
附录 C 栈和寄存器机器的代码密度
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。