Qtum x86 虚拟机技术简介
9爱乐9
post on 2022-12-20 10:07:28
30
0
0
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。
Qtum 已兼容 EVM,为何还需要 x86VM?
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
编程语言局限性(Solidity)
缺少标准库
256bit 整数,大部分处理器不能原生支持,运行效率降低
Gas 模型不合理,难以估计 Gas 消耗
生成的 bytecode 较大,浪费区块存储资源
难以测试和调试
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
支持多种主流编程语言: C/C++/Go/Rust 等等
丰富的标准库,提高开发效率
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复
第一类预言机 :无需运行合约即可获得某些合约数据
区块链动态分析 :更全面地分析区块链状态
选择性数据存储 :节省宝贵的区块链上资源
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。
简介
本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。
什么是 Qtum-x86
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
该版本的 Qtum 目前有以下几项限制:
必须从 Docker 中使用或从源代码编译
不支持以太坊虚拟机合约功能
不支持测试网络和主网,只支持 regtest
出现孤块及分叉将无法正常工作
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
01
工具链设置
由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
Docker 文件和一些实用程序可以从以下网址下载:
https://github.com/qtumproject/qtum-docker/tree/master/proto-x86
构建 docker 镜像的步骤如下:
docker build -t qtumx86 -f Dockerfile
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
docker build -t qtumx86 -f Dockerfile . --no-cache
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
#!/bin/bash
function qx86start() {
docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
}
export -f qx86start
function qx86stop() {
docker stop qx86
}
export -f qx86stop
alias qx86cli='docker exec qx86 qcli'
function qx86deploy() {
docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
}
export -f qx86deploy
function qx86tb() {
docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb
}
export -f qx86tb
function qx86make() {
docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
}
export -f qx86make
开发者可以在当前的 bash 会话中使用该文件,只需执行:
source helpers.sh
BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
Write the first review