Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
136 0 0
什么是虚拟机?
: @  M2 F8 ~1 m2 Z2 F8 ]( n" h% _. q; C! F$ k% b, [( z1 t
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
8 B6 P. ?7 h  c 1 h4 }. ?; e  X' X# i
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。5 H1 d$ A$ a, A" o- T
+ h1 t' I- l. W  b4 W* T. W  e
Qtum 已兼容 EVM,为何还需要 x86VM?6 A* A- U1 Y. y7 A7 P4 U" w
% T# q7 i0 q! i8 _
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:- a2 _- @. @2 f9 s" o
8 C% c; s  x2 f$ x" x7 N% x1 ]" Y
编程语言局限性(Solidity)
$ m2 K( i: w2 C  N; e  ~* i- T缺少标准库
# P3 |5 T. Y  R0 w& z# @; [* ^256bit 整数,大部分处理器不能原生支持,运行效率降低# y; P1 n) I5 U$ _" d
Gas 模型不合理,难以估计 Gas 消耗/ \6 E2 Y+ z1 f
生成的 bytecode 较大,浪费区块存储资源- l# e$ C- A& L4 }/ D6 N
难以测试和调试
/ o( J% k8 C+ a& Z( H* y1 I3 X, z0 C; K+ o& }/ J" h' x
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
0 ?! [, r' s! P8 S0 H! P2 B6 ^' ]9 X& _/ ?+ m* H9 N
支持多种主流编程语言: C/C++/Go/Rust 等等' v4 Y  B  `9 T# P" J! L  o/ ^
丰富的标准库,提高开发效率
/ H( q" b5 e4 c* C更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗) j. W, M. L. A; c! B
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等2 O* y9 x, N- |4 y. ?" }9 _* W
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复
. O/ O: r8 b8 f# p. Z$ T第一类预言机 :无需运行合约即可获得某些合约数据
! Z/ |8 }4 t# w) v! O$ y0 Y1 n区块链动态分析 :更全面地分析区块链状态
8 R# w& w  [8 |* m! z& d选择性数据存储 :节省宝贵的区块链上资源4 b* K  W% f* E3 x" W
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
" {" t# O( @. A8 c, Y" d" Q) f' J$ y% }/ L. e! w0 ^
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。
1 @6 e- O- I9 H3 X3 q% g简介
) Y  U" M0 S+ w! f% v; _+ g+ D$ s6 O6 l4 a3 j4 H  w
本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。
# G7 ?7 J+ N- C) V$ v 什么是 Qtum-x86
1 f/ Q7 E' F# P2 S, B9 j6 w, f" @* o2 z8 f- [0 ]
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
. @% u- I. l% |: k% D8 M
# v3 s0 G) X4 o6 y* J该版本的 Qtum 目前有以下几项限制:1 ?& t( W) c! p8 E- z, R5 n; u4 p
必须从 Docker 中使用或从源代码编译" t) Q2 ?, I! l' q) i5 q
不支持以太坊虚拟机合约功能
2 B% ~% ^7 G" y  \# y  s# f不支持测试网络和主网,只支持 regtest
0 q7 ]# O& X6 ]) B) q1 Z出现孤块及分叉将无法正常工作
% y2 u/ s4 W/ Y7 mx86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
7 L/ M5 {! z5 [: A9 i4 [& ^5 \
3 }# ~& D1 H0 p8 S  l. w01
. I# h9 C  c* ^- i" c4 D) Y' ]工具链设置
. Z) ~* d( h' S4 D9 _1 k  U3 a
0 _0 E1 b3 c7 j2 h由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
* }, t. n4 H# y' |/ m2 o, L& l3 s, c: o! s
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。. ^* W8 k  m/ k8 r
1 {: Z& L5 ~& c/ ~
Docker 文件和一些实用程序可以从以下网址下载:
( X, ]4 g3 C- ^6 u7 N. j: \  V; Xhttps://github.com/qtumproject/qtum-docker/tree/master/proto-x86
! H. |5 R" n5 b8 H5 X# A. k
: a& x# V* E) u0 J构建 docker 镜像的步骤如下:* t9 W, w) @  `
docker build -t qtumx86 -f Dockerfile . D0 n" f+ X$ y8 T; F6 a% M& H
$ I0 o) \4 [+ b. z
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:9 f+ e9 K9 l6 p# G" H( H
docker build -t qtumx86 -f Dockerfile . --no-cache
0 ~! Z) o2 E# s, t) A) Y! R3 Z
6 ]* I! x0 j0 i/ T% y* Y' H- M% f4 t. r一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
: c5 N. w7 g$ U: _- ^/ v! [#!/bin/bash
1 b% S# g( F$ \- _9 k, Tfunction qx86start() {
8 m2 ~$ G2 \, T4 J+ K    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
$ [. X, i% {- i6 `' g6 W}
& p, M3 Z8 \6 ?$ rexport -f qx86start( `" J4 s+ g9 O* D
& u7 ]% Q* {8 I8 w4 r0 `9 X! p* J5 ^
function qx86stop() {* \$ V7 a+ U5 Z& e
    docker stop qx86; n/ l3 o5 t# \7 p' K! ^
}  o* x) w, O9 x7 e0 m7 B% z8 x
export -f qx86stop
# A; }1 I7 z, [$ m  e' T( `6 F
. w- m' ~* M, p2 ^( X4 L! qalias qx86cli='docker exec qx86 qcli'
1 [# N' q: F# L: A2 B7 n+ O3 P& Y - o$ E0 A4 o4 K) f: N4 S4 p$ P
function qx86deploy() {1 `7 Z3 H+ Z' z+ b, B( `0 ~! r
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
& y9 a. c5 |- Q+ N- c}2 k/ O1 ~1 e9 @
export -f qx86deploy* s0 Z( f0 @3 A% M% n4 ~
% p3 e' v) k) \4 Q$ @
function qx86tb() {
: W) Y9 j# q) B    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb
: @; K& N. ^, W( i4 i}6 c% j6 T! S, x( O
export -f qx86tb" S  K6 d, u4 d) M$ `7 o6 i
( V" c; x* q0 r
function qx86make() {
& y* {, `9 W- u. j3 m- d: \* X    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
, d! i; k& x' |+ Z}5 j' O, U: Y* M, m0 \
export -f qx86make, C: p+ F- _+ z. ?/ U
) k5 A/ w2 i# N
开发者可以在当前的 bash 会话中使用该文件,只需执行:/ _' p+ H, D5 _( j2 l. v
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1