Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
137 0 0
什么是虚拟机?0 a4 U  L% L. Q9 c, r  }4 Z, I
% q3 L: q# l2 j# g: d+ v% ^
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。9 Q  Z& ]9 Q7 Z+ V+ e
+ o0 [1 _1 W9 W) p& H0 ]2 i2 w
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。: I+ j/ M) c9 Z- \5 N
4 \' ~. S  P/ s- R' c
Qtum 已兼容 EVM,为何还需要 x86VM?
4 f2 ^2 d  y$ p2 J: [% H8 ~) a% y
. X3 `2 g6 }9 L4 B7 A' w虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:! I7 w% o3 j1 Q6 V- x
* M; H+ s5 R" ^; Y, F# }
编程语言局限性(Solidity)
8 |' w4 w' r; `4 h5 Y缺少标准库
7 J4 B% g4 G( @* {- b5 r. u. l256bit 整数,大部分处理器不能原生支持,运行效率降低2 Z! Q5 j5 Q$ ^  W  b' d& Q
Gas 模型不合理,难以估计 Gas 消耗7 {% H) p7 R4 K
生成的 bytecode 较大,浪费区块存储资源* `; V+ [4 X5 H! Q/ O
难以测试和调试
& u+ T' c+ V, d/ p1 @+ a7 g  `+ T# N. B6 \7 i6 ]
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
. q, I- E' ~4 A; h
) D2 m; G, W. J5 b/ D# |9 ?支持多种主流编程语言: C/C++/Go/Rust 等等
, S. W. k: O& ^' b5 a: P丰富的标准库,提高开发效率
4 D" v6 E8 p7 Q( ?8 {更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗
2 G& Z6 n# r1 s' i0 i4 e: e* y  }解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等) o& L5 O9 l# H5 d" I  Z# p
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复
. W7 d; Y0 a" X( S* z第一类预言机 :无需运行合约即可获得某些合约数据
7 I( D. X3 f, p6 m区块链动态分析 :更全面地分析区块链状态
* Q: @8 v: A) N4 T0 l! G  k4 r选择性数据存储 :节省宝贵的区块链上资源
/ g3 L5 l* p3 z( W# K# {8 n6 ^2 h清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用; R1 c2 I, ]. P  W  d7 i
! n" U  M) f0 {1 G4 a9 ?
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。
' b9 T9 K  e3 E0 l- x& {简介
8 N. \8 Y! p5 i8 A8 [" x# g6 d- S7 s8 y) X% R) `
本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。
: _9 x- ~8 d+ r 什么是 Qtum-x86
; m( U. t( K$ ?% N" W
% z6 T! Q) Z7 z% \Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。8 s5 Q( s( X5 H9 a( j  R9 Z, ~

2 G6 @5 n* w8 R$ i2 f该版本的 Qtum 目前有以下几项限制:' c- [9 H0 R) D1 e# |; i
必须从 Docker 中使用或从源代码编译6 S1 f+ A# t5 k' _3 j  a# R
不支持以太坊虚拟机合约功能
% I  f% M$ L. z不支持测试网络和主网,只支持 regtest8 u. d# n* |5 N$ p, R* c- T
出现孤块及分叉将无法正常工作
5 }( {6 p1 _; t$ S0 v* b) gx86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用; k1 m5 {+ i* _6 m

3 W: F! t) J6 D( S/ k0 T01+ R, I' g3 s3 j0 v, P
工具链设置; m# H% ?7 y7 x0 O

8 D; a4 k  K3 h" b# c% x9 W7 y由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。6 N6 N1 u1 T  i4 b$ c7 d% F
8 r: o! n0 r  Y+ B6 n5 T0 l
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
1 r6 e. k  [/ j+ F1 f* C  S5 K2 Y0 a2 Z  q$ @0 a( j
Docker 文件和一些实用程序可以从以下网址下载:4 \) ?5 Y. P  G
https://github.com/qtumproject/qtum-docker/tree/master/proto-x86* f( q* _# n5 E2 i+ p
' t: E& x6 s1 V, h2 x
构建 docker 镜像的步骤如下:
0 P, t" X: d7 q/ o" ?1 P7 ~docker build -t qtumx86 -f Dockerfile
/ _6 j. C  W" H
+ E" E. H* J- f+ o, n% C. r大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
/ K3 d4 B& o) Zdocker build -t qtumx86 -f Dockerfile . --no-cache$ F* x! f/ K2 C% D' k" c2 @; S
1 P4 j* e2 r! i" F5 S# p2 {5 \; P
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:6 j  ?% R+ P) b+ ?0 }9 c7 k
#!/bin/bash6 n' U9 _! G- u* _! H7 X6 }0 i4 W
function qx86start() {3 ?4 \8 U4 _( B3 a# ?
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
" A$ w9 n/ O# e}
; B0 E! W/ A1 Y$ rexport -f qx86start, `0 H+ L6 C( @6 C3 `  r5 a* }
) j7 t: @$ \: W( |1 `$ w/ B: K
function qx86stop() {
+ v, W5 [. r6 T7 G/ I2 B9 t    docker stop qx86
0 @" G. ?7 i* R9 g* ]}$ D$ c' l/ X6 `* {
export -f qx86stop
* F9 |4 x( \- L8 O+ o1 M
( S1 `# m0 H& E" l' Zalias qx86cli='docker exec qx86 qcli'
- |: e+ R+ N) N/ g0 R # j4 }$ O. q7 j; J' d/ r3 a' d
function qx86deploy() {" v; {- {9 U' u( e) m
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
* M# `7 Q" j7 K5 K/ O}
& [4 L2 ~6 u& C9 K, [" L- @export -f qx86deploy" ]4 i" a+ E2 N* E$ d
% i- ^% @: J' b7 D, ^1 c8 _, j
function qx86tb() {9 L. j0 h0 w) [+ Y. H4 \+ ?
    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb5 J+ n. ?$ `+ W! K' d5 P) E
}# K5 M5 Z& M# l  Y8 O
export -f qx86tb
2 d& u8 s$ c; K) `& `- W! Y
4 }% O- }; n( ^$ [4 Cfunction qx86make() {5 ?- W! |7 p+ ]8 i
    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@") ]4 c6 P( {5 g
}
& t/ D; K# h3 e2 S' `export -f qx86make- s0 k9 P7 [3 U% y3 A
5 @, R$ Q6 O, b3 z
开发者可以在当前的 bash 会话中使用该文件,只需执行:' W) y  g% ^+ q! u# L- V/ f
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1