波场TRON虚拟机测试版正式发布——Tron Virtual Machine
波场TRON团队于2018年5月25日(北京时间今日)正式发布了虚拟机Tron Virtual Machine(简称TVM)测试版本,本次TVM的发布将为波场TRON生态的发展打下坚实的基础。本篇文章将通过简介、设计原理、运行过程、发展方向等多个模块为波场TRON全球支持者及信仰者展现一个较为完整的TVM。
Tron虚拟机TVM
波场虚拟机(Tron Virtual Machine, 简称TVM),是Tron团队为了满足自身生态发展的需求,开发出的轻量级架构、图灵完备的虚拟机, 旨在为全球百万级的开发者提供一个高效、简单、稳定、安全、且容易优化的区块链专用系统。
TVM能无缝对接现有的开发者生态,并且能满足DPOS共识机制的要求。TVM前期兼容以太坊虚拟机环境。开发者无需学习新的编程语言,就能用 Solidity 等编程语言在熟悉的 Remix 环境中进行智能合约的开发、调试、编译。Tron智能合约编写完毕后,上传到Tron主网当中,在超级代表节点的TVM虚拟机执行,同时保持了对虚拟机外系统环境的隔离性。
此外,TVM 引进了带宽的概念。不同于以太坊EVM的gas消耗模式,Tron系统中的转账和智能合约的操作是免费的,不需要消耗任何代币,所以原则上在TVM中可执行的计算总量不受代币总量限制。
1.TVM设计原则
1.1 轻量级
TVM采用轻量级的虚拟机构架,旨在节省运行空间,减少资源耗费及保证系统性能。
1.2 稳定、安全性
TVM采用了严谨的设计规范,低粒度的底层操作码,保证了每个计算步骤的精确性,最大程度消除产生歧义的空间。 同时出于安全性的考量,TVM的转账与运行合约均不需要消耗代币,只会消耗带宽,避免了针对类似以太坊gas消耗模式的攻击。在保证了每个操作计算步骤的确定性的同时,也保证了带宽消耗的稳定性。
1.3 兼容性
目前,TVM能完美兼容以太坊EVM,并在未来兼容更多主流的VM。因此, 以太坊上的智能合约,能直接运行到TVM上,无缝对接现有的开发者生态,提高开发者的开发效率。开发者无需学习新的编程语言,就能用Solidity 等主流编程语言在熟悉的Remix环境中进行智能合约的开发、调试、编译,将极大缩减开发成本。
1.4 开发人员友好性
TVM的带宽消耗模式减少了合约的开发成本。让开发者可以把更多精力放在合约代码的逻辑本身。同时,TVM提供了对开发者友好的一站式的部署、触发、查看智能合约的接口。
Tron Wallet-CLI中添加了以下对接接口,
· deploycontract(password, contractAddress, ABI, code, data, value)
· triggercontract(password, contractAddress, selector, data, value)
· getcontract(contractAddress)
开发人员可直接调用,完成对智能合约的部署,触发,查看。
2. TVM的运行过程
图1. Tron Virtual Machine的工作流程
这张图整体描述了Tron Virtual Machine的工作流程:
Tron智能合约的编译 ---> 虚拟机的执行、计算引擎 ---->虚拟机对外的互操作层
简单来说,上面的流程依次是:
1. 目前Tron虚拟机主要兼容Solidity。编译器将Solidity智能合约翻译成TVM可以识别并执行的字节码。
2.在虚拟机中,通过一条条的操作指令码实现对虚拟机栈中数据的操作处理,这个过程相当于实现对一个基于堆栈的有限状态机的逻辑处理。
3.虚拟机通过互操作模块实现对区块链数据的访问,以及对外部数据的接口层的调用。
3. TVM的发展方向
3.1 构建更加友好的调试工具
Tron团队将努力构建完善的调试工具,建立用于调试的标准符号格式或是数据格式。提升开发者在TVM的开发、调试效率。
3.2. 满足更加多样化的任务处理需求
和以太坊上每个操作消耗gas不同,Tron虚拟机对业务的处理并不收费,每个操作只是先占据带宽,并且在交易后的一段时间后释放。开发者们只用相当小的成本 便可设计更加复杂逻辑的智能合约。我们深信,除了数字货币交易的应用场景外,未来的智能合约也能在游戏开发,金融市场风险建模,科学计算等领域发挥重要作用。Tron虚拟机的设计具有先天的满足多样化任务场景的能力,并且在对处理速度,响应时间,对浮点数的支持上作进一步的优化。
3.3. 增加即时编译速度、整合WebAssembly。
增加即时编译的速度能够对本地代码进行更优化地编译,更快速地解读运行代码。
同时,Tron将考虑基于WebAssembly(简称WASM)进一步优化TVM虚拟机。WebAssembly 目前由 Apple、Google、 Microsoft和Mozilla牵头,为突破Web浏览器性能瓶颈而设计,并可由 C/C++ 等语言编译产生。WebAssembly应用在区块链场景上,可以提高基于Web的Dapp的性能。实现整合了WASM的TVM,将会满足未来复杂业务场景对接区块链应用的高性能、高吞吐量要求。
以下为TVM虚拟机参考教程(智能合约部署方案)
1、编译合约
合约编译地址:https://remix.ethereum.org
2、获取ABI和字节码
以如下合约为例:
pragma solidity^0.4.11;
contract Tron {
uint256 tron;
constructor() public { }
function set(uint256 number) public returns(bool){
tron = number;
return true;
}
}
ABI:
[{“constant":false,"inputs":[{"name":"number","type":"uint256"}],"name":"set","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
ByteCode:608060405234801561001057600080fd5b5060c48061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b1146044575b600080fd5b348015604f57600080fd5b50606c600480360381019080803590602001909291905050506086565b604051808215151515815260200191505060405180910390f35b600081600081905550600190509190505600a165627a7a723058209791df3f67e9af451c35d7ae55bda5e352764f6a38ea23fa850b1c1fe1bc72e90029
3、部署合约
wallet-cli-vm的分支: https://github.com/tronprotocol/wallet-cli/tree/wallet-cli-vm
java-tron-vm的分支:https://github.com/tronprotocol/java-tron/tree/develop_vm
Password: 钱包客户端密码
ContractAddress: 自定义合约地址(需要满足波场地址格式要求)
ABI:接口描述
Code: 字节码
Data: 初始化函数参数相关
Value: 保留
deploycontract(Password, ContractAddress, ABI, Code, Data, Value)
4、调用合约
Selector:函数选择器
Data:参数相关
triggercontract(Password, ContractAddress, Selector, Data, Value)
5、查询合约
getcontract(ContractAddress)
以上为波场TRON Tron Virtual Machine 虚拟机介绍及部署教程,欢迎大家尝试体验TVM并提出宝贵意见,我们将继续完善更新以保障Tron Virtual Machine 能以最优秀的状态运行于波场TRON主网络上。