Qtum x86 虚拟机技术文档连载(一)

 

什么是虚拟机?

 

虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。

 

简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。

 

Qtum 已兼容 EVM,为何还需要 x86VM?

 

虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:

 

  1. 编程语言局限性(Solidity)

  2. 缺少标准库

  3. 256bit 整数,大部分处理器不能原生支持,运行效率降低

  4. Gas 模型不合理,难以估计 Gas 消耗

  5. 生成的 bytecode 较大,浪费区块存储资源

  6. 难以测试和调试

 

正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:

 

  1. 支持多种主流编程语言: C/C++/Go/Rust 等等

  2. 丰富的标准库,提高开发效率

  3. 更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗

  4. 解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等

  5. 冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复

  6. 第一类预言机 :无需运行合约即可获得某些合约数据

  7. 区块链动态分析 :更全面地分析区块链状态

  8. 选择性数据存储 :节省宝贵的区块链上资源

  9. 清晰的依赖关系树 :有可能并行运行智能合约,降低 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值